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

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

10
運命のメモ-譜表にメモを入れる
ゾンビの黙示録が来て、世界は終わりに近づいています。突然、誰かが現在の時、分、日を取る式を発見し、それを聞いたすべてのゾンビを即座に殺すピアノで演奏するための完璧な音を吐き出します。残念ながら、世界にはピアノ奏者が1人しかいないため、ノートの読み方を忘れていましたが、楽譜の読み方はまだ知っています。もちろん、これは非常に時間に敏感なことなので、コンピューターにそれをさせるのは自然なことです。1 あなたの課題は、などのメモを取り、次のようにG譜表に配置されたメモを高音部記号で出力することです。 ----- ----- | ---|- | --O-- ----- 仕様: -----(5ダッシュ)と空白行の交互の行の譜表を出力する必要があります。-----合計5 秒になります。この譜表の上に音符を重ねる必要があります。 入力により、ノートの場所が指定されます。入力は次のようになります。 オプションのHor L、「high」または「low」を指定 からAまでの文字でG、ピッチを指定します オプションの#またはb、シャープまたはフラットを指定します。 「メモ」は次のように定義されます。 O音符の場所にある譜表の中央に配置された1つ(大文字のO)。(一番上の行はHF(高F)、一番下の行はE(通常のE)です。) 3つ|のs(垂直バー)、ステム。 音符が中央の行(B)または上にある場合、音符の左に1スペース、下に行く(音符の下に1スペース開始)、または 音符が中央線より下にある場合、音符の右側に1スペース、上に行く(音符の上に1スペース開始)。 A #またはb入力で指定されている場合、ノートの左に直接1つのスペース。 メモが高すぎたり低すぎたりする場合は、元帳行を追加する必要があります。これらの行は---(5ではなく幅が3ダッシュのみ)、ノートが元帳行の上または下(上/下元帳行の場合)にある場合にのみ表示されます。 余分なスペースを任意の場所に配置できます。たとえば、文字の保存に役立つ場合は、空白行にスペースを入れるか、元帳行の後にスペースを入れることができます。 以下は、仕様をより簡単に理解するための視覚化で、すべてのノート名が行の横にあります。 HB --- HA HG ----- HF HE ----- HD HC ----- B A ----- G F ----- E D --- C LB --- …

25
増分ベッティング
数ヶ月前、私はインタビューのための事前スクリーニングのパズルとしてこの質問をしました。最近、ブログの素材について考えると、問題を機能的に解決するための良い例として頭に浮かびました。ブログ投稿を書き終えたらすぐに、これに対する解決策を投稿します。 注:この質問は1年前にStackOverflowで尋ねられたもので、いくつかの(誤った)回答の後に採択されました。明らかなインタビューや宿題の質問であると断定されたと思います。ここでの答えは、誰かがそれらを使用することを考えないように、十分に深くコード化されるべきです! レースでは、次の戦略を使用して賭けます。ベットを失うたびに、次のラウンドのベットの値を2倍にします。勝つたびに、次のラウンドの賭け金は1ドルになります。1ドルを賭けてラウンドを開始します。 たとえば、20ドルで開始し、最初のラウンドで賭けに勝ち、次の2つのラウンドで賭けを失い、4番目のラウンドで賭けに勝った場合、20 + 1-1-2になります。 +4 = 22ドル。 次のg2つの引数を取る関数を完了することが期待されています。 最初の引数は整数aで、これは賭けを開始するときに持っている最初のお金です。 2番目の引数は文字列rです。結果のi番目の文字は、i番目のラウンドの結果を示す 'W'(勝ち)または 'L'(負け)のいずれかになります。 あなたの関数は、すべてのラウンドがプレイされた後に持っているお金の量を返す必要があります。 ある時点で、ベットの価値をカバーするのに十分なお金がアカウントにない場合、その時点で持っている合計額を停止して返さなければなりません。 サンプル実行 1st round - Loss: 15-1 = 14 2nd round - Loss: 14-2 = 12 (Bet doubles) 3rd round - Loss: 12-4 = 8 4th round - Win: 8 + 8 = 16 5th …

3
フリーハンドの赤い丸
上にわたりhttp://meta.stackoverflow.com、我々は我々自身のいくつかのミームを持っています。それらの1つは、フリーハンドの赤丸です。 この投稿を参照してください。 だから、挑戦は コードでフリーハンドの赤い円を描くことができますか? 追加の制限: あなたはかかります、画像を入力として、あなたはフリーハンド赤い丸の画像が出力を追加しなければなりません。 予測可能である必要があります。つまり、同じ画像入力は同じ出力になる必要があります。ランダム性を使用できますが、結果は同じ入力に対して一貫している必要があります。 出力は、円(他の変更なし)を除いて、入力とまったく同じ画像でなければなりません。 フリーハンドの赤い円は、フリーハンド(完全な円ではない)に見え、赤(明らかに)であり、一般に円のように見える(ランダムな波線がない)必要があります。 これは人気コンテストなので、2014年3月の初めに最も多くの賛成票を投じた回答が勝ちます。「フリーハンドの赤い丸」以外の特定の目標はありませんので、できるだけ創造性を高めて、最も多くの賛成票を獲得してください!(可能な限り公平になるように、ルールに従う回答に賛成票を投じます。)

6
意図せずに見えるがクラッシュを引き起こすバグ[終了]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Code Golf Stack Exchangeのトピックになるようにします。 閉じた3年前。 この概念を中心にさまざまな質問がありますが、これらはすべてクラッシュを引き起こすことを含むように見えるため、クラッシュを引き起こすように非常に明らかに設計された多くの回答が得られます。したがって、私が設定した課題は、もっともらしいコードを書くことです(ただし、「意図」と思われるコードはあなたにお任せしますが)、ターゲットOS全体またはそれ自体をクラッシュさせます。(「即座に明らか」と見なされるものは主観的であると理解していますが、うまくいけば、課題はまだ合理的に明確であることを願っています)。 勝者は、5日後の投票数が最も多い答えです。

14
一緒に4つの正方形
ラグランジュの4平方定理は、任意の自然数が4平方数の合計として表現できることを示しています。あなたの仕事はこれを行うプログラムを書くことです。 入力:自然数(10億未満) 出力:正方形の合計がその数になる4つの数値(順序は関係ありません) 注:ブルートフォース検索を行う必要はありません!詳細はこちらとこちら。この問題を単純化する関数がある場合(決定します)、それは許可されません。自動化された素数関数と平方根が許可されています。複数の表現がある場合、どれでも構いません。総当たり攻撃を行うことを選択した場合は、妥当な時間(3分)以内に実行する必要があります サンプル入力 123456789 サンプル出力(どちらでも構いません) 10601 3328 2 0 10601 3328 2

12
土地がフェンスで完全に囲まれているかどうかを判断する
ブール値の2次元配列を想像してください。0は土地の長方形のプロット上の草の正方形を表し、1はフェンスを表します。 2D配列を入力として受け入れ、フェンスにぶつかることなく、北/東/西/南の動きのみを使用して、草のある領域から他の草の領域に移動できるかどうかを決定する関数を記述します。 配列内の草のいずれかの領域がフェンスで完全に囲まれている場合(配列内の草の他のすべての領域に到達するためにN / E / W / Sを移動できないことを意味します)、関数はfalseを返します。それ以外の場合は、trueを返します。 以下は入力として使用できる2つのサンプル配列です。ただし、関数はこれらだけでなく、ブール値の2D配列も処理できるはずです。 0 0 0 0 0 0 1 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 1 1 (should return true) 0 1 0 1 0 0 1 1 0 0 0 0 …
19 code-golf 

10
プログラミング言語インタープリターを作成する[終了]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Code Golf Stack Exchangeのトピックになるようにします。 閉じた3年前。 仕事: プログラミング言語のスニペットを解析できるインタープリターを作成する必要があります。言語は複雑である必要はありませんが、次の構文要素を含める必要があります。 変数を割り当て、読み取る機能(のような単純なようであってもよいa- zである既成の変数) ifステートメント(elseifおよびelseは必要ありません) ループ(任意の数へのカウント、カウンターへのユーザーアクセスは必要ありません) 変数(加算、減算、乗算、除算、より大きい/より小さい、等しい)を使用した単純な数学 文を印刷する ルール: 他の一般的な言語の構文をコピーすることはできません。 別のインタープリターの修正ではなく、独自のインタープリターを作成する必要があります。 インタプリタは任意の言語で作成できます。 お使いの言語で99ボトルのビールのサンプルプログラムを作成します(こちらをご覧ください) これは人気コンテストなので、最も賛成の回答が勝ちます。

1
キヌイッシュ三目並べ
人間のプレイヤーに対して3 * 3ボードで三目並べの完璧なゲームをプレイする選択した言語でプログラムを作成します。ただし、すべての動きは、前の反復から生成された異なるプログラムでなければなりません。 人間の入力をどのように、どのような形で評価するかはあなた次第ですが、標準入力から読み取る必要があります。同様に、どのプレイヤーが開始するかを決定する方法を自由に選択できます(たとえば、最初に尋ねる、またはコンピューターが開始することを知らせる無効な動きを人間に入力させる、または他のアイデアを許可する)。 動きを検証する必要はありません。あなたはかなりプレイしている人間の対戦相手であると想定できます。 基本的に、ボードの状態に対応するプログラムがあります。状態は認識可能な方法で出力されますが、少なくとも次の詳細レベルが予想されます。 X.. 00X x.. 人間のプレーヤーが彼の動きを入力した後、プログラムは同じ言語のソースファイル(標準出力またはファイル)としてそれ自体の次の反復を生成し、終了する必要があります。そのソースファイル以外の場所に情報を保存することはできません。(プログラムが生成されたプログラムをビルドして実行する必要はありません。ユーザーが実行できますが、禁止されていません)。生成されたプログラムがビルドおよび実行されると、同様に動作し、状態を表示し、ユーザー入力を待機します。 ゲームの終わりに、明確に特定できる方法で結果を印刷する必要があります(勝ったか同点か)。 完璧なプレーとは、プログラムが負けてはならないことを意味し、勝つことを強制する可能性がある場合、勝つべきです。 最短のコードが勝ち、最初の有効なエントリから少なくとも10日後に勝者が選択されます。 プログラムが次の反復の構築と起動を処理できる場合、スコアが10%減少します。(おそらく、それだけの価値はないことを知っています)もちろん、プログラム自体は、次の反復がユーザーからの動きを受け入れるまでに終了しなければなりません。 珍しい珍しいトリックを使用する場合は、コードに簡単な説明を投稿してください。
19 code-golf 

28
プライムギャップの計算
素数を見つけることは、プログラミングの通過儀礼であり、非常に頻繁に誰かが作成する最初の深刻なプログラムです(通常は試用部門で)。 しかし、素数だけはすでに使い古されています。次に興味深いのは、素数のギャップを取得することです。連続する素数間のこれまでで最も長いギャップです。これらは非常にまれで「貴重な」ものです。最初のいくつかのペアとその違いは次のとおりです。 2 3 1 3 5 2 7 11 4 23 29 6 89 97 8 113 127 14 ... 父は、これらを10kまでの楽しみのために手作業で計算していました。コードがどれだけ短いかを見てみましょう。 ルール: 素数テスト、素数生成、または素数ギャップのための組み込み関数はありません http://oeis.org/A002386などを取得しません(遠くから詐欺師の匂いがすることができます:)) 事前計算された配列はありません 内部整数型が失敗するまで印刷を続ける 最小の文字数が優先されます。素数なしでギャップのみを印刷する場合は、+ 10文字。 興味深い場合は、組み込み関数を備えたバージョンを披露することもできます。クリエイティブに。 明確化:プライムを通過し、以前に見たギャップよりも大きいギャップを見るたびに報告します。たとえば、3と5の間には、2ユニット幅のギャップがあります。5と7の間のギャップも2ですが、それは古いニュースです。これ以上は気にしません。新しい最大のギャップが見つかった場合にのみ、報告します。これは、ギャップがますます広くなるにつれて、素数がどんどん少なくなっていることを反映しています。 編集:ほとんどの答えは素晴らしいですし、より多くの認識に値します。ただし、これまでのところ、48文字のGolfScriptエントリが最短です。
19 code-golf  primes 

15
どの行が削除されたかを知らせる関数を作成します
で、私の前のコードの挑戦、私はその行のどれが削除されたかを示します関数を記述することができ尋ねました。 手順は次のとおりです。 5行を含む関数を作成します。 関数をそのまま実行すると、0が返されます。 5行のいずれかを削除して関数を実行すると、削除された行がわかります(たとえば、最後の行を削除すると5が返されます)。 さて、少し難しいものを試してみましょう。 上記と同じ規則に従いますが、今回は、どのTWO行が削除されたかを伝える配列を関数が返す必要があります。 たとえば、1行目と5行目を削除すると、戻り値は[1,5]になり、3行目と4行目を削除すると、戻り値は[3,4]になります。 繰り返しますが、行が削除されない場合、関数は0を返す必要があります。1行削除されたケースも処理できる場合はボーナスポイントになりますが、必ずしもそうする必要はありません。 ヘルパー関数を利用できますか?はい、ただし必要な場合のみ。これを実現する単一の自己完結型関数が理想的です。 最後の課題と同様に、最も高い投票されたソリューションが勝ちます。1週間以内に勝者を選びます。24時間以内に新しい提出物が届かない場合はすぐに選びます。

1
ハルマの最短2プレイヤーゲーム
Chessでは、Fool's Mateを使用して4移動(各2回)した後にゲームを終了することができます。 あなたの目標は、Fool's Mate of Halmaを見つけることです。これは、プレイするターン数を最小限に抑えるHalmaの2人用ゲームです。 10 56を超えるボードステートがあり、分岐係数が1000を超えているのを見てきたので、最適なソリューションが見つかる可能性は誰にもありません。代わりに、できる限り最適なソリューションを見つけようとしています。 移動のリストと、それらの移動の生成に使用したコードを送信する必要があります。 ゲームの説明 HalmaはChinese Checkersに似ていますが、16 * 16の正方形のボードでプレイします。 最初、ボードは次のようになります。 ゲームの目的は、すべてのピースを対戦相手のピースの開始位置に移動することです。 プレーヤーのターンで、彼/彼女は以下を行うことができます。 ターンを渡す 自分の作品の1つを隣接する空きスペースに移動します。隣接するスペースには対角線が含まれます。 彼/彼女の作品のいずれかを取り、何度でも次の操作を行います。隣接する作品の上に作品をジャンプし、飛び越えた作品の反対側のスペースに着地します。 次に、2番目のタイプの移動を説明する例を示します。 ルール ゲームが終了する合法的な動きのリストを提出してください。 リストの生成に使用したコードを送信します。 他の人のコードからより良い結果を得る場合、コメントで結果を投稿するか、新しい結果で投稿を編集してください。 各移動はNone、ターンを通過するか(x1,y1,x2,y2)、ピースを移動する必要があります。移動するピース(x1,y1)の座標とそのピースの移動(x2,y2)先です(ジャンプ移動の場合、中間座標は無視します)。座標(0,0)は左上隅から始まります。x座標は右に増加し、y座標は下に増加します。移動は改行で区切る必要があります。 このpythonスクリプトを使用して、移動を確認できます。でpython halma_verify.py < file移動を確認するために使用しfileます。 最短リストが勝ちます。

2
2 ^ 2 ^…^ 2の括弧の可能な数値結果の数
演算子を使用した式2^2^...^2を考えます。演算子は、べき乗を意味します(「累乗」)。デフォルトの結合性がないため、式を完全に括弧で囲んで明確にする必要があります。式を括弧で囲む方法の数は、カタロニア語の数値で指定されます。n^^ C_n=(2n)!/(n+1)!/n! たとえば(2^2)^(2^2)=((2^2)^2)^2、異なる括弧で同じ数値結果が得られる場合があります。そのため、特定の数値の異なる数値結果の可能性は、all nよりも少なくなりC_nますn>1。1, 1, 2, 4, 8, ...カタロニア語番号とは対照的に、シーケンスは開始します1, 2, 5, 14, 42, ... 問題はn、入力として受け入れ2^2^...^2、n演算子を使用した式のさまざまな数値結果の数を返す最速のプログラム(または関数)を記述すること^です。パフォーマンスが大きくなってもパフォーマンスが大幅に低下nすることはないため、高出力タワーを直接計算するのはおそらく悪い考えです。

6
チェス-すべての合法的な動きを見つけます(キャスティングと入場者を除く)
特定のFEN文字列から現在のプレーヤーのすべての可能な(合法的な)動きを計算する最短のコードを記述します。FEN文字列とは何ですか?(ウィキペディア) 最短のコードが優先され、言語は関係ありません。 出力の移動は、en passant、castling、およびポーンプロモーションを除き、チェスの移動規則 に従う必要があります。 チェック、チェックメイト、およびステイルメイトを無視します。キングも状況をキャプチャできません。 あなたが欲しいとは異なる出力を設定することができます(例:A2-A4、A2A4、a2a4、a2->a4...) テストケース: #入力1: rnbqkbnr / pppppppp / 8/8/8/8 / PPPPPPPP / RNBQKBNR w KQkq-0 1 #出力1 A2-A4、A2-A3、B2-B4、B2-B3、C2-C4、C2-C3、D2-D4、D2-D3、E2-E4、E2-E3、 F2-F4、F2-F3、G2-G4、G2-G3、H2-H4、H2-H3、B1-A3、B1-C3、G1-F3、G1-H3 #入力2 7k / 8/8/8/8/8 / PP6 / Q1q4K w--0 1 #出力2 A1-B1、A1-C1、A2-A3、A2-A4、B2-B3、B2-B4、H1-H2、H1-G1、H1-G2
19 code-golf  chess 

21
リバーシブルリバーサー
あなたの仕事は簡単です。プログラムは標準入力からテキスト行を読み取り、同じテキストを文字反転形式で出力します。他のものを印刷することはできません。 例えば: 入力:「Hello!」、出力:「!olleH」 キャッチは、ソースコード自体が文字反転されている場合、プログラムはまったく同じことを実行できる必要があるということです。 スコアリング:標準のコードゴルフスコアリングが適用されますが、退屈を制限するために次の変更が加えられます //margorp program// スタイルの答え:回文である解決策はすべて、スコアに+ 25%のペナルティが課せられ、切り上げられます。このペナルティは、たとえば回文を壊すために、有用な効果のない文字をプログラムに挿入する場合にも適用されます。

1
Javaが勝つコードゴルフの問題を書く[終了]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Code Golf Stack Exchangeのトピックになるようにします。 7年前に閉鎖されました。 以下のようなコードゴルフタスクを書く タスクに必要な唯一の入力(ある場合)は、標準入力からのテキストであり、タスクに必要な唯一の出力は、標準出力へのテキストです。 タスクで定義されているすべての有効な入力に対して、文字の正確な出力文字列が1つだけ存在します。 有効な各入力の長さは10000文字未満です。 各正しい出力の長さは10000文字未満です。 すべての入力に対してタスクを正常に完了する最短のプログラム(StackExchangeユーザーが管理する)はJavaにあります。 関連するJavaプログラムが最も短いタスクが優先されます。
19 code-golf 

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