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

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

14
配列は始まります
あなたの仕事は、数値の配列と実数を取り、配列のその点の値を返すことです。配列はから始まり、間隔でカウントされます。実際のところ、「インデックス」が指定された要素間を実際に補間します。例として:ππ\piππ\pi Index: 1π 2π 3π 4π 5π 6π Array: [ 1.1, 1.3, 6.9, 4.2, 1.3, 3.7 ] それだから、我々は次の式を用いてコサイン補間を使用することがありますので、必須の三角法を実行する必要があります。ππ\pi cos(私モッドπ)+ 12∗ (α − β)+ βcos⁡(私モッドπ)+12∗(α−β)+β{\cos(i \mod \pi) + 1 \over 2} * (\alpha - \beta) + \beta どこ: 私私iは入力「インデックス」です αα\alphaは「インデックス」の直前の要素の値です ββ\betaは「インデックス」の直後の要素の値です coscos\cosはラジアンで角度をとります 例 [1.3、3.7、6.9]、5.3の場合: インデックス5.3は1π1π1\piと2個のπ2π2\piにあるため、1.3はに使用されbefore、3.7はに使用されafterます。それを公式に入れると、次のようになります。 cos(5.3モッドπ)+ 12∗ (1.3 − 3.7 )+ …
10 code-golf  array 

4
エキスパートのようにNimボードを視覚化する
バックグラウンド でニムのゲーム、プレイヤーは「山」から「石」を削除交互:各ターンに、プレイヤーから1とすべての石の間で削除する必要があり、単一の杭。Nimの目的は、最後の石を取るか、または惨めなバリエーションでは、対戦相手に強制することです-ただし、戦略はほぼ同じであることがわかります。 ニムは楽しいバーゲームを作ります。「石」にはマッチ棒やコインを使うことができ、「山」は通常一列に並べられます。以下は、パイルが1、3、5、および7のクラシックなセットアップです。 Nimをプレイしたことがない場合は、このチャレンジに挑戦する前に、Ni​​mを試してみてください。これは、"Pearls Before Swine"と呼ばれるバージョンです。 戦略 Nimの最適な戦略は十分にトリッキーであり、ほとんどの素人は常に専門家に負けますが、バイナリ演算で簡単に説明できます。 ただし、メンタルバイナリXOR演算を実行するのは難しいので、幸運なことに、酔っているときでもリアルタイムで実装しやすい正しい戦略を視覚化する同等の方法があります。 手順は3つだけです。 各行の「ストーン」を2の累乗のサイズのサブグループに精神的にグループ化します。可能な最大のサイズから始めます。ほとんどのゲームでは8、4、2、1で十分です。 各グループを別の行のツインと一致させて、すべてのグループがペアになるようにします。 これが不可能な場合は、ペアになっていない "石"を1行から削除します(これは常に可能です-理由はWikipediaのリンクを参照してください)。これにより、手順2.が可能になります。 または、別の言い方をすると、「1つの山からいくつかの石を削除して、山を2の累乗にグループ化すると、すべてのグループが別の山のグループとペアになる場合があります。」2の大きな累乗を小さな累乗に分割できないことに注意してください。たとえば、8石のラインを4の2つのグループにグループ化することはできません。 たとえば、上記のボードを視覚化する方法は次のとおりです。 このボードは完全にバランスが取れているので、相手を先に動かしたいでしょう。 チャレンジ Nimの「パイル」のサイズを表す正の整数のリストを指定すると、専門家が見たNimボードのプレーンテキストの視覚化を返します。 有効な視覚化を構成するものは、例によって最もよく説明されますが、次のことを行う必要があります。 各「2の累乗サブグループ」とそのペアに個別の文字を割り当て(ペアになっていないサブグループは対象外)、その文字を使用してサブグループとペアの両方の「石」を表します。 ハイフンを使用して、ペアになっていない「ストーン」(つまり、エキスパートが通常のプレー時に削除するもの-不快ではない-Nim)を表します-。 有効な視覚化を実現する方法は複数あり、すべて有効です。いくつかのテストケースを見てみましょう。 テストケース 入力:1、3、5、7 可能な出力1: A BBA CCCCD CCCCBBD オプションで、文字の間にスペースを入れたり、行の間に空白行を入れたりできます。 可能な出力2: A B B A C C C C D C C C C B B D 入力:1、2、3、4、5、6、7、8、9、10 文字の順序と選択は好きなようにすることができます: …

5
注文の数
異なる言語で実行したときに、各言語でコードの異なるバイト順列を出力するプログラムを作成します。正確なソースコードは1つの順列としてカウントされます。 ここで「異なる言語」は、異なるバージョン(Py 2とPy 3)または異なる標準フラグにすることができます。異なるバージョンを強制するのは異なる出力です。 各言語のプログラムには、適切なクインルールが適用されます。スコアはとして計算され(Language count)^6/(Code length in bytes)、スコアが高いほど優れています。 サンプル: コードがでAABあり、3つの異なる言語で実行されている場合ABA、AABとが返されます。AABスコアは2^6/3(2つのAABカウントのうちの1つのみ)です。ABA意味がなくても大丈夫です。

15
複素数のべきを計算する
ランダウン 入力xおよびyを指定して、複雑な操作を実行し、対応する結果を出力します。 プログラムのしくみ z = x + yiという形式の入力xとyが与えられると、z i-zを見つけます z i-zの絶対実数値が絶対虚部より大きい場合、実部を出力します。逆も同様です。両方の値が等しい場合は、値の1つを出力します。 例 x: 2 y: 0 したがって: z = 2 z^(i-z) ~= 0.192309 + 0.159740i 実数部は虚数部よりも絶対値​​が大きいため、プログラムは 0.192309 その他の例 z = 1+i >> 0.5 z = i >> 1 z = 0.5 >> 1.08787 z = -2+8i >> 2.22964E7 z = …

7
Anagram Quines(強盗のスレッド)
これは警官と強盗の挑戦です。警官のスレッドはここにあります 強盗としてのあなたの課題は、警官のスレッドから出力を取得し、プログラムとして実行したときに提供された元の出力を出力するアナグラムを見つけることです。 勝者は、この質問で最も有効なクラックを持つ人になります。 ルール 提供されたプログラムで安全とマークされた回答を解読することはできません。 警官が意図した解決策がある言語を提供する場合、その特定の言語でそれを解読する必要があります。彼らが選択しない場合、競合する言語で解読する可能性があります。 クインの標準ルールが適用されます。 クラックは完璧なクインであってはなりません。つまり、正確なソースを出力するのではなく、その順序を変更する必要があります(順序は警官によって提供されます)。

8
最長期間の反復クイン
ご存知のように、クインは独自のソースコードを出力するプログラムです。ただし、別の別のプログラムを出力して、最初のプログラムを再度出力するプログラムを作成することもできます。たとえば、Python 2プログラム x = '''x = {} print 'print '+'"'*3+x.format("'"*3+x+"'"*3)+'"'*3''' print 'print '+'"'*3+x.format("'"*3+x+"'"*3)+'"'*3 実行すると、次のテキストが出力されます。 print """x = '''x = {} print 'print '+'"'*3+x.format("'"*3+x+"'"*3)+'"'*3''' print 'print '+'"'*3+x.format("'"*3+x+"'"*3)+'"'*3""" Pythonプログラムとして実行すると、元のコードが再び出力されます。これは反復クインと呼ばれます。元のコードに戻すには2回実行する必要があるため、ピリオド2を持っていると言います。しかし、もちろん、もっと長い期間も可能です。 あなたの課題は、可能な限り長い期間の反復クインを、選択した言語で100バイト以下で記述することです。(上記の私の例は、末尾の改行を含めて119バイトであるため、この仕様には適合しません。) 次の規則と説明に注意してください。 通常のquine規則が適用されます。つまり、プログラムは独自のソースコードに直接アクセスできる言語機能を使用できません。 反復された出力は、最終的に元のコードに正確にループバックする必要があり、デモンストレーションまたはそれができることの証明を含める必要があります。 また、サイクルがそうである限り、そのサイクルが長い理由の説明も含める必要があります。これは数学的な証明のレベルである必要はありませんが、あなたの言語に精通している誰かに説得力があるはずです。(この規則はここにあります。非常に大きな数の回答が含まれると予想されるためです。) 少なくともそれが長いことを証明できる限り、正確な数を与えるのではなく、「少なくとも1,000,000回の反復」のようなことを言っても問題ありません。この場合、スコアは1,000,000になります。そうでなければ、あなたのスコアはあなたのクインの期間です。 100バイトの制限は初期プログラムにのみ適用されます-それが出力するプログラムは長くなる可能性がありますが、元のコードを出力するには、最終的に100バイトに戻す必要があります。 マシンに無限のRAMと無限のランタイムがあると想定できますが、言語に無制限の精度のデータ型(整数など)がない場合は想定できません。あなたはできるあなたのパーサが処理できる入力の長さに制限はありませんと仮定します。 最も高いスコアが勝ちます。 注意:Quit Whiningと呼ばれる既存の課題があります。クインを繰り返すことには、クインの反復も含まれます。ただし、同じコンセプトに基づいていることを除けば、これらはまったく異なるタイプの課題です。もう1つはまっすぐなコードゴルフですが、これは(意図的に!)偽装で忙しいビーバーの問題です。この質問への適切な回答を生成するために必要な手法は、他の質問への回答に必要なものとは非常に異なる可能性が高く、これは仕様によるものです。

6
クインを転置する
このquineバリアントでは、プログラムは、左上から右下に対角線を横切って転置されたソースコードを出力する必要があります。例えば: あなたのプログラム オン 4行 出力 yof ono u u r r p l r i o n g e r s a m 出力の空白は任意ではありません。スペースは2つの状況で表示されます。元のスペース(4列目の間rなどl)と、文字を埋め込む必要がある場合(1列目のすべてのスペースなど)の両方が必要で、スペースはどこにも表示できません。その他の出力。 出力の単一の末尾の改行はオプションで無視できます。ソースコードの末尾の改行は出力に影響を与えません。ソースコードの先頭の改行は、上記の例のように処理する必要があります。改行ではないすべての文字は、幅が1列、高さが1行であると想定します。 ソリューションには、少なくとも2つの改行以外の文字がそれぞれ2行ある必要があり、独自の転置であってはなりません(出力をソースと同一にすることはできません)。 quines浮気 URLから自分のソースコードを含むファイルから読み込まれ、プルデータを、利用ビルトインをquining、というように許可されていません。 これはコードゴルフです。バイト単位の最短コードが優先されます。
10 code-golf  quine 

17
2つのリストの共通部分を設定する
目標は、整数の2つのリストの積集合を計算することです。共通部分は、両方の入力リストで少なくとも1回見つかった整数の順序付けされていない一意のグループとして定義されます。 入力 入力は任意の形式(関数パラメーター、stdioなど)にすることができ、整数の2つのリストで構成されます。多くの場合、負でない数の整数が含まれている(つまり、並べ替えられていない、重複が含まれている、長さが異なる、空であるなど)以外は、各リストについて何も想定していません。各整数は、言語のネイティブな符号付き整数型に適合し、1桁以上の10進数であり、符号付きであると想定されています。 入力例: 1 4 3 9 8 8 3 7 0 10 1 4 4 8 -1 出力 出力は、2つのリストの共通部分を任意のフォーマット(戻り値、stdioなど)に設定した整数のリストのようなものです。出力をソートする必要はありませんが、常にソートされる実装を提供することはできます。出力は、順序付けされていない有効なセットを形成する必要があります(たとえば、重複する値が含まれていてはなりません)。 テストケースの例(出力の順序は重要ではないことに注意してください): 最初の2行は入力リスト、3行目は出力です。(empty)空のリストを示します。 (empty) (empty) (empty) 1000 (empty) (empty) 3 1 2 4 3 1 1 1 1 3 3 1 -1 0 8 3 3 1 1 3 1 …

1
AESのブロックの復号化
今日の目標は、AESを使用して秘密のメッセージを解読することです。暗号文とキーを指定すると、メッセージを復号化して印刷します。 プログラムはどの言語でもかまいません。stdinの入力で実行され、stdoutの出力が正しいかどうかがチェックされます。 stdinの入力の最初の行は、16バイトでエンコードされた16バイトのキーになります。stdinの入力の2行目は、16バイトでエンコードされた16バイトの暗号文です。 プログラムの出力は、指定された鍵でAES-128を使用して暗号文を復号化した後の16バイトメッセージでなければなりません。ASCIIオクテットとして解釈された結果を出力する必要があります。解読後の結果はすべて有効なASCIIであると想定できます。 AESを実装するライブラリ/組み込み機能を使用することはできません。このような機能を使用して、hex / binary / ASCIIエンコーディング間で変換できます。 バイト単位の最短コードが優先されます。 入力と出力の例: bd8ab53f10b3d38576a1b9a15cf03834 02c0ee126cae50ba938a8b16f0e04d23 明日攻撃する。 そしてもう一つ: f4af804ad097ba832906db0deb7569e3 38794338dafcb09d6b32b04357f64d4d おめでとう。

5
アラクの最短のゲームを書く
Alakは数学者AK Dewdneyによって発明され、1984年の本Planiverseに記載されています。アラクのルールは簡単です: Alakは、11スロットの1次元ボードでプレイする2人用のゲームです。各スロットは一度に最大で1つの部品を保持できます。「x」と「o」の2種類のピースがあります。xは1つのプレーヤーに属し、oはもう1つのプレーヤーに属します。ボードの初期構成は次のとおりです。 xxxx___oooo プレイヤーは順番に移動します。各ターンで、各プレイヤーは一度に1つの駒のみを移動できます。プレーヤーは自分のターンに追い越すことはできません。プレーヤーは自分の駒のいずれか1つを次の空いているスロットの右または左に移動できます。これには、空いているスロットを飛び越える必要がある場合があります。プレーヤーは、駒をボードの側面から移動することはできません。 移動によって、対戦相手の駒が両側に2つの駒の可動子の色で囲まれているパターンが作成された場合(空いている空白のスロットが介在しない)、それらの囲まれた駒はボードから削除されます。 ゲームの目的は、対戦相手の駒をすべて取り除くことです。この時点でゲームは終了します。all-but-oneを削除すると、ゲームも終了します。これは、対戦相手が1つの駒であなたを囲むことができないため、とにかく数回の移動で常に負けるからです。 私はこのゲームをオンラインで見つけ、疑問に思っていました:ゴルフはできますか? ゴルフのルール コードは、ゲーム内のすべてのルール、キャプチャの処理、適切な移動などに従う必要があります(ボットを追加する必要はありませんが、両方のプレイヤーを何らかの方法で制御し、一方のプレイヤーを人間にする必要があります)。 入力は、タイルXのタイルをYに移動するか、終了する必要があります。たとえば、1 4「この作品をタイル1からタイル4に移動」と言うことができます。- をquit使用しても、プログラムは終了します。また、移動が無効であるかどうかを確認する必要があります(ボードの外に出るか、空いているスペースを横切ってタイルのペアでないメッセージを送信または送信する必要がある場所に移動するか、)。ControlCquit 優勝選手と無効なため出力がでなければならないP1 WINS、P2 WINSとINVALIDそれぞれ。(これらはすべて7文字です。) 出力はボードを示す必要があります。それだけで十分です。 番号付きのタイルやその他のピースなどの補助具を使用するかどうかは関係ありません。 チャレンジは次の場合に終了します。 1つの回答で50票を獲得 3週間、1つの回答が上位投票されたままになり、その期間に他の回答は投稿されませんでした チャレンジには少なくとも3つの答えがあります(そのため、実際の競争があります)。 ゲームのルール 左側のプレーヤーが最初にスタートする必要があります。 一度に正方形を占めるのは1個だけです。それが空いているスペースにぶつかるまで、ピースを左または右に移動します。ボードは折り返されず、占有されていない領域を移動することはできません。例えば: xoo__o。ここで、x移動権はボードをに変更し_oox_oます。 xxooo_。ここで、左端xはyield _xoooxに移動し、os をキャプチャしてを残し_x___xます。 x__oox。ここでは、osはキャプチャされていません(まだギャップがあります)。空いているスペースを移動できないため、キャプチャはできません。x間には他の部分(残しがないので、左側のは、1つのスペースを移動することができます_x_oox)。 グループが対戦相手の駒に囲まれている場合、複数の隣接する駒を一度にキャプチャできます。例えばx_ooxには_xoox、両方のキャプチャしますo秒とにつながります_x__x。 移動後の場合は、最初に相手の駒をキャプチャしてから、自分の駒を削除する必要があるかどうかを確認します。2つの例を見てみましょう。 o_oxxにoxox_。1つ目oは2つ目がキャプチャされるox_x_ため、1 つ目はxボードに残ります。 o_ooxにoxoo_。今回は、osはキャプチャされないため、x代わりにがキャプチャされます。 ピースが1つしかない場合は、1つではキャプチャできないため、ゲームは終了します。 ゲームを始めよう!あなたが思いつくものを見るのを楽しみにしています。

6
メニューのキーボードショートカットを生成する
メニューのショートカット 従来、ユーザーメニューには、などのキーボードショートカットを使用してアクセスしAlt + (a letter)たり、すべてのテキストボックスがフォーカスされていない場合(Gmailスタイル)に文字を入力するだけでアクセスしたりできます。 あなたのタスク 入力としてメニューエントリが与えられた場合、タスクは各メニューエントリに適切なショートカット文字を付与することです。 一連の単語-メニューエントリ(文字列の配列または同等の言語として)を受け入れ、辞書またはハッシュマップを1文字からメニューエントリに返す関数またはプログラムを記述します。 パラメータを使用して値を返すか、STDINを使用して結果をSTDOUTに出力できます。グローバル/スコープ変数がすでに入力されていると想定することはできません。 適切な文字を決定するアルゴリズム 基本的にそれは単語の最初の利用可能な文字です。以下の仮定と例を参照してください。 すべてのエントリの文字が利用できない場合、ショートカットはになります(a letter) + (a number)。エントリからどの文字を選ぶかは任意です。番号は0から始まり、1ずつ増加する必要があります-すべてのショートカットが一意になるようにします。以下の3番目の例を参照してください。 仮定 入力はセットになります。つまり、繰り返しはなく、すべてのエントリは一意です。 入力の長さは、負でない整数(言語のMAX_INTまで)にすることができます。 大文字と小文字の区別:入力では大文字と小文字が区別されます(ただし、大文字と小文字を区別しない場合は一意のままです)。結果には、元のエントリと元の大文字小文字が含まれているはずです。ただし、出力ショートカット文字は大文字と小文字を区別しません。 すべての入力単語が数字で終わるわけではありません。 「邪悪な入力」はテストされません。「邪悪な入力」とは、特定の文字のカウンターを10回以上インクリメントする必要があるようなものです。 例 以下の例はJSONですが、配列と辞書に相当する言語を使用できます。または、STD I / Oを使用している場合は、入力と出力に読み取り可能な形式(csv、さらにはスペースなど)を使用できます。区切り値)。 1。 Input: ['File', 'Edit', 'View', 'Help'] Output: {f:'File', e:'Edit', v:'View', h:'Help'} 2。 Input: ['Foo', 'Bar', 'FooBar', 'FooBars'] Output: {f:'Foo', b:'Bar', o:'FooBar', a:'FooBars'} 3。 …
10 code-golf  string 

14
2点(x、y)からの線形関数ソルバー
タスク (x、y)の形式で座標の2つのタプル引数を取り、それぞれの線形関数を(a、c)の形式で返す関数L()を記述します。ここで、aはx項とcの係数です。 y切片です。 入力はx軸に垂直な線ではなく、2つの入力は別々の点であると想定できます。 得点 これがコードゴルフです:最短プログラムが勝ちます。 注意:基本的な演算子(+、-、/、*)以外の数学関数は使用しないでください。 例 これが、Pythonでの私の理想的なソリューションです。 def L(Point1, Point2): x = 0 y = 1 Gradient = (float(Point1[y]) - float(Point2[y])) / (float(Point1[x]) - float(Point2[x])) YIntercept = Point1[y] - Gradient * Point1[x] return (Gradient, YIntercept) 出力: >>> L( (0,0) , (1,1) ) (1.0, 0.0) >>> L( (0,0) , …
10 code-golf 

3
イオでのゴルフのコツ
イオでゴルフをするための一般的なヒントはありますか?私はコードゴルフの問題全般に適用でき、少なくともある程度はIoに固有のアイデアを探しています(たとえば、「コメントの削除」は回答ではありません)。回答ごとに1つのヒントを投稿してください。
10 code-golf  tips 

5
自分自身の鏡像を印刷するプログラム
自身の鏡像を生成するプログラムを作成します。例としては、独自のコードを読み取り、2つの小さい2x2バージョンを生成する素晴らしいキャメルコードがあります。入力が与えられた場合: $_='ev al("seek\040D ATA,0, 0;");foreach(1..3) {<DATA>;}my @camel1hump;my$camel; my$Camel ;while( <DATA>){$_=sprintf("%-6 9s",$_);my@dromedary 1=split(//);if(defined($ _=<DATA>)){@camel1hum p=split(//);}while(@dromeda ry1){my$camel1hump=0 ;my$CAMEL=3;if(defined($_=shif t(@dromedary1 ))&&/\S/){$camel1hump+=1<<$CAMEL;} $CAMEL--;if(d efined($_=shift(@dromedary1))&&/\S/){ $camel1hump+=1 <<$CAMEL;}$CAMEL--;if(defined($_=shift( @camel1hump))&&/\S/){$camel1hump+=1<<$CAMEL;}$CAMEL--;if( defined($_=shift(@camel1hump))&&/\S/){$camel1hump+=1<<$CAME L;;}$camel.=(split(//,"\040..m`{/J\047\134}L^7FX"))[$camel1h ump];}$camel.="\n";}@camel1hump=split(/\n/,$camel);foreach(@ camel1hump){chomp;$Camel=$_;y/LJF7\173\175`\047/\061\062\063\ 064\065\066\067\070/;y/12345678/JL7F\175\173\047`/;$_=reverse; print"$_\040$Camel\n";}foreach(@camel1hump){chomp;$Camel=$_;y /LJF7\173\175`\047/12345678/;y/12345678/JL7F\175\173\0 47`/; $_=reverse;print"\040$_$Camel\n";}';;s/\s*//g;;eval; eval ("seek\040DATA,0,0;");undef$/;$_=<DATA>;s/\s*//g;( );;s ;^.*_;;;map{eval"print\"$_\"";}/.{4}/g; __DATA__ \124 \1 50\145\040\165\163\145\040\157\1 46\040\1 41\0 40\143\141 \155\145\1 54\040\1 51\155\ 141 \147\145\0 40\151\156 \040\141 …

7
ランダムCSSカラーコード
JavaScriptでランダムなCSSカラーコードを生成することに関するこのブログ投稿には、JavaScriptでランダムな色を生成するための複数のソリューションがあります。私が見つけることができる最も短いものはこれです: '#'+(Math.random()*0xffffff).toString(16).slice(-6) CSSカラーコードに慣れていない場合は、こちらのドキュメントをご覧ください。 もっと上手くできる?他の言語はどうですか?
10 code-golf  random  css 

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