ゴルフのための言語の選択[終了]


28

ゴルフに適した言語を選択するためのヒントは何ですか?選択する言語に影響する要因は何ですか?

問題タイプの例を次に示します。

  • I / Oソリューションを必要とする問題、コンソールまたはファイル
  • 解析が必要な問題
  • ソリューションを関数定義として記述する必要がある問題
  • 数学の問題
  • 素数を扱う問題
  • 数のパズルを解く
  • 数値的手法の実行
  • 文字列処理
  • 配列処理
  • トリッキーな2Dアレイの問題
  • 計算幾何学
  • 再帰
  • 2Dグラフィックス
  • 3Dグラフィックス
  • オーディオ
  • ネットワーキング/ウェブ
  • 並列処理

「GolfScript | Jを使用する」のようなことを言うのは好きではないからです。


いくつかの問題については、型システムです。たとえば、64ビットより大きい整数を処理する必要がある場合、高価になる言語(Javaなど)ではなく、組み込みの言語(Golfscript、Haskellなど)が必要です。
ピーターテイラー

「ヒント」タイプの質問に関するポリシーに沿って、これをWikiにしました。
dmckee

99ボトルは、特定の文字で始まる言語が必要な場合に役立ちます...
ジェシー・ミリカン

このスレッドをより良いリソースにする手助けをしてくれたace、trimsty、algorithmshark、hosch250への称賛。投稿をお待ちください!アルゴリズムシャークとhosch250の間の懸命な賞金の呼びかけでしたが、両者は多くの詳細な努力をしましたが、最終的にはHerr Sharkが先導者として認められました。
ジョナサンヴァンマトレ14年

希望する言語を選択してください。言語間の競争あります。より多くの言語でよりユニークで興味深いソリューションが得策です。
メゴ

回答:


-1

必要なものに応じて、C / C ++は高速ですが、より多くの作業を自分でコーディングする必要があります。PythonとRubyは低速ですが、多くの作業を短縮する組み込みメソッドを使用してコーディングする方がはるかに簡単であり、無限の大きな値(RAMがある場合)を自動的に処理します。Haskellのような関数型言語を使用することは、問題をそのように組み立てることができれば、純粋に数学的な関数の使用に最適です。


2
主にpythonユーザーとして、Pyでは、文字数を節約するための非常にハッキングなトリックがいくつかありますが、文字カウントの使いやすさに対して支払います。HaskelとLispは、楽しみながら、Pythonよりも長く実行される傾向があります。
到着

これはおそらく受け入れられる答えではないはずです。高レベル言語と低レベル言語に関する説明は、実際には文字数とは関係ありません。
サミーベンチェリフ

はい、2017年2月23日に編集された質問に対する2011年の回答を保持するのは本当のフェアです。回答された後、質問の変更を停止する必要があるかもしれません。
ewanm89

10

私の2セントを入れる 配列プログラミング言語、特にJAPLにを費やしました。

K / Kona、Q、およびNialもこのカテゴリに該当しますが、一般に同じ利点と批判があります。裁量を使用します。以下のJの例を使用します。これは主にASCIIであり、入力が簡単だからです。APL文字は1バイトとしてカウントされるため、ゴルフの選択肢として言語の問題にしないでください。

  • 数学の問題
  • 数のパズルを解く
  • 数値的手法の実行
  • トリッキーな2Dアレイの問題

これらの2つは非常に優れた数学およびデータ操作言語です。なぜなら、これらは配列を高レベルで投げ、暗黙のうちに多くのループが行われるためです。たとえば、3、4、および5(10 + 3 4 5)にそれぞれ10配列の行(+/"1 arr-ループはにあります"1)。

  • 素数を扱う問題

特に素数の問題では、APLのいくつかの方言と同様に、Jには高速で短い組み込みプリミティブがあります。(編集:Nars2000のことを考えています。これは方言であり、完全に異なる実装です。APLには素数の組み込みがありません。)N番目の素数(p:)、いいえ。(_1&p:)までの素数、因数分解(q:)、GCDおよびLCM(+.および*.)などがあります。ただし、実際には、質問では、独自の主要な実装をクックする必要があることがしばしば指定されるため、これらはあまり使用されません。必要な主要なものを手に入れるにはきちんとした派手な方法がまだありますが、カットアンドペーストが少し少なくなります。

  • 文字列処理
  • 配列処理

配列と文字列の処理は少し複雑です。APL/ Jが得意であるか、またはプリミティブまたは一般的なイディオムを持っている場合、それはほとんど些細なことです。非常にシーケンシャルであり、あまり並列化できないものである場合、あなたは悪い時間を過ごすことになります。中間にあるものはすべて空中に浮かんでいますが、通常は好意的に反応します。

  • I / Oソリューションを必要とする問題、コンソールまたはファイル
  • ソリューションを関数定義として記述する必要がある問題

IOは奇妙です。APLには1文字の入力式がありますが、Jの場合、数値を読み取るには少なくとも8を費やす必要があります".1!:1]1。出力はやや冗長ですが、実際には無駄な6文字または7文字が表示されています。特に、Jは、IO自体をいじり回す代わりに、関数への引数として入力を受け取ることができる場合、それを非常に気に入っています。

実際には、JおよびAPLを使用すると、通常、ソリューションはコンソールで呼び出す関数として記述されます。APLを使用すると、基本的に引数の変数名を入力し、操作していた式を中括弧で囲んで1日呼び出すことができます。

しかし、Jを使用すると、関数を明示的3 :'...'に定義するためのオーバーヘッドが少しあります。内部で文字列をエスケープする必要があります。そのため、通常行われるのは暗黙プログラミングと呼ばれるものです。 Haskellのそれとは違いません。これは祝福と呪いの両方になる可能性があります。引数を参照するのに多くのキャラクターを費やす必要はありませんが、括弧でdrれるのは簡単です。機能するもの。

  • 解析が必要な問題
  • 計算幾何学

私はこれらの特定の問題をゴルフで経験したことはありませんが、私はこれを言います:結局、配列プログラミング言語は同じ方法で多くのデータをパイプし変換するのに非常に優れています。問題を数値シャッフルの演習に変えることができれば、それをAPL / Jの問題にすることができ、汗をかくことはありません。

ただし、すべてがAPL / Jの問題であるとは限りません。Golfscriptとは異なり、APLとJはたまたまゴルフに適しているだけでなく、他の利点もあります;)


素晴らしい貢献!プールに初めて入ってくれてありがとう。
ジョナサンヴァンマトレ14年

4

Perlがまだ賞賛されていないのはなぜですか?これらのほとんどすべて、特に文字列に関連するもの(正規表現)には、優れたゴルフ言語です。

Burlesqueは数字関連のプログラムに適していますが、Rubyはより簡単なテキスト操作に最​​適です。

実際には、言語とゴルフのスコアのリストがここにあります


私はPerlについて不法占拠を知りませんが、私は同意します。
ckjbgames

2

私はあいまいなプログラミング言語を使って仕事をやり遂げるのが好きです。

あなたがリストした詳細の私のお気に入りは次のとおりです。

I / Oソリューションを必要とする問題、コンソールまたはファイル

以下のような言語TI-基本うまく仕事が、私は好むルビーのためのputs

解析が必要な問題

GolfScriptは間違いなくここであなたを助けます

ソリューションを関数定義として記述する必要がある問題

TI-84表 -関数を許可します。Y=たとえばY=|X|、Xの絶対値を返します

数学の問題

TI-Basic-電卓用に作られているため、数学が含まれています;)

素数を扱う問題

特にない; Mathematicaはおそらく仕事に最適なツールです

数のパズルを解く

配列を自動的にループするTI-Basic

数値的手法の実行

TI-BasicまたはMathematica

文字列処理

Python-優れた文字列関数がいくつかあります。

TI-Basicがどれほど優れていても、文字列には使用しないください ...

配列処理

TI-Basicは - 自動配列をループ。たとえば、配列内のすべての値をインクリメントします-L1+1→L1

Ruby-非常に強力な配列機能もあり、もちろん!コードの圧縮にも役立ちます

トリッキーな2Dアレイの問題

TI-Basicは2D配列をサポートしていないため、ここではRubyまたはPythonが最適に機能します

計算幾何学

TI-Basicには幾何学的な機能があり、微積分および線形代数までのほとんどの数学に使用できます


ボーナス

ループ

ArduinoまたはQuomplexのいずれか。Arduinoにはビルトインがvoid loop(){}あり、Quomplexには括弧([])に含まれる無限ループがあります

描画/ GUI

Game Maker Language非常に強力な描画機能を備えており、 TI-Basicはグラフ上での描画をサポートしているため、一般的に有用なツールでもあります。

クイン

どちらかHQ9 +またはQuomplex理由HQ9 +Qプログラムのソースコードを出力する必要があり、*(出力)が指定されているか、出力が生成されない限り、Quomplexはソースコードを自動的に出力する#


2

数学の問題を解いていてMathematicaを持っていない場合は、Sageを試してください。Pythonに基づいているため、Pythonを既に知っている場合は、構文を学ぶのに多くの時間は必要ありません。

例:

また、グラフのプロットや方程式の解法にも役立ちます(たとえば、 solve()、Sageで関数を。または、ルールで禁止されているdiff()場合、シンボリック微分を実行できる関数があるため、Newton Raphsonプロセスを簡単に実装できます) 。

また、Python2プログラマーの場合、Sageを使用すると、長いimportステートメントをスキップしてチートできる場合があります。たとえば、mathおよびsysはデフォルトですでにインポートされています。(Python2プログラムが整数除算に依存している場合、これは機能しない可能性があることに注意してください。)


良い情報!貢献してくれてありがとう。
ジョナサンヴァンマトレ14年

1

Java、C ++、およびPython 3の3つの言語を知っています。これらのどれも高レベルではありませんが、これは私の経験です。

Java:

二度とゴルフにJavaを使用することはありません。書くだけで80文字以上かかりますHello World!。ただし、次のような長所があります。

入力にはScannerオブジェクトの作成が必要です。単一の文字を入力することは困難です。入力するタイプを指定する必要があります。
forループの ため、解析は非常に簡単です。拡張forループはこれに最適です。
Javaはメソッドをサポートしていますが、メソッド宣言は非常に長いです。
Javaは、数学や他のすべての高水準言語に優れています。
問題に文字列の変更が含まれる場合、Javaの使用は困難です。既存の文字列を変更することはできません。
Javaの配列は簡単に使用できます。
Javaは再帰が得意です。
Javaには組み込みのグラフィックが含まれています。彼らは非常に使いやすいです。

C ++

C ++は非常に強力な言語ですが、56文字でゴルフをしようとするとかなり長くなります Hello world!ます。

入力と出力は簡単です。入力するタイプを指定する必要はありません-これは自動的に行われます。ただし、iostreamライブラリを含める必要があります。
解析は非常に簡単です。
関数の宣言は単純ですが、多くの重要な文字を消費します。C ++は数学に優れていますが、JavaのようにPIやEは含まれていません。
C ++の文字列は使いやすく、必要に応じて変更できます。
vector可能な 場合はsの代わりにarraysを使用しますが、両方とも使いやすいです。
C ++は再帰が得意です。
C ++には組み込みのグラフィックは含まれていません。

Python 3

Python 3は、C ++およびJavaに似ています。強く型付けされていないため、はるかに短くなります。つまり、変数が何であるかを推測するだけです。

入力は簡単ですが、すべてが文字列として入力されます。すべての入力を任意の値に手動で変換する必要があります。
解析とループは非常に簡単です。
Python関数の宣言は非常にシンプルで短いです。
Pythonは数学が得意です。
Pythonの文字列は使いやすいです。
配列は使いやすいです。
Pythonは再帰が得意です。
Pythonには組み込みのグラフィックは含まれていません。


拡張forループによって、範囲forループについて話しているのではないでしょうか。C ++ 11(en.cppreference.com/w/cpp/language/range-for)以降、C ++はこれをサポートしています。Javaのfor-rangeループに構文的に似ており、指定されたオブジェクトに対してオーバーロードされるbegin()およびend()またはbegin(T)およびend(T)を実装するには、反復可能なオブジェクトのクラスが必要です。また、Cスタイルの文字列と組み込み配列にも実装されており、すべての標準ライブラリコンテナで機能します。
foob​​arの

@foobarはい、私はそれについて話していました。情報をありがとう、私はJavaを採用して以来ずっとそのことを望んでいました。
Hosch250 14年

現在、Javaには61バイトのソリューションがありますが、それでもあなたの主張は変わりません。
MilkyWay90
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.