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

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

5
ゴルフ言語での保管のヒント
ゴルフの言語を書いています。 コードゴルフ言語で保存するための変数、スタック、テープ、レジスタなどを提案しますか?暗黙的な入力はどうですか? 大まかな定義: 変数は、値が割り当てられ、以降その名前で取り出すことができることを単に名前(長いゴルフの言語で、通常は1文字)です。 レジスタは、変数のようなものですが、それは値を取得/設定するための(通常はシングルバイト)独自のコマンドがあります。 スタックは、最も最近追加された値(「上」値)が変更されるものである値の可変長配列/リストです。 キューは、「上の値を除いて、スタックのようなものです底が」改変されているものです。 テープは、各値がインデックスを有する値の静的配列/リストです。スタックとテープの主な違いは、テープ上の値がインプレースで変更されることです。 さまざまなシナリオおよび全体に対する各オプションの長所と短所を知っていただければ幸いです。意見を避け、推論を伴う陳述をバックアップしてください。

13
トリタゴラストリプル
A ピタゴラストリプル式に正の整数解です。 トリタゴラストリプルは、方程式の正の整数解です。 Δnはn番目の三角形の数を見つけます。トリタゴラスのトリプルはすべて、方程式の解でもあります。 仕事 正の整数を指定すると、正および負の三角形の数の合計が第3の三角形の数になるようにc、正の整数のすべてのペアを出力します。最も便利な方法でペアを出力できます。各ペアを一度だけ出力する必要があります。a,babc これはコードゴルフです テストケース 2: [] 3: [(2, 2)] 21: [(17, 12), (20, 6)] 23: [(18, 14), (20, 11), (21, 9)] 78: [(56, 54), (62, 47), (69, 36), (75, 21), (77, 12)] 153: [(111, 105), (122, 92), (132, 77), (141, 59), (143, 54), (147, 42), (152, …

3
壁に足を踏み入れないでください!
いくつかのテキストベースのローグのようなものは、あなたが壁に足を踏み入れることを許さず、あなたが行おうとするならあなたにあなたの動きを与えます。プレーヤーを最も近い有効な方向に移動できるのに、なぜそうするのですか? チャレンジ 方向と3 x 3のキャラクターのグリッドが与えられると、プレーヤーが一歩進んだ後に同じグリッドを出力する関数のプログラムを書きます。 例えば、 9 #.. .@# #.# になる #.@ ..# #.# 入力 方向は1〜9の1桁の数字で示され、それぞれが8つの基本方向に対応し、静止しています。これは、キーパッド上の数字の相対的な位置から導出されます。 NW N NE .. \ | / ... 7 8 9 W- 4 5 6 -E ... 1 2 3 ../ | \ SW S SE ただし、789、456、123の代わりに123、456、789の番号を使用することもできます。言い換えると、必要に応じて上下2行または番号を入れ替えることができます。これらは、許容される唯一の2つのインデックスの組み合わせです。 3 x 3グリッドは、歩行可能な床、壁、およびプレーヤーを表す3つの異なる印刷可能なASCII文字で構成されます。(テストケースで.は、床に使用され、#sは壁であり@、プレーヤーです) プログラムで使用する文字を選択することもできますが、回答にそれらを明記する必要があり、複数の試行にわたって一貫している必要があります。 文字を表す文字は常に3 x 3グリッドの中央にあり、方向は常に1〜9を含みます(含む)。 …
16 code-golf  random 

2
スヌーカーの得点
世界スヌーカー選手権を見ていましたが、不思議に思いました。 スヌーカーの得点 スヌーカーのゲームには、守らなければならない特定のルールがあります: テーブルに赤いボールがある場合、あなたのターン中に最初に赤いボールをポットしなければなりません それぞれの赤いボールをポッティングした後、色付きの(赤ではない)ボールをポッティングする必要があります(ポッティングされた色付きのボールはテーブルに置き換わります) すべての赤いボールが上がった後(15個あります)、最初に色の付いたボールを選択してから、最も低いスコアのボールから始めて、最も高いスコアのボールまで進めます(これらは交換されません)。 ポッティングをしないと、ターンが終了します。 ボールあたりのポイント 赤いボール:1ポイント 黄色のボール:2ポイント 緑色のボール:3ポイント 茶色のボール:4ポイント 青いボール:5ポイント ピンクボール:6ポイント ブラックボール:7ポイント 質問 すべてのボールがまだ残っているテーブル(15個の赤と他の各色のボールの1つ)から開始し、最初のターン後にスヌーカーのプレーヤーのスコアが与えられます。スコア? 入力は1〜147のスコアです。整数か文字列かを選択できます。出力は、各ボールをポットした回数の異なる組み合わせである必要があります。 テストケース: Input: 4 Output: 1r 1g 2r 1y Input: 25 Output: 4r 3b 5r 2b 1br 1y 5r 2b 2g ... 9r 8y ルール: 可能性を新しい行で分割するか、ある種のセパレーター(/ ,; | \または私が見逃している他のセパレーター)で出力するかを選択できます。 これはcodegolfなので、最短のコードが優先されます。
16 code-golf 

5
ブロック付きの単語
(この単語リストから)繰り返される文字を持たない4文字の単語の辞書がある場合、それらの単語の1つを選択し、次のブロック文字の辞書を使用してその特定の単語を出力する必要があります。 .----------------. .----------------. .----------------. .----------------. | .--------------. || .--------------. || .--------------. || .--------------. | | | __ | || | ______ | || | ______ | || | ________ | | | | / \ | || | |_ _ \ | || | .' ___ | | || | …

9
Google Autocomplete Fun
あなたの仕事は、入力文字列が与えられると、その検索の最初のGoogleオートコンプリート結果を出力するプログラムを作成することです。入出力の形式はユーザー次第です。 ルール プログラムは1つの入力と文字列を受け取り、Googleのオートコンプリート/オートフィル候補の上位の結果を出力する必要があります。入出力の形式はユーザー次第です。必ず、I / Oフォーマットとは何かを述べてください。 明らかに、インターネットへのアクセスは許可されています。 URL短縮(bit.ly、TinyURLなど)は厳しく禁止されています。あなたはこのURLからあなたのオートコンプリートの結果をフェッチする必要がありますhttp://suggestqueries.google.com/complete/search?client=your_browser&q=your_queryまたはhttp://google.com/complete/search?client=your_browser&q=your_query。のブラウザ名(または、文字列)を想定することができclientます。私が書いたプログラムでは、Chromeを想定しています。任意のブラウザ名または文字列が機能するはずです。http://suggestqueries.google.com/complete/searchのバリアントを使用している限り、ウェブページにオプションを渡すことができます。 プログラムがどのように機能するかの説明を提供してください。必須ではありませんが、強くお勧めします。 すべての標準的な抜け穴は厳密に禁止されています。 テストケース これらは常に変化しているため、これらが古くなった場合はこの投稿を編集してください。 'how to' => 'how to make slime' 'code golf' => 'code golf languages' 'you' => 'youtube' 'g' => 'google' (why would you google 'google'?) これはコードゴルフですので、最短のコードが勝ち、最高のプログラマーが繁栄するかもしれません...

5
友達とキューイング
遊園地で最高の芽、ジムと一緒にいて、お気に入りの乗り物が見えてくると、あなたとジムは視線を交換します。当然、列に並ぶために競争します。残念ながら、彼はあなたがゴルファーであり、彼が本当のスポーツをしているので勝ちます(ごめんなさい)。実際、あなたはかなり遅れており、あなたとジムはx人によって隔てられています。ラインが長さでnあり、あなたが後ろにいて、ラインがすべてのj人をジグザグに動かしていると仮定すると、あなたとジムは同じ列にいて、チャットすることができます(1行だけ離れています)? 入力 3整数 n-線の長さ。この数は、常によりも大きいかまたは等しいであろうjと形になり、正の整数(待ち行列の行数)です。y * jy j-行の1行の人数(1行の列の数)。この数は常に0より大きくなります。 x-あなたとジムの間の人々の数0 <= x < 2j - 1。ヒント:この数値が奇数の場合、出力は空になっているはずです。 出力 Jimがあなたと同じ列にいる行の整数位置のリスト。 1これらの整数は、回答で指定する限り、0または1のインデックスを付けることができます。 2これらの整数は、回答で指定している限り、位置0または位置n-1で始まると仮定できます。 例 この例では、入力はになりますn = 9, j = 3, x = 0。出力は2, 5、Jimと同じ列にいるときの位置が2または5であるためです。 テストケース [9, 3, 0] -> [2, 5] [12, 3, 0] -> [2, 5, 8] [9, 3, 1] -> [] [9, 3, …
16 code-golf 

6
騎士の動きに取り組む
六角形のチェスは、セルが従来の正方形ではなく六角形であるボードでプレイされるチェスのバリエーションのファミリーを表します。そのようなバリアントは多数あります。この課題では、最も一般的なGlińskiのバリアントに焦点を当てます。 ボードは3色で構成され(同じ色が端を共有しないように)、六角形の端がプレイヤーに面しています。ボードは、文字でマークされた11個のファイルが、持っていaてl(文字がj(ファイルで60°を曲げ使用されていない)、および11のランクf)。ランク1を介して6各11個の細胞を含む、ランクが79つのセルを有し、ランクは87を有している、というように。ランク11には1つのセルf11のみが含まれます。(それが役立つ場合は、各ランクを非常に幅の広い「V」字型にすると考えてください。) これは、中央のセルに騎士がいるボードの例です。ドットでマークされたセルは、この特定のナイトの合法的な動きです。騎士は「通常の」チェスと同様の方法で2ダウン1オーバーで動きます。六角形のチェスの用語では、それは(エッジを横切る)直交方向の動きであり、次に同じ方向(同じ色に最も近い動き)の斜め方向の動きです。例えば、ナイトが下にある場合、ライトブラウンまでの「上」への直交移動は、最も近いライトブラウンへの「上」と「上」または「左」の斜めの動きを伴います。 https://commons.wikimedia.org/wiki/File:Glinski_Chess_Knight.svgを介してパブリックドメインから この騎士はf6に位置しているため、法的な動きは c4, c5, d3, d7, e3, e8, g3, g8, h3, h7, i4, i5 入力 ナイトの開始セルを提供する単一の入力。これは、1つの文字列としてすることができ"b6"2つの文字列として、"b", "6"など、任意の便利な形式で。入力文字は大文字でも小文字でも構いません。 出力 その場所の騎士が行うことができる有効な動きのリスト。これは、文字列の配列、明確で一貫した区切り文字を持つ単一の文字列、改行で区切られた文字列など、最も便利なものであれば何でもかまいません。出力は必ずしもソート順である必要はなく、大文字または小文字のいずれでもかまいません(任意)。 ルール ボード上に他のピースが存在しないか、動きに干渉しないと仮定します。私たちは騎士だけに焦点を合わせています。 完全なプログラムまたは機能のいずれかが受け入れられます。関数の場合、出力する代わりに出力を返すことができます。 可能であれば、他の人がコードを試すことができるように、オンラインテスト環境へのリンクを含めてください! 標準的な抜け穴は禁止されています。 これはコードゴルフなので、通常のゴルフルールがすべて適用され、最短のコード(バイト単位)が勝ちます。 例 b6 a3, c4, d5, d9, e7, e8 f6 c4, c5, d3, d7, e3, e8, g3, g8, h3, h7, i4, i5 f11 …

2
ゴルフのエンドツーエンド暗号化
このチャレンジには、最初に答えて少なくとも3日間無敵のままでいるために200ポイントの報奨金が課せられます。user3080953が主張しています。 最近、エンドツーエンドの暗号化について多くの話があり、製品からそれを削除するように企業に圧力をかけています。私はその権利と不正には興味がありませんが、私は疑問に思いました。コードをどれだけ短くすれば、会社はそれを使わないように圧力をかけるでしょうか? ここでの課題は、ネットワーク化された2つのシステム間でDiffie Hellmanキー交換を実装し、生成された対称キーを使用してユーザーがやり取りできるようにすることです。このタスクの目的のために、他の保護は必要ありません(たとえば、キーの循環、IDの確認、DoSからの保護など)。インターネットを開くことができます(リッスンするポートはすべてのユーザーが利用できます)。組み込みの使用が許可され、推奨されています! 次の2つのモデルのいずれかを選択できます。 サーバーとクライアント:クライアントはサーバーに接続し、サーバーまたはクライアントは他方にメッセージを送信できます。2つの間のサードパーティは、メッセージを読むことができない必要があります。フローの例は次のとおりです。 ユーザーAがサーバーを起動します ユーザーBはクライアントを起動し、それをユーザーAのサーバーに転送します(IP /ポート経由など)。プログラムは接続を開きます ユーザーAのプログラムは接続を確認します(オプションでユーザーに最初に同意を求めます) ユーザーBのプログラムはDHシークレットの生成を開始し、必要なデータ(公開キー、プライム、ジェネレーター、実装に必要なもの)をユーザーAに送信します。 ユーザーAのプログラムは、送信されたデータを使用して共有シークレットの生成を完了し、必要なデータ(公開キー)をユーザーBに送り返します。この時点から、ユーザーAはメッセージを入力できます。 B(例:標準出力)。 ユーザーBのプログラムは、共有秘密の生成を完了します。この時点から、ユーザーBはユーザーAにメッセージを送信できます。 または:2つのクライアントが接続されたサーバー:各クライアントはサーバーと通信し、サーバーはメッセージを他のクライアントに転送します。サーバー自体(およびその間のサードパーティ)は、メッセージを読み取れないようにする必要があります。初期接続以外のプロセスは、最初のオプションで説明したものと同じです。 詳細なルール: 単一のプログラム、または複数のプログラム(サーバーとクライアントなど)を提供できます。スコアは、すべてのプログラムの合計コードサイズです。 プログラムは理論的にはネットワークを介して通信できる必要があります(ただし、テストにはlocalhostで十分です)。選択した言語がネットワークをサポートしていない場合は、サポートしているもの(シェルスクリプトなど)と組み合わせることができます。この場合、スコアは使用されるすべての言語にわたるコードサイズの合計です。 Diffie Hellmanキー生成では、ハードコードされた「p」および「g」値を使用できます。 生成された共有キーは、少なくとも1024ビットである必要があります。 キーが共有されたら、対称キー暗号化の選択はあなた次第ですが、それに対して実際的な攻撃があることが現在知られている方法を選択してはなりません)。許可されたアルゴリズムの例: AES(任意のキーサイズ) RC4(理論的には壊れていますが、言及できる実用的な攻撃はないため、ここでは許容されます) ユーザーAとBはどちらも、相互にメッセージを双方向に送信できる必要があります(双方向通信)(たとえば、stdinからの行の読み取り、継続的なプロンプト、ボタンを押すなどのイベント)。簡単になった場合は、交互の会話を想定できます(つまり、ユーザーがメッセージを送信した後、次のメッセージを送信する前に応答を待つ必要があります) 言語の組み込みが許可されています(既にサポートされている場合、独自の暗号化またはネットワークメソッドを記述する必要はありません)。 基礎となる通信形式はユーザー次第です。 上記の通信手順は一例ですが、従う必要はありません(必要な情報が共有され、中間キーが共有キーまたはメッセージを計算できない場合) サーバーへの接続に必要な詳細が事前にわからない場合(ランダムポートでリッスンする場合など)、これらの詳細を印刷する必要があります。マシンのIPアドレスがわかっていると想定できます。 エラー処理(無効なアドレス、接続の切断など)は必要ありません。 課題はコードゴルフであるため、バイト単位の最短コードが勝ちます。

9
セミプライムの因子を明らかにする最小の乗数
与えられた半素数 N、最小の正の整数見つけるMの二つの要因の一つのバイナリ表現ようにNがバイナリ表現に見出すことができるN * Mを。 例 半素数N = 9799を考えてみましょう。 1から始まるmの異なる値を試します。 m | N * m | N * m in binary ---+--------+------------------ 1 | 9799 | 10011001000111 2 | 19598 | 100110010001110 3 | 29397 | 111001011010101 4 | 39196 | 1001100100011100 5 | 48995 | 1011111101100011 6 | 58794 | …

1
プログラムが変異しているかどうかを検出する
エラーなしで終了するプログラムを作成します。 単一のバイトが他のバイトで置き換えられた場合、プログラムは出力する必要があります CORRUPTED ファイルからソースコードを読み取らないでください プログラムは他の出力を生成しないはずです これはコードゴルフなので、バイト単位の最短回答が勝ちです。 編集:「破損していない」要件を削除

18
値を計算します
チャレンジ 入力として整数与えられ、が値を出力する場合(はリーマンゼータ関数を表します)。sssS ≥ 1s≥1s\geq 1ζ(s )ζ(s)\zeta(s)ζ(x )ζ(バツ)\zeta(x) さらに詳しい情報 ζ(s )ζ(s)\zeta(s)は次のように定義されます: ζ(s )= ∑n = 1∞1nsζ(s)=∑n=1∞1ns\zeta(s) = \sum\limits^\infty_{n=1}\frac{1}{n^s} 回答を小数点以下5桁まで出力する必要があります(これ以上、それ以下)。答えが無限であることが判明した場合は、または同等の言語を出力する必要があります。∞∞\infty リーマンゼータのビルトインは許可されていますが、そのようにするのは面白くありません;) 例 出力は次のとおりでなければなりません Input -> Output 1 -> ∞ or inf etc. 2 -> 1.64493 3 -> 1.20206 4 -> 1.08232 8 -> 1.00408 19 -> 1.00000 バウンティ 組み込みを許可するための慰めとして、組み込みのゼータ関数を使用しない最短回答に対する100人の報奨金を提供します。(緑色のチェックマークは、全体として最も短いソリューションに移動します) 勝ち バイト単位の最短コードが優先されます。
16 code-golf  math 

30
累乗組み込みなしで整数xを累乗xにします
タスク-タイトルはほぼそれを要約しています。整数xをxの累乗にし0<xます。 制限事項: 累乗の使用、exp()、ln()、およびその他の権限に関連する言語組み込み関数は、のようなpow()、x^x、x**x禁止されています。 指定された整数が、選択したプログラミング言語の制限に適合すると仮定できます。 テストケース: Input | Output --------------- 2 | 4 3 | 27 5 | 3125 6 | 46656 10 | 10000000000 これはcode-golfであるため、バイト単位の最短プログラムが優先されます。

5
ais523のBackFlipを実行してください!
この課題は、のための賞であるais523のための勝利「新人王」のカテゴリを「PPCG 2016のベスト」。おめでとう! BackFlipは、ユーザーais523によって作成された難解なプログラミング言語です。ais523は、他にも30以上の興味深いesolangを作成しています。 BackFlipはBefungeや> <>のような2D言語で、命令ポインターがテキストのグリッド(プログラム)を横断し、上、下、左、右に移動し、文字に応じて方向を変えます。重大なことに、BackFlipプログラムのグリッドは、ラングトンのAntのように、移動中に変化します。 この課題では、BackFlipプログラムは常にテキストの長方形のグリッド(すべての行が同じ長さ)で、サイズが少なくとも1×1で、文字のみを含むと想定できます./\<>^V。(.スペースではなく、可視性のために使用されます。)ここで使用するBackFlipは、意味的には元のspecと同じです。 BackFlipの命令ポインター(IP)は、常にプログラムの左上隅のすぐ右から始まります。遭遇する可能性のあるコマンドには3つのタイプがあります。 .ノーオペレーションです。IPは、進行方向に進みます。ノーオペレーションはノーオペレーションのままです。 /と\ミラーです。それらは、角度で示される方向にIPを反射し、その後、他のタイプのミラーに変わります。 たとえば、IPが左に向かう場合、\左ではなく上方向に動き始め、はに\なります/。 <、>、^、およびV矢印です。IPを指し示す方向にリダイレクトし、IPが来た方向(IPが動いていた方向とは反対)を指す矢印に変わります。 たとえば、IPが下に向かう場合、IPは下>ではなく右に移動し始めます。これは、IPの方向で>ある^ためです。 BackFlipプログラムは、IPが範囲外に移動すると、つまりグリッドから外れると終了します。それは結局のところ、すべての無限ループが不可能であるため、バク転プログラムが最終的に終了します。(これは真実であると仮定できます。) この課題の目標は、BackFlipプログラムを取り込んで、プログラムが終了する前に命令ポインターが取る移動数を出力するプログラムまたは関数を作成することです。つまり、プログラムの実行中にIPは何ステップを実行しますか?これには、グリッドへの最初のステップとグリッドからの最終ステップが含まれます。 たとえば、指示ポインターは、単純なグリッドで5つのステップを取ります....。 .... <- empty 4×1 grid 012345 <- step number of the IP したがって、への出力....は5です。 より複雑な4×2グリッド \... \.>< IPは9番目のステップでグリッドを終了するため、出力は9次のようになります。 step grid IP position (@) 0 \... @.... \.>< .... 1 \... @... \.>< .... 2 /... .... …

12
クイーンズパズルを確認する
女王がチェスで何をしているのかわからなければ、それは大した問題ではありません。それはただの名前です:) 入力は、クイーンをいくらか含む任意の幅と高さの正方形になります。入力ボードは次のようになります(このボードの幅と高さは8です)。 ...Q.... ......Q. ..Q..... .......Q .Q...... ....Q... Q....... .....Q.. このボードにはクイーンが8人います。たとえば、ここに7、1、または10があると、ボードは無効になります。 ここでは.、空のスペースにaを使用Qし、女王にa を使用します。代わりに、希望する非空白文字を代わりに使用することもできます。 この入力は有効であることが確認できます。真実の値を印刷(または返す)する必要があります(有効でない場合は、偽の値を印刷(または返す)必要があります)。他と同じ行、列、対角線、または対角線にクイーンがいないため有効です。 例(括弧内に出力しないでください): ...Q.... ......Q. ..Q..... .......Q .Q...... ....Q... Q....... .....Q.. 1 ...Q. Q.... .Q... ....Q ..Q.. 0 Q. Q. 0 ..Q ... .Q. 0 (this is 0 because there are only 2 queens on a 3x3 board) …

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