プログラミングパズルとコードゴルフ

プログラミング愛好家やコードゴルファーのためのQ&A

9
インクリメンタルクイン
あなたの仕事は、ソースコードの最初の文字を出力するプログラムまたは関数を作成し、次に実行するたびに2番目、3番目...を出力することです たとえば、プログラムがfileのfoo言語barであった場合baz.bar、次のような出力が得られます。 λ bar baz.bar f λ bar baz.bar o λ bar baz.bar o この方法でソースコードを出力すると、プログラムは何でもできます。あなたは、ファイルのソースコードを変更しますが、印刷するためのソースコードであることを覚えているかもしれ元のソースコード。 これはコードゴルフであるため、バイト単位の最短プログラムが優先されます。

16
オルゴールを作る
あなたの仕事は、文字列(音楽)を入力(関数またはプログラム)として受け取り、音楽をオルゴールのように印刷(または返す)することです。 ABCDEFG.()入力として文字を受け取るだけで、入力が空になることはありません。必要に応じて、手紙を小文字で受け取ることもあります。 これは長さ3の空のオルゴールです。 ....... ....... ....... ご覧のとおり、行の長さは7文字で、オルゴールの長さは3なので、3行です。.オルゴールは空なので、ここにはのみがあります。音楽を入れましょう! まず、オルゴールを作成します。この例では、入力はになりますCDAG.DAG。 の長さCDAG.DAGは8なので、長さ8のオルゴールが必要です。 ....... ....... ....... ....... ....... ....... ....... ....... 次に、入力を一度に1文字ずつ読み取り、Oそれぞれの位置に配置します。 最初の文字はでC、各音符の位置はこれと同等です(わかりやすくするためにスペースを追加しました)。 A B C D E F G . . . . . . . . . . . . . . (and so on) 入力文字がの場合、.空の行を出力するだけです....... だから、にC沿って3番目の文字になります。上部のオルゴールに入れましょう: ..O.... ....... ....... ....... ....... …

17
ストップウォッチを実装する
以下に説明するように、経過時間を秒と分で表示する単純なデジタルストップウォッチを実装します。 重要 ディスプレイとコントロールの両方のセクションをお読みください! 表示 経過時間はMM:SS、以前に表示された時間文字列を「その場で」置き換えることにより、形式で表示する必要があります(画面の全体または一部をクリアすることもできます)。 ストップウォッチは少なくとも1秒ごとに更新する必要があります。 例: 0分0秒 00:00 0分33秒 00:33 1分50秒 01:50 最初は、「00:00」または範囲[00:00-59:59]の他の値で開始できます。 ストップウォッチがに到達すると59:59、リセットし00:00て新たに続行する必要があります。 一般的なパターンに従っている限り、(10進数の代わりに)別の基数、または必要に応じて別の数字システムを使用できます。 たとえば、次の13:03ように表示できます。 小数 13:03 16進数 0D:03 Base64 N:D クォーター虚数ベース 10101:3 ローマ数字 XIII:III 10進数以外の数字システム/ベースを使用する場合は、印刷可能なASCII(またはUnicode)文字を使用してエンコードする必要があります。たとえば、分と秒に2つのバイナリ(印刷不可)バイトを使用することはできません。 数値システムで許可されている場合は、出力に適切なゼロを左詰めする必要もあります。 区切り文字:を他の印刷可能な文字(数字を含む)に置き換えることも可能です。 コントロール ストップウォッチは、ユーザーが「control」キーを押して明示的に開始するまで、一時停止状態で開始し、この状態を維持する必要があります(以下を参照)。 ストップウォッチがカウントしている間に、ユーザが押下し、場合「コントロール」再度キーを、ストップウォッチべき一時停止されるまで、(現在の時刻を維持する)「コントロール」キーを一回押下されます。 「コントロール」キーを1回のキーストローク、例えばすることができs、例えば、またはキーの組み合わせCtrl+Shift+Xが、それは例えば、順番に複数のキーを押すと、「アトミック」でなければなりませんs、その後Enter、されて許可されていません。 ストップウォッチを一時停止および再開するには、同じ「コントロール」キー(または組み合わせ)を使用する必要があります。 特定の「コントロール」キーを使用する必要があります。つまり、「任意のキー」は許可されません。 または、「コントロール」のキーを押す代わりに、シングルクリックまたはダブルマウスクリックを使用できます。 ルール これはcode-golfで、バイト単位の最短回答が勝ちます。 標準的なコードとゴルフの抜け穴が適用されます。 プログラムは(理論的には)永久に実行可能でなければなりません。

15
私の後に繰り返して!
引数として文字列を指定すると、重複しない最長の重複部分文字列の長さ、またはそのような文字列がない場合はゼロを出力します。 入力文字列が空ではないと仮定できます。 例 abcdefabc:部分文字列abcは位置1と7で繰り返されるため、プログラムは3を出力する必要があります abcabcabcabcab:abcabcまたはbcabcaまたはcabcab繰り返されるため、プログラムは6を出力します。(サブストリングabcabcabcabも繰り返されますが、オカレンスは重複するため、受け入れません)。 aaaaaaa:aaaたとえば、位置1と4で繰り返されるため、プログラムは3を出力します。 abcda:aが繰り返されるため、プログラムは1を出力します。 xyz:繰り返し文字列なし→ 0 ababcabcabcabcab:6を返す必要があります これはcode-golfなので、バイト数が最も少なくなります。
23 code-golf  string  code-golf  code-golf  kolmogorov-complexity  primes  code-golf  kolmogorov-complexity  hexadecimal  code-golf  code-golf  string  code-golf  string  random  code-golf  array-manipulation  code-golf  ascii-art  kolmogorov-complexity  random  code-golf  array-manipulation  code-golf  stateful  code-golf  hello-world  code-golf  string  code-golf  interpreter  lisp  code-golf  restricted-source  quine  palindrome  code-golf  ascii-art  random  generation  challenge-writing  ascii-art  random  polyglot  maze  answer-chaining  string  cops-and-robbers  whitespace  code-golf  string  cops-and-robbers  whitespace  code-golf  number  sequence  code-golf  date  code-golf  ascii-art  decision-problem  code-golf  combinatorics  chemistry  code-golf  kolmogorov-complexity  source-layout  radiation-hardening  code-golf  ascii-art  path-finding  maze  code-golf  string  ascii-art  game  animation  code-golf  string  ascii-art  code-golf  ascii-art  kolmogorov-complexity  code-golf  restricted-source  new-years 

16
数値成長ブレードをゴルフ
編組の説明 このブレードでは、ストランドが別のストランドの上部を横切ると、他のストランドの値がそれ自体に追加され、他のすべてのストランド値が通過します。編組には3つのストランドがあり、各ストランドは1から始まります。最初のクロスオーバーは、中央のストランドを横切る最も左のストランドです。次のクロスオーバーは、新しい中央のストランド(以前は左端のストランド)を横切る右端のストランドです。クロスオーバーのこれら2つのステップが繰り返されます。つまり、最初のクロスオーバーはで[a, b, c] -> [b, a+b, c]あり、2番目のクロスオーバーはです[a, b, c] -> [a, b+c, b]。ここでこれらのルールを使用すると、組み紐の最初の6つのレベルになります。 1,1,1 1,2,1 1,3,2 3,4,2 3,6,4 6,9,4 あなたのタスク 編組レベルとして整数を受け入れ、編組のそのレベルの3つの値を出力するゴルフプログラムまたは関数を作成します。レベルがゼロベースか1ベースかを示す必要があります。入力と出力は任意の適切な形式で入力でき、末尾の空白は許可されます。 テストケース(1ベース) 1 -> 1,1,1 2 -> 1,2,1 5 -> 3,6,4 10 -> 28,41,19

1
むしろ厄介な難問
ノットの構造に基づいてノットの2次元図を描くプログラムを作成します。結び目はまさにそのように聞こえます:縛られたロープのループ。数学では、結び目図は、ロープがそれ自体の上または下を横切って結び目を形成する場所を示します。いくつかのノットダイアグラムの例を以下に示します。 ロープがそれ自体を横切るラインにブレークがあります。 入力:結び目を記述する入力は整数の配列です。ロープがそれ自体をn回横切るノットは、それぞれが範囲[0、n-1]の値を持つn個の整数の配列として表すことができます。この配列をKと呼びましょう。 ノットを記述する配列を取得するには、セグメント0〜n-1のそれぞれに番号を付けます。セグメント0は、セグメント1につながり、セグメント2につながり、セグメント3につながり、セグメントn-1がループバックしてセグメント0につながるまで続きます。ロープの別のセグメントが交差するとセグメントは終了します(図の線の切れ目で表されます)。最も単純な結び目、トレフォイル結び目を取りましょう。セグメントに番号を付けた後、セグメント0はセグメント2が交差すると終了します。セグメント1は、セグメント0が交差すると終了します。セグメント1は、セグメント1が横切ると終了します。したがって、結び目を記述する配列は[2、0、1]です。一般に、セグメントxは、セグメントx-1 mod nが中断したところから始まり、セグメントK [x]が交差するところで終わります。 次の図は、ラベル付きのセグメントと、結び目を説明する対応する配列を持つ結び目図を示しています。 上の3つの図は真の結び目であり、下の3つの図はそれ自体を横切るが実際には結び付けられていない(ただし対応するコードがまだある)ロープのループです。 あなたの仕事は、上記のように、結び目(または実際には結び目ではないロープのループ)を記述する整数Kの配列(実際には結び付けられていないロープのループ)を受け取る関数を作成することです例。可能な場合は、コードの未バージョンまたは説明を提供し、コードのサンプル出力も提供します。多くの場合、同じノットは複数の異なる方法で表すことができますが、関数の出力が満たすノットダイアグラムの入力が可能な表現の1つである場合、ソリューションは有効です。 これはコードゴルフなので、バイト単位の最短コードが優先されます。ロープを表す線の太さは1ピクセルにすることができますが、アンダークロッシングとオーバークロッシングは明確に区別できる必要があります(ロープの切れ目のサイズは、ロープの太さよりも両側で少なくとも1ピクセル大きくする必要があります) 。 組み込みの結び目理論の機能に依存する回答に賛成しますが、最終的に選択されるものは、組み込みの結び目理論の機能に依存することはできません。 私の表記法について知っていることすべて:結び目や結び目に対応していないように見える値のシーケンスがあると信じています。たとえば、シーケンス[2、3、4、0、1]は描画できないようです。 それとは別に、交差点を取得し、その交差点から始めて、ロープの経路を一方向にたどり、出会うすべてのラベルのない交差点に連続して大きな整数値をラベル付けするとします。交番の場合、表記法をこのようなラベルに変換する簡単なアルゴリズムがあり、交番の場合、このラベルをガウスコードに変換するのは簡単です。 template<size_t n> array<int, 2*n> LabelAlternatingKnot(array<int, n> end_at) { array<int, n> end_of; for(int i=0;i<n;++i) end_of[end_at[i]] = i; array<int, 2*n> p; for(int& i : p) i = -1; int unique = 0; for(int i=0;i<n;i++) { if(p[2*i] < …

2
このサイトでは、熱力学の法則に従います!
そして特に第2の法則:孤立システムのエントロピーは時間とともに増加します。 この挑戦のために、 「分離されたシステム」は、プログラムまたは機能(以降、「プログラム」と略す)と見なされます。 「time」の経過は、プログラムの出力の繰り返し実行に対応し、新しいプログラムと見なされます。 「エントロピー」は、シャノンの1次エントロピー(以下で定義)として解釈されます。これは、文字列の文字の多様性の尺度です。 チャレンジ プログラムは、同じ言語のプログラムとして実行されたときに、前のものよりもエントロピーの多い文字列を生成する空でない文字列を生成する必要があります。この出力実行プロセスを無限に繰り返すと、エントロピー値の厳密に増加するシーケンスが生成される必要があります。 文字列には、Unicode 9.0文字を含めることができます。文字列のシーケンスは(ランダムではなく)確定的でなければなりません。 特定の文字列のエントロピーは、次のように定義されます。一意の文字と文字列内の出現回数を特定します。i番目の一意の文字の頻度p iは、その文字の出現回数を文字列の長さで割ったものです。エントロピーは ここで、合計は文字列のすべての一意の文字に対するものです。技術的には、これは、文字列で観測される周波数によって与えられる分布を持つ離散確率変数のエントロピーに対応します。 LET H K示すにより作成された文字列のエントロピーのk番目のプログラム、およびlet H 0意味を初期プログラムのソースコードのエントロピーを。また、L 0で初期プログラムの長さを文字で示します。シーケンス{ H k }は、チャレンジ要件に従って単調であり、制限されています(既存の文字の数が有限であるため)。したがって、H H∞という制限があります。 スコア提出は(なりH ∞ - H 0 /)L 0: 分子、H ∞ - H 0は、無限時間のスパンでエントロピーを増やすどの程度あなたのコード「従う」の法律に反映されます。 denonimator、L 0は、文字単位の(バイト単位ではない)初期コードの長さです。 最高スコアのコードが勝ちます。関係は、最も早い提出/編集を支持して解決されます。 文字列のエントロピーを計算するには、この投稿の最後でJavaScriptスニペット(@flawrの提供および@Dennisと@ETHproductionsによる修正)を使用できます。 制限を取得する場合はH ∞があなたの特定のケースでは困難であり、あなたは、任意の下限を使用することができ、言うH 20((あなたが使用してスコアを計算するために、H 20 - H 0)/ L 0)。ただし、いずれにしても、エントロピーの無限シーケンスは厳密に増加している必要があります。 明らかでない場合は、エントロピーのシーケンスが増加しているという説明または簡単な証拠を含めてください。 例 架空の言語では、コードを検討しaabcab、実行には、文字列生成、cdefgh実行が発生し、cdefghi... …

5
QFPチップを生成してください!
QFPチップを生成してください! サンドボックスから! QFPは、ピンがチップの側面から出る電気部品のフォームファクターの一種です。一般的なQFPコンポーネントの写真を次に示します。 一般的な式では、ピンの数が同じ4辺になることがわかります。 あなたの課題は、整数を取り込んで、片側のピンの数を表すプログラムを作成し、番号付きのピンを持つASCII QFPコンポーネントを作成することです。 入力: 片側のピンの数を表す単一の整数 出力: 適切なピン配列を備えたASCII QFPチップ。 例: 入力:1 4 ┌┴┐ 1┤├3 └┬┘ 2 入力:2 87 ┌┴┴┐ 1┤├6 2┤├5 └┬┬┘ 34 入力:12 444444444333 876543210987 ┌┴┴┴┴┴┴┴┴┴┴┴┴┐ 1┤├36 2┤├35 3┤├34 4┤├33 5┤├32 6┤├31 7┤├30 8┤├29 9┤├28 10┤├27 11┤├26 12┤├25 └┬┬┬┬┬┬┬┬┬┬┬┬┘ 111111122222 345678901234 ルール: すべてのQFPチップは、asciiが提供するのと同様に、密閉して密封する必要があります。間隔は最も重要です。マイクロプロセッサ内のほこりは悪いものです! ピンの番号付けは例のように行う必要があります(左から右、上から下に読み、反時計回りに番号を付けます) 0から番号付けを開始できますが、これはチップに影響を与えてはなりません(12の入力には各辺に12ピンが必要です) 出力で有効な文字は1,2,3,4,5,6,7,8,9,0,┌,┴,┐,├,┘,┬,└,┤、スペース、改行のみです。 言語のすべてのエンコーディングが許可されていますが、出力は上記の規則と一致している必要があります。 …

26
素数ビット数の素数
仕事 最大と与えられたゼロ以外の正の整数を含むすべての非負整数を探すnは、プライムされているとのカウント1'sと0's(何の先行ゼロを持たない)彼らのバイナリ表現ではあまりにプライムあります。 以下に、このような素数の最初の5つを示します。 17, 19, 37, 41, 79 10001, 10011, 100101, 101001, 1001111 明確化と規則 デフォルトのI / Oメソッドが受け入れられます。 答えはプログラムまたは関数です。 そのような素数がない場合は、ごみを出力するか、何も出力しません。 標準的な抜け穴は禁止されています。 2 3 5 7は、バイナリ表現では0'sおよびの出現回数が1's素数ではないため、リストに追加しませんでした。7バイナリ表現が111であると考えてください。ここで0はゼロ回発生し、ゼロは素数ではありません。 組み込みが許可されています。 バイト単位の最短コードが勝ちです! テストケース 10 [] 100 [17、19、37、41、79] 150 [17、19、37、41、79、103、107、109、131、137] コードスニペットを表示 /* Configuration */ var QUESTION_ID = 107050; // Obtain this from the url // It will …

7
極座標グラフチャート上を移動する2点間の距離
問題の簡単な説明 原点から発せられる光線と原点を中心とする円のみを移動する2点間の最小距離を見つけるプログラムを作成します。 前提の説明 今、私たちが飛行機に乗っていると想像してみましょう。この飛行機では、特別な方法でのみ旅行が許可されています。原点から発せられる光線で移動できます。 また、円を中心とした任意の円を旅することができます 今、私たちの目標は、この飛行機のある地点から別の地点に移動することです。ただし、単純なユークリッドパスを移動することはできません。ポイントがたまたま中心から放射される光線に当たる場合にのみ、これを行うことができます。 これは私たちの光線の1つに当たるので、この上を移動できます。 原点を中心とする円上を移動することもできます。 例 これが課題です。 最短経路である地点から別の地点に到達する必要があります。多くの場合、これは円と光線の移動の組み合わせです。 ただし、これは2つの光線で移動することもできます。 最小距離を移動する2つのパスが存在する場合があります。 問題 あなたの課題は、これらのルールに従えば、2つのポイントが与えられたときにそれらの間の最小距離を与えるプログラムを書くことです。入力は、長方形または極形式のいずれかで指定でき、出力は1つの数値、つまり距離である必要があります。 テストケース (矩形入力の場合) (1,1) (1,-1) -> ~ 2.22144 (0,0) (1, 1) -> ~ 1.41421 (1,0) (-0.4161 , 0.90929) -> ~ 2 (1,1) (1, 0) -> ~ 1.19961 (1,2) (3, 4) -> ~ 3.16609

14
溶けるつららを描く方法
彫刻家は、グリーンランドの新しい博物館のつらら彫刻を作成する役割を担っています。彼は2つの数字で構成される上司から仕様を与えられました:[s、m]またはsize and melt。サイズは奇数でなければなりません。彼は本物のつららの写真をいくつか与えられた: vvvvv [5, 0] vvv v vvvvvvv [7, 0] vvvvv vvv v vvvvvvv [7, 2] vvvvv vvvvvvv [7, 3] vvv [3, 1] 彼は絵を描くのに役立つプログラムが必要です。許可された言語。プログラムは、受け入れ可能な入力方法であるSとMを取り込む必要があります。次に、そのアスキーアート表現を印刷する必要があります。 Sはv、最初の層にあるsの数です。Mは、下から切り取られるレイヤーの数です。 これはcode-golfであるため、通常、この競合はバイトベースです。空白は、バイトカウントのためにカウントされます。最小バイトが勝ちます。 編集: [5、3]のように、何も描画しない数字のセットを取得することはありません。ただし、コードを確認する必要はありません。

8
最小数の連続する単調サブシーケンス
チャレンジの説明 単調なサブシーケンスは数字の列である[a1, a2, ..., an]ように a1 <= a2 <= ... <= anまたはa1 >= a2 >= ... >= an。[1, 3, 3, 7, 9, 13, 13, 100]は、単調な(減少しない)サブシーケンスであると同時に[9, 4, 4, 3, 0, -10, -12](これは増加しない)サブシーケンス[1, 3, 6, 9, 8]ですが、そうではありません。整数のリスト(任意の妥当な形式)が与えられNたら、これらの整数のシーケンスがN単調シーケンスに分割できるように、最小数を出力します。 例 [1, 3, 7, 5, 4, 2] -> [[1, 3, 7], [5, 4, 2]] -> …

16
不規則な配列をシャッフルする
不規則配列は、各要素が正数の未知数の配列である配列です。 たとえば、次は不規則配列です。 [[1,2,3],[4],[9,10]] Shape: 3,1,2 [[1],[2],[3]] Shape: 1,1,1 [[1,2,3,4,5,6,8]] Shape: 7 以下は不規則配列ではありません。 [1] Each element will be an array [] The array will contain at least 1 element [[1,2,3],[]] Each subarray will contain at least 1 integer 不規則配列を入力し、整数をシャッフルした不規則配列を返す必要があります 出力配列は、入力配列と同じ形状でなければなりません。配列の形状を各サブ配列の長さとして定義します。 各整数には、可能性のある各場所に現れる可能性が等しくなければなりません。 あなたの言語の組み込みランダムはランダムであると仮定できます。 私が渡された場合たとえば、: [[4],[1,2,3],[4]]、その後、[[1],[4,4,2],[3]]有効な出力されますが、考え[[4,1,3],[3],[4]]たり[[4],[4],[1,2,3]]しません。

9
かぼちゃの旅の問題
バックグラウンド: ジャックはカボチャで、ハロウィーンのたびにカボチャ畑の近くの村の住民を怖がらせます。しかし、毎年、誰かが彼の中のろうそくに火をつけた後、彼はろうそくが燃え尽きる前に皆を怖がらせるために限られた時間を持ちます。過去数年間、彼は彼の貧弱な意思決定のために村を少しだけしか話せませんでしたが、彼があなたを助けてくれるようになったので、彼はできるだけ多くの村を話せるようになります! 仕事: 村の場所のリストとろうそくの寿命を考慮して、ジャックが訪問できる村の最大数を出力します。パス自体を印刷する必要はありません。 入力: ろうそくの寿命とデカルト座標系の村の場所のリスト。Jackが発信するパンプキンパッチは常に0,0になります。とにかく入力をフォーマットできます。ジャックの動きを単純化するために、彼は水平、垂直、または斜めにしか移動できません。つまり、キャンドルは動きごとに1または1.5(斜めに少し長くなります)のライフユニットを失います。寿命が0以下の場合、キャンドルは燃え尽きます。 出力: ろうそくが燃える前にジャックが訪れることができる村の最大数に等しい整数。 ルール: これはcode-golfなので、バイト単位の最短コードが優先されます。標準の抜け穴は許可されていません。 テストケース: // Format [lifespan] [list of village coordinates] -> [maximum visit-able villages] 4 -1,0 1,0 2,0 3,0 4,0 5,0 -> 3 4 1,1 2,2 3,3 -> 2 5 1,1 2,1 3,1 4,1 5,0 5,1 -> 4

14
スーパーパリンドロームを見つけてください!
99999999の数字を考えてみましょう。その数字は明らかに回文です。99999999の最大素因数は137です。99999999を137で除算すると、729927になります。この数値も回文です。 729927の最大の素因数は101です。729927/ 101 = 7227は再び回文です。 7227の最大の素因数は73です。7227/ 73 = 99は再び回文です。 さらに最大の素因数で割ると、9、3、最後に1が得られます。これは1桁の数字であり、回文でもあります。1には素因数がないため、手順はここで終了します。 ここでこの観察結果を一般化して、スーパーパリンドロームを1であるパリンドローム、または最大素数因子で割ると別のスーパーパリンドロームを与えるパリンドロームと定義します。 クレジット:https : //math.stackexchange.com/questions/200835/are-there-infinitely-many-super-palindromes 数Nが与えられた場合、スーパー回文であるかどうかを判断し、それに応じて真偽値を出力します。 あなたのプログラムはこれらの入力に対して真実の値を出力するはずです: 1 101 121 282 313 353 373 393 474 737 919 959 1331 1441 2882 6446 7887 8668 9559 9779 プログラムは、これらの入力に対して偽の値を出力する必要があります。 323 432 555 583 585 646 642 696 777 969 989 2112 3553 …

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.