問題タブ [code-golf]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
language-agnostic - Code Golf: 電話番号を単語に
1-800-BUY-MORE などのように、言葉で表現された電話番号を見たことがあるでしょう。
7 桁の米国の電話番号のすべての可能な単語の組み合わせを生成するために記述できるコードの最短量はどれくらいですか?
入力は 7 桁の整数 (より単純な場合は文字列) であり、入力が適切に形成されていると仮定します。
出力は、7 文字の文字列のリストになります。
たとえば、428-5246 という数字は次のようになります。
GATJAGM
GATJAGN
GATJAGO
GATJAHM
GATJAHN
GATJAGO
GATJAIM
GATJAIN
GATJAIO など……。
受賞基準は、すべての可能な文字の組み合わせを生成する文字数が最も少ない任意の言語のコードです。
その他の注意事項:
- さらに興味深いことに、ここで定義されているように、数字ごとに 3 文字の北米クラシック キー パッド電話の文字を使用することによってのみ、単語を形成できます。つまり、Z と Q は除外されます。
- 数字の「1」にはスペースを入れてください。
- 数字の「0」にはハイフン「-」を入れる
出力を実際の英単語として認識すると、ボーナス ポイントが付与されます。わかりました、そうではありません。;-)
追加:オーケー、「Nick's Modified North American Classic Key Pad」で行きましょう。これは 6 キーに「O」(ああ、ゼロではない) があります。
language-agnostic - コードゴルフ:ダイヤモンドパターン
チャレンジ
入力に応じてひし形のパターンを出力する文字数別の最短コード。
入力は、ひし形のサイズとグリッドのサイズを表す 3 つの正の数値で構成されます。
ひし形は ASCII 文字/
と\
スペースで構成されます。サイズ 1 のダイヤモンドは次のとおりです。
グリッドのサイズは、ダイヤモンドの数の幅と高さから構成されます。
テストケース
コード カウントには、入力/出力 (つまり、完全なプログラム) が含まれます。
language-agnostic - コードゴルフ-バナー生成
誰かに感謝するとき、あなたはただ「ありがとう!」という電子メールを彼らに送りたくはありません、あなたは何か派手なものを持ちたいです:
バナーを生成するプログラムを作成します。スペースと感嘆符(感嘆符のないバナーとは何ですか?)とともに大文字のAZを生成するだけです。すべての文字は同じ文字の3x5グリッドで構成されています(したがって、SはSで構成される3x5グリッドです)。すべての出力は1行にある必要があります(したがって、改行はありません)。必要なすべての文字は次のとおりです。
勝者は、ファイルをutf-8エンコーディングで保存するのに必要なバイト数で数えた最短のソースコードです。ソースコードは、stdinからの入力、stdoutへの出力を読み取る必要があります。入力には。のみが含まれると想定できます。間違った入力でユーザーを侮辱すると、10文字の割引=Pが得られます。[A-Z! ]
これらの正確な28文字が必要でしたが、もっと面白くするために、コードを短くするものなら何でも、どのように表示するかを選択できます。文字が通常の文字のように見えることを証明するために、最後の3回の実行の出力を表示します。
これまでの最短コード(文字数(非ASCIIが存在する場合はutf8エンコーディング)):
133 J
205 Python
209ルビー
313 Haskell
345 C89
382 F#
language-agnostic - コードゴルフ:モジュラスディバイド
チャレンジ:
すでに使用している言語で提供されているモジュラス除算演算子を使用せずに、ユーザーから2つの整数入力を受け取り、最初の数値のモジュラス除算数を2番目の数値で割った結果を表示するプログラムを作成します。すべての入力が正であると想定します。
例:
誰が勝ちますか:
コードゴルフがどのように機能するかわからない場合、勝者はこのプログラムを最も少ない文字数で書いた人です。
php - コードゴルフ:1行のPHP構文
説明
PHPには構文にいくつかの穴があり、開発時にプログラマーがそれらに介入することがあります。これらの構文の穴は理由もなく存在するように見えるため、これは多くのフラストレーションにつながる可能性があります。たとえば、配列を簡単に作成して、同じ行にあるその配列の任意の要素にアクセスすることはできませfunc1()[100]
ん(有効なPHP構文ではありません)。この問題の回避策は、一時変数を使用してステートメントを2行に分割することですが、非常に冗長で不格好なコードになる場合があります。
チャレンジ
私はこれらの穴のいくつかを知っています(もっとあると確信しています)。コードゴルフスタイルは言うまでもなく、解決策を思いつくことすら非常に困難です。勝者は、4つの構文ホールすべての合計文字数が最も少ない人です。
ルール
- ステートメントは、次の形式の1行である必要があります。
$output = ...;
ここで、...
は含まれていません;
。 - 標準ライブラリ関数のみを使用してください(カスタム関数は使用できません
eval
) 。 - ステートメントは、機能しない構文の想定される機能と同じように機能します(失敗した場合でも)。
- ステートメントは、。を使用して、いかなる種類の構文エラーも発生せずに実行する必要があります
E_STRICT | E_ALL
。
構文の穴
$output = func_return_array()[$key];
-関数の返された配列の任意のオフセット(string
または)にアクセスするinteger
$output = new {$class_base.$class_suffix}();
-新しいクラスを作成するために使用されている任意の文字列連結$output = {$func_base.$func_suffix}();
-関数として呼び出される任意の文字列連結$output = func_return_closure()();
-別の関数から返されるクロージャを呼び出す
language-agnostic - コードゴルフ:ジグザグパターンスキャン
チャレンジ
単一の入力整数(N> = 3)を取り、繰り返されるとJPEG「ジグザグ」スキャンパターンに従ってx行列N
をトラバースするインデックスの配列を返す、文字数による最短のコード。以下は、8x8マトリックスsrcのトラバーサルの例です。N
N
例
(中央の行列は入力または出力の一部ではなく、入力が表すNxN行列の表現にすぎません。)
ノート
- 結果の配列のベースは、使用する言語に適している必要があります(たとえば、Matlab配列は1ベース、C ++配列は0ベースです)。
- これはこの質問に関連しています。
ボーナス
答えを拡張して、2つの入力N
とM
(N、M> = 3)を取得し、N
xM
行列に対して同じスキャンを実行します。(この場合N
、列M
の数と行の数になります。)
ボーナス例
language-agnostic - コードゴルフ:回転迷路
コードゴルフ:回転迷路
迷路からなるファイルを取り込むプログラムを作成します。迷路にはによって与えられた壁があり#
ます。迷路には、aで指定された単一のボールと、で指定されたo
任意の数の穴が含まれている必要があります@
。迷路ファイルは、コマンドラインから入力するか、標準入力から1行として読み込むことができます。ソリューションでどちらを指定してください。
次に、プログラムは次のことを行います。
すべての入力迷路が閉じていると想定できます。注:この点で、穴は効果的に壁として機能します。
すべての入力迷路に余分な空白がないと想定することができます。
文字数で最短のソースコードが優先されます。
javascriptで書かれた例:http: //trinithis.awardspace.com/rotatingMaze/maze.html
迷路の例:
language-agnostic - 特定のテキストで最も一般的に使用される単語の ASCII チャートを作成します
チャレンジ:
特定のテキストで最も一般的に使用される単語の ASCII チャートを作成します。
ルール:
a-z
andA-Z
(英字)のみを単語の一部として受け入れます。- 大文字と小文字の区別は無視します (ここでは
She
==she
です)。 - 次の単語は無視してください (非常に恣意的です、私は知っています):
the, and, of, to, a, i, it, in, or, is
明確化: 考慮
don't
: これは、範囲内の 2 つの異なる「単語」と見なされます: (a-z
および)。A-Z
don
t
必要に応じて (仕様を正式に変更するには遅すぎます)、すべての 1 文字の「単語」を削除することを選択できます (これにより、無視リストも短縮される可能性があります)。
指定されたファイルを解析しtext
(コマンド ライン引数で指定されたファイルまたはパイプで入力されたファイルを読み取ります。推定) 、次の特性を備えたus-ascii
a を構築します。word frequency chart
- 最も一般的な 22 の単語 (頻度の降順) のグラフを表示します (以下の例も参照)。
- バー
width
は、単語の出現回数 (頻度) を (比例的に) 表します。スペースを 1 つ追加して単語を出力します。 - これらのバー (およびスペースと単語とスペース) が常に収まるようにしてください:
bar
+[space]
+word
+[space]
は常に <=80
文字でなければなりません (バーと単語の長さが異なる可能性があることを確認してください:頻度はそれほど変わらないものの、最初のもの)。これらの制約内でバーの幅を最大化し、バーを適切にスケーリングします (バーが表す頻度に従って)。
例:
例のテキストはここにあります(不思議の国のアリスの冒険、ルイス・キャロル著)。
この特定のテキストは、次のチャートを生成します。
参考までに、これらは上記のチャートが基づいている周波数です:
2 番目の例 (完全な仕様を実装したかどうかを確認するため):you
リンクされたAlice in Wonderlandファイル内の
すべての出現箇所を次のように置き換えますsuperlongstringstring
。
勝者:
最短の解決策 (文字数別、言語別)。楽しむ!
編集: これまでの結果をまとめた表 (2012-02-15) (ユーザー Nas Banov によって最初に追加されました):
数字は、特定の言語での最短のソリューションの長さを表します。「厳密」とは、仕様を完全に実装するソリューションを指します (バーを描画|____|
し、上部の最初のバーを____
線で閉じ、頻度の高い長い単語の可能性を考慮するなど)。「リラックスした」とは、解決策を短縮するためにいくつかの自由が取られたことを意味します。
500 文字より短いソリューションのみが含まれます。言語のリストは、「厳密な」ソリューションの長さによってソートされます。「Unix ツールチェーン」は、従来の *nix シェルに加えてツールの組み合わせ (grep、tr、sort、uniq、head、perl、awk など)を使用するさまざまなソリューションを表すために使用されます。
string - コードゴルフ:繰り返されるテキストの「カラーハイライト」
(重要な概念を支援してくれた以下の greg0ire に感謝します)
課題: すべての部分文字列を検索し、色属性で「タグ付け」するプログラムを作成します (XML で効果的に強調表示します)。
ルール:
- これは、長さが 2 以上の部分文字列に対してのみ行う必要があります。
- 部分文字列は、アルファベット以外の文字を含む可能性のある、連続した文字の単なる文字列です。スペースやその他の句読点は部分文字列を区切らないことに注意してください。
- 文字の大文字と小文字は無視できません。
- 「ハイライト」は、XML で部分文字列にタグを付けることによって行う必要があります。タグ付けは、その部分文字列と同一の部分文字列に固有の正の数
<TAG#>theSubstring</TAG#>
であるという形式にする必要があります。#
- アルゴリズムの優先度は、テキスト内で一致する回数ではなく、最も長い部分文字列を見つけることです。
注: 以下の例に示されているタグ付けの順序は重要ではありません。明確にするためにOPによって使用されています。
入力例:
部分的に正しい出力 (この例では、OP が完全に置き換えられていない可能性があります)
コードは、次のようなエッジ ケースを処理できる必要があります。
入力例 2:
出力例 2:
勝者:
- 最もエレガントなソリューションが勝ちます (他のコメント、賛成票によって判断されます)
- シェルスクリプトを利用したソリューションのボーナスポイント/考慮事項
軽微な説明:
- 入力はハードコーディングするか、ファイルから読み取ることができます
- 基準は「エレガンス」のままで、確かに少しあいまいですが、単純な文字/行数もカプセル化しています。他の人によるコメントや賛成票も、SO コミュニティが課題をどのように見ているかを示しています
language-agnostic - コード ゴルフ: 2D プラットフォーマー
チャレンジ
- レベルの終わりに到達してください!
- 各(C)oinブロックを正確に2回ヒットするとボーナスポイント。
不許可
- 何らかの方法でコマンド シーケンスをハード コーディングします。
- このゴルフを解決するという、まさに 1 つのことを行うお気に入りの「1 文字言語」 。
方法
プログラムは、標準入力を介して下のレベル (改行なし) を受け取ります。
次に、レベルを正常に完了するために必要なコマンドを出力する必要があります。
レベル
- Sは開始位置です。
- Eレベルを完了するために必要な位置。
- Cは 2 枚のコインが入ったコイン ブロックです。レベルを完了するために、これらの 1 つをスキップする必要はありません。
- Cと_の両方が地面としてカウントされます。固体の地面のみがあり、フローティング プラットフォームはありません。
- | | は壁です。レベルを完了するためにジャンプする必要がある壁はすべて、最大で 1 壁の高さです。それ以上のすべての壁は、決して抜け出せない奈落の底と見なすことができます。
- xはスパイクです。触れるとどうなるか当ててみてください。スパイクは常に、周囲の地面より 1 レベル下にあります。
すべてのレベルは 4 行の高さで、各行の幅は 63 文字です。つまり、レベルごとに合計 252 文字になります。
注: >< は境界線を示すためのものであり、プログラムへの入力には含まれません。また、テキスト エディタにも気をつけてください。
コマンド
- M = 右に 1 移動します。下に地面がない場合は、地面にぶつかるまで落下します。落下中 は動けません。
- J = ジャンプ、次の 3 つのコマンドの間、または (C)oin ブロックをヒットするまで、1 ずつ上に移動します。その後、地面に着くまで落下します。ジャンプできるのは地面にいるときだけです。M で地面と同じ高さになると、ジャンプはキャンセルされます。
- O = NOP、あなたを待たせます/何もしません。このようにして、幅が 1 ブロックしかない穴やスパイクをジャンプできます (上記のレベルではこれは必要ありませんが、これが必要なレベルを解決できれば、追加のポイントを獲得できます)。
ソリューション(コインブロックあり)
連続するコマンドは、互いの上に積み重ねられます。
Fは落下する場所を示します (落下中は何もできないことに注意してください)。
結果のコマンド シーケンス、長さ 75 文字:
これがいくつかの興味深い結果をもたらすことを願っています...そして、たくさんの炎ではありません:O
編集
OK、最初に考えていたよりもはるかに多くの可能性があります。すべての編集についてお詫び申し上げます。