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

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

3
閉じ込められた騎士のシーケンス
前書き 非常に最近のビデオThe Trapped Knight-Numberphileに触発されて、私は挑戦を思いつきました。 捕捉された騎士配列は 1から始まる長さ2016の有限の整数配列であり、かつ以下の構成規則を有しています。 次の方法で数値スパイラルを記述します。 17 16 15 14 13 ... 18 5 4 3 12 ... 19 6 1 2 11 ... 20 7 8 9 10 ... 21 22 23 24 25 ... 1に騎士を配置します。 チェスのルールに従って、これまでに行ったことのない最小数のグリッドに騎士を移動します(つまり、縦2ユニット、横1ユニット、またはその逆)。 騎士が動けなくなるまで繰り返します。 最初の3つのステップは次のとおりです。 ステップ1 17 [16] 15 [14] 13 [18] 5 4 …
10 code-golf  number 

24
パスワードBishop Goodness
このから派生し、現在は削除されています。 文字列が与えられた場合、それが適切なBishopパスワードを構成する場合は(truthy / falsyまたは2つの一貫した値)に答えます。これは、次のすべての条件が満たされた場合です。 10文字以上 3桁以上([0-9]) それは回文ではありません(逆転してもそれ自体と同じです) コードがBishopの適切なパスワードである場合、0バイトのボーナスを受け取ります。 警告:実際のパスワード強度の尺度としてBishopの良さを使用しないでください! 例 適切なBishopパスワード PPCG123GCPP PPCG123PPCG PPCG123gcpp 0123456789 Tr0ub4dor&3 不正なBishopパスワード PPCG123 (短すぎる) correct horse battery staple (桁が足りない) PPCG121GCPP (パリンドローム) (桁が短すぎて足りない) abc121cba (短すぎて回文) aaaaaaaaaaaa (パリンドロームで足りない) abc99cba (すべてが間違っている)

11
ピコミノの演奏
Pickominoゲームでは、テーブルの中央にいくつかのタイルがあり、それぞれに異なる正の整数が付いています。プレイヤーは毎ターン、特定の方法でさいころを振って、負でない整数であるスコアを取得します。 次に、プレーヤーはスコアがまだ低いか等しい最も高い番号のタイルを取得し、中央からタイルを削除してスタックに追加します。真ん中のすべての数字がプレーヤーのスコアよりも高いためにこれが不可能な場合、プレーヤーはスタックから一番上のタイル(最後に追加されたもの)を失い、中央に戻されます。プレーヤーにタイルが残っていない場合、何も起こりません。 チャレンジ 自分と対戦するプレーヤーをシミュレートします。中央のタイルのリストと、プレーヤーが獲得したスコアのリストが表示されます。すべてのターンが評価された後、プレーヤーのタイルのリストを返します。 チャレンジルール タイルを含むリストが順序付けされていて、整数が2回含まれていないと想定できます。 入力の両方のリストを任意の順序で取得できます 出力はスタック上のタイルの順序を維持する必要がありますが、リストを上から下にソートするか、下から上にソートするかを決定できます。 一般的なルール これはcode-golfなので、バイト単位の最短の回答が優先されます。 コードゴルフ言語では、コードゴルフ言語以外の言語で回答を投稿しないようにしないでください。「あらゆる」プログラミング言語について、可能な限り短い答えを考え出すようにしてください。 デフォルトのI / Oルールを使用した回答には標準ルールが適用されるため、STDIN / STDOUT、関数/メソッドを適切なパラメーターで使用し、戻り値の型の完全なプログラムを使用できます。 デフォルトの抜け穴は禁止されています。 可能であれば、コードのテスト(TIOなど)のリンクを追加してください。 回答の説明を追加することをお勧めします。 例 (6番目のテストケースから取得) Tiles: [21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36] Scores: [22, 22, 22, 23, 21, 24, 0, 22] 最初のスコアは22なので、真ん中の最高のタイル<= 22、つまり22自体を取ります。 Middle: …
10 code-golf  game 

12
Quineは自身をバイナリで出力します
それを受け入れる場合のタスクは、独自のソースコードをバイナリのUTF-8表現で出力するプログラムを記述することです。 ルール ソースは少なくとも1バイトの長さが必要です。 プログラムは入力をとってはなりません(または、未使用の空の入力が必要です)。 出力は任意の便利な形式にすることができます。 オプションの末尾の改行を使用できます。 1バイトは8ビットであり、バイナリUTF-8表現の長さは必然的に8の倍数であることに注意してください。 これはコードゴルフなので、すべての通常のゴルフ規則が適用され、最短のコード(バイト単位)が優先されます。 標準の抜け穴は禁止されています。 例 あなたのソースコードがでありAä$$€h、それに対応するUTF-8バイナリ表現がであるとしましょう010000011100001110100100001001000010010011100010100000101010110001101000。 私が実行Aä$$€hする場合、出力はでなければなりません010000011100001110100100001001000010010011100010100000101010110001101000。 A --> 01000001 ä --> 1100001110100100 $ --> 00100100 $ --> 00100100 € --> 111000101000001010101100 h --> 01101000 Aä$$€h --> 010000011100001110100100001001000010010011100010100000101010110001101000 文字列からバイナリUTF-8へのコンバーター オンラインでお試しください! utf8-convert

20
パラレルアカウント(2日目)
私の大学コードチャレンジコンテストの許可を得てチャレンジ 数か月前に勉強を終えた後、マリーは銀行で口座を開き、町での最初の仕事の支払いを受け取り始めました。それ以来、彼女はいくつかのトランザクションを実行しています。彼女の最初の支払いは1000ドルでした。彼女が両親を招待した夕食に支払ったそのお金で(夕食は$ 150ドルかかりました)、それから彼女は有名なスーパーマーケット($ 80ドル)での購入と休暇($ 200)のホテル予約を行いました。その月の終わりに、彼女は再び支払いを受け取り(1040ドル、前の月より少し多い)、その翌日にスーパーマーケットでさらに70ドルを費やしました。 今日、彼女はスーパーマーケットで最初の80ドルを支払った後に2番目のアカウントが作成され、最初のアカウントが凍結された場合、両方のアカウントの残高はまったく同じになることに気付きました。 1000− 150− 80To t a l = 770− 2001040− 70To t a l = 7701000−150−80⏟Total=770−2001040−70⏟Total=770 \underbrace{1000\quad -150\quad -80}_{Total=770}\quad \underbrace{-200\quad 1040\quad -70}_{Total=770} このイベントは彼女にとって非常に珍しかったので、彼女は自分のアカウントの動きと彼女の友達の動きにもこの機能があるかどうかを確認し続けたいと思っています。 チャレンジ トランザクションのリストを指定して、銀行口座の所有者が2番目の口座を作成して、両方が同じ最終残高になるような瞬間の数を出力します。 例: [1000, -150, -80, -200, 1040, -70] 1 )To t a l = 01000− 150− 80−2001040− 70To t a l …
10 code-golf 

3
任意のランダム性(スピード版)
与えられたinteger nで、セットの合計が以下に等しくなるようにn、範囲1..n^2(両端を含む)でランダムな一意の整数のセットを計算しますn^2 この場合のランダムとは、有効な出力間で一様にランダムであることを意味します。特定の有効な出力ごとnに、生成される可能性が一定でなければなりません。 例えば、n=33分の1のチャンスに出力のそれぞれを持っていなければならない6, 1, 2、3, 5, 1または4, 3, 2。これが設定される、順序は、無関係で4, 3, 2同一であります3, 2, 4 得点 勝者はn60秒未満で最高を計算できるプログラムです。 注:部分的なハードコーディングの可能性を防ぐには、すべてのエントリが4000バイト未満である必要があります テスト中 すべてのコードはローカルのWindows 10マシン(Razer Blade 15、16GB RAM、Intel i7-8750H 6コア、4.1GHz、GPUを悪用したい場合はGTX 1060)で実行されるので、コードを実行するための詳細な手順を提供してください私のマシン。 リクエストに応じて、WSL上のDebianまたはXubuntu仮想マシン(どちらも上記と同じマシン上)でエントリを実行できます。 提出は連続して50回実行され、最終スコアは50件すべての結果の平均になります。

15
マルチレベルのマーケティング「レッグ」投資ルール
マルチレベルのマーケティング関連の課題。 仲間は報われることを望んでいます。そのため、N投資家を惹きつけ(N>=1)、各i番目の投資家が投資しましたx[i]。合計がしきい値を超えるとx[0]+x[1]+...+x[N-1] >= T、ピアに報酬が与えられます。ただし、次の条件が満たされている場合のみ。 投資家の最低額はM、(M<=N)より大きくする必要があります 少なくとも1つの整数kについて、k>=Mとk<=Nで、k投資家は少なくともT/kそれぞれに投資する必要があります。 N, x[], T, Mピアの報酬が生成されるかどうかを決定する必要がある場合(ブール結果、「はい」または「いいえ」)。最短のコードが勝ちます。 例: N=5; M=3; T=10000、ピアの報酬を生成するには、次のいずれかを満たす必要があります。 いずれか3つが少なくとも3334を投資 各4は少なくとも2500を投資 5つすべてがそれぞれ最低2000を投資 N=6; M=2; T=5000: 任意の2つがそれぞれ2500以上を投資 いずれか3つが少なくとも1667を投資 任意の4つが少なくとも1250ずつ投資 いずれか5つが少なくとも1000を投資 6つすべてがそれぞれ少なくとも834投資しました 一般化:すべてのk、場所k>=M、およびk<=N: どんなkのN投資家は、少なくとも投資しT/k、それぞれを テストケース: フォーマット: N, x[], T, M -> correct answer 6, [999, 999, 59, 0, 0, 0], 180, 3 -> 0 6, [0, 60, …

15
マトリックスジグソーパズルのピース
(ランダムにhttps://codegolf.meta.stackexchange.com/a/17272/42963からインスピレーションを得た) 数字の長方形マトリックス(つまり、0 - 9)が与えられた場合、数字の昇順で、数字が1つに接続されているかのように、マトリックスの「ピース」を出力します。ピースは、直角にのみ接続することが保証されています-ピースは斜めに接続しません。最大10個のピース​​しかあり3ません(つまり、ピースは同じマトリックスに2回表示されません)。 たとえば、行列 0 1 1 1 0 0 1 2 3 3 2 2 以下は、断片と出力例です。 0 0 0 1 1 1 1 2 2 2 3 3 ピースの形状を維持するには間隔が重要ですが、ピースは必ずしも内部の間隔を必要としません。ピース自体は一貫した方法で何らかの方法で区別する必要があります(たとえば、ピース間の改行、それぞれが異なる文字であることを確認するなど)。さらに、無関係な空白(たとえば、末尾の改行や先頭の列)は許可されません。たとえば、以下も有効です。 0 00 111 1 2 22 33 または # ## ### # # ## ## しかし、以下はありません(0sの後ろのスペースに注意してください)。 0 0 0 …
10 code-golf  matrix 

15
変装した変圧器(警官の糸)
強盗のスレッドはこちら copsタスクは、それ自体の入力が与えられると有限の確定文字列を出力する関数またはプログラムを記述することです。プログラムに別の入力が与えられると、別の出力が返されます。 ルール: 提出物は、 言語名 フラグが使用されている場合は、それらを明らかにする必要があります。 プログラムのバイト数 出力のバイト数 出力 特に長い場合は、ペーストビンなどを提供してください 印刷できないものが含まれている場合は、16進ダンプを提供してください。 末尾の改行と空白を出力に含める必要があります 入力元(STDIN、コマンドラインなど) 該当する場合、プログラムでそのバイトを使用しない限り、EOFを表すバイトは入力に存在しないと見なすことができます。 プログラムがクラックされている場合は、タイトルの強盗のスレッドに対応する回答へのリンクを追加します。 あなたのプログラムは、1週間が経過してマークを付けるまで安全ではありません。 入力または暗号化ハッシュ関数を使用してランダムにシードするなどの手法は承認しません。私はそれらを止めることはできませんが、これらのいずれかを利用するソリューションを受け入れることはできません。また、これらの手法の一部には衝突があり、別の文字列が同じ出力を生成する場合があることに注意してください。 あなたの目標は、最短の出力を持つことです。この質問を投稿してから3週間以内に投稿された最も短い安全なソリューションが優先されます! 強盗の仕事は、元のサイズ以下のプログラムを見つけることです。これも上記のルールに従います。 強盗が意図したものとは異なるソリューションでプログラムをクラックした場合、強盗のソリューションが正しくないことを証明することにより、プログラムを「クラック解除」する機会があります。これを行うには、同じ出力を生成する強盗のプログラムへの入力を見つけます。 提出例: ブレインファック、10バイト、スコア:10 ]<.[<],>[, このソリューションは、[>、] <[。<]であり、単純に入力を逆にします 幸運を!

1
たたみばりソルバー
バックグラウンド タタミバリはニコリが設計した論理パズルです。 :Tatamibariパズルは、その中のシンボルの三つの異なる種類の長方形のグリッド上で再生され+、-。と|。ソルバーは、次の規則に従ってグリッドを長方形または正方形の領域に分割する必要があります。 すべてのパーティションには、シンボルが1つだけ含まれている必要があります。 +シンボルは、正方形の中に含まれている必要があります。 |シンボルは、幅よりも大きい高さを有する矩形に含まれなければなりません。 -シンボルは、高さよりも大きな幅を有する長方形に含まれなければなりません。 4つのピースが同じコーナーを共有することはありません。(これが通常の畳の置き方です。) 以下は、解決策を含むパズルの例です。 仕事 与えられたタタミバリパズルを解きます。 入出力 入力は、指定されたタタミバリパズルを表す2Dグリッドです。各セルは、4つの文字のいずれかが含まれています+、-、|、、お好みのキャラクターは非手掛かり細胞を表現するために。テストケースでは、アスタリスク*が使用されています。 タタミバリパズルの有効なソリューションを明確に表すことができる適切な出力形式を選択できます。これには以下が含まれますが、これらに限定されません(不明な場合は、コメントで質問してください)。 4タプルのリスト。各タプルには、長方形の上部インデックス、左インデックス、幅と高さ(または同等の表現)が含まれます。 入力と同じ形状の数値グリッド。各数値は長方形を表します 座標セットのリスト。各セットには、長方形内のセルのすべての座標が含まれます パズルに複数のソリューションがある場合、有効なソリューションをいくつでも(1つ以上)出力できます。入力には少なくとも1つのソリューションがあることが保証されています。 テストケース Puzzle: |-* *+| *-* Solution: 122 134 554 ===== Puzzle: +*** **|* *+** ***- Solution: 1122 1122 3322 3344 ====== Puzzle: |*+*+ ***** ****- ***+| +**** Solution: 12233 12233 44444 55667 …

30
回転数
仕事 関数またはプログラムを記述して、特定の半径を与えられた距離を移動するためにホイールが必要とする回転数を見つけます。 ルール 入力は2つの正の有理数にすることができ、任意の便利な形式で取得できます。 両方の入力は同じ単位です。 コードに数字0〜9があってはなりません。 出力は整数になります(floatの場合、無限に丸めます)。 これはコードゴルフなので、最短のコードが勝ちます 例 distance radius output 10 1 2 50 2 4 52.22 4 3 3.4 0.08 7 12.5663 0.9999 3

15
ローゼンクランツとギルデンスタンはコードです
不条理なプレイで、Rosencrantz and Guildenstern is Deadの2人の主人公RosencrantzとGuildenstern(または彼らですか?)個人のアイデンティティ。彼らが自分の名前をシャッフルしたとしても、ばかげたことではないでしょうか? あなたの仕事は、7文字を超える偶数の長さ(設計では4の倍数)の文字列を取り、分割してシャッフルする関数を記述することです。 分割は次のようになります。文字列はformat "abscd"で、sは区切り文字として機能します。最初のセクションとセパレータabsは文字列の前半となり、後半は次のようになりますcd 長さはaになります(string length / 4) - 1 長さはbになります(string length / 4) 長さはsになります1 長さはcになります(string length / 4) + 1 長さはdになります(string length / 4) - 1 これは本当に混乱するかもしれませんので、いくつかの例を紹介します ("a" + "bb" + "s" + "ccc" + "d").length //8 1 2 1 3 1 |-------4--------| |----4-----| <--- …
10 code-golf 

25
テニスをしよう2:東西ゲーム
チャレンジがありましょうプレイテニスでダニエル。彼は南北方向に裁判所を置くことを提案します。私の提案は、東西方向にもテニスをするコートを作ることです。 テニスコートを印刷する必要がありますが、機密上の理由により、可能な限り少ないバイト数で印刷する必要があります。 テニスコート ------x------ | | x | | | |--x--| | | | x | | ------x------ 元のルールは次のとおりです。 余分なスペースはありません。 不公平になるため、タブはありません。 1つのオプションの末尾改行が許可されます。 これはcode-golfなので、バイト単位の最短コードが優先されます!

5
魔術師の魔法書
編集:私は以前D&Dをプレイしたことがないので、最初にこの質問をしたとき、適切に調査していませんでした。このことをお詫び申し上げます。dnd5eのルールにできる限り忠実に回答を無効にする可能性のあるいくつかの編集を行っています。ごめんなさい。 最近のHot Network QuestionのD&Dファンは、魔術師が選択したスペルが可能性と一致するかどうかを判断するのに問題があるようです。 前書き (これはすべて前述の質問ですでに説明されています) 魔術師は最初から2つのレベル1の呪文を知っています(レベル1): [1, 1] ソーサラーがレベルを取得するたびに(レベル12、14、16、18、19、20を除く)、彼らは新しい呪文を習得します(必須)。 さらに、レベルアップするときに、(オプション)1つのスペルを別のスペルに置き換えることを選択できます。 学習して置き換えられる呪文は、有効な呪文スロットレベルである必要があります。これは、魔術師のレベルの半分を切り上げたものです。次の表を参照してください。 Sorcerer level Highest spell level possible 1 1 2 1 3 2 4 2 5 3 6 3 7 4 8 4 9 5 10 5 11 6 12 6 13 7 14 7 15 8 16 8 …

1
KoTH:五目並べ(5行連続)
Gomoku or Five in a lineは、黒と白の石を使ったグリッドで2人のプレイヤーがプレイするボードゲームです。石を(横、縦、または対角線)続けて配置できる人がゲームに勝利します。515×1515×1515 \times 15555 ルール このKoTHでは、Swap2ルールを再生します。つまり、ゲームは2つのフェーズで構成されます。最初のフェーズでは、2人のプレーヤーが誰が先に行くか、誰が黒をプレーするかを決定し、その後、プレーヤーから始めて各ラウンドに1つの石を置きます。黒を選んだ人。 初期段階 プレーヤーをA&Bにして、Aがゲームを開くようにします。 Aはボード上に2つの黒と1つの白い石を配置します Bは、次の3つの移動のいずれかを選択できます。 プレーヤーBが黒を再生することを決定:初期フェーズが終了しました プレーヤーBが白い石を置くことに決め、白を再生する:初期フェーズが終了しました プレーヤーBが1つの黒と1つの白の石を再生することを決定:Aが色を選択する ゲームフェーズ 各プレーヤーは、黒をプレイするプレーヤーから始めて、自分の色の石を1つボード上に置きます。これは、プレイする空きスペースがなくなるまで続きます(この場合はタイです)、または1人のプレーヤーがなんとかして石をプレイします行(その場合、そのプレイヤーが勝ちます)。555 行は、水平、垂直、または対角線を意味します。勝利は勝利です。プレーヤーが複数の行を獲得できたかどうかは関係ありません。 KoTHゲームのルール 各プレイヤーは他のプレイヤーと2回対戦します: 最初はだれが最初に行くかはランダムに決定されます 次のゲームでは、最後にプレイしなければならないプレイヤーが最初になります 勝利は2ポイント、同点1、負け0 目標は、できるだけ多くのポイントを獲得することです あなたのボット 可能な限り多くの言語でこの課題にアクセスできるようにするために、入出力はstdin / stdout(行ベース)を介して行われます。ジャッジプログラムは、ボットのstdinに 1行を出力することによってプログラムにプロンプ​​トを表示し、ボットは1行をstdoutに出力します。 EXITメッセージを受信すると、裁判官がプロセスを強制終了する前に、ファイルへの書き込みを完了するための0.5秒が与えられます。 ランダム性 トーナメントを検証可能にするために、裁判官はシードされたランダム化を使用し、ボットも同じ理由でそうする必要があります。ボットには、使用するコマンドライン引数を介してシードが与えられます。次のセクションを参照してください。 議論 ボットは2つのコマンドライン引数を受け取ります。 対戦相手の名前 ランダム性の種 ユーザーの状態 プログラムはゲームごとに常に新しく開始されるため、ファイルを使用して、保持したい情報を保持する必要があります。現在のディレクトリにあるすべてのファイルの読み取り/書き込み、またはサブフォルダーの作成/削除を行うことができます。親ディレクトリ内のファイルへのアクセスは許可されていません! 入出力フォーマット BOARD現在の石のリストを表すであろう、それだけ石が置かれる位置を示し、各エントリの形式であろうと範囲内の整数であろうとのいずれかであろう(黒)または(白い)。((X,Y),COLOR)XY[0,15)[0,15)[0,15)COLOR"B""W" さらにSP、単一のスペース、それぞれがの範囲にある2つの整数のXYタプル(X,Y)を示し、選択肢を示します。[0,15)[0,15)[0,15)| 初期段階では、3種類のメッセージがあります。 Prompt (judge) -> Answer (bot) "A" …

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