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

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

28
bfcat-ファイルをbrainf ***プログラムとしてエンコードします
チャレンジ 文字列を指定して、Brainfuckとしてコンパイルおよび実行すると、その文字列を返す有効なBrainfuckプログラムを返すプログラムまたは関数を作成します。 すべての入力がASCIIとしてエンコードされていると仮定します。 出力されたBFプログラムは、無限のテープがある環境で実行されると仮定します。 ポインターがセル0から始まり、すべてのセルがゼロの値に初期化されると仮定します。 以下の各例は、指定された入力に対する1つの可能な正しい出力を表しています。特に、例には人間が読みやすいように余分な改行とスペースが含まれています。ソリューションは、出力されたBFコードを任意の方法でフォーマットできます。 テープは二重に無限です。 インタープリターによって提供されるすべてのセルは、正確に8ビットのセルです。オーバーフローとアンダーフローは、予測可能で健全な問題に包まれます。 例 スペース文字列 入力が与えられると、プログラム/関数は以下を返すことができます: +++++ +++++ +++++ +++++ +++++ +++++ ++ . 感嘆符 入力が与えられると、!プログラム/関数は以下を返すことができます: +++++ +++++ +++++ +++++ +++++ +++++ +++ . 二文字 入力が与えられると、hiプログラム/関数は以下を返すことができます: +++++ +++++ +++++ +++++ +++++ +++++ +++++ +++++ +++++ +++++ +++++ +++++ +++++ +++++ +++++ +++++ +++++ +++++ +++++ …

2
都市:視界
私は無限の2次元都市の位置(0、0)にいます。これは各格子点を中心とするブロックに完全に分割されており、その一部には建物が含まれています。特定のポイント(x、y)にある建物は、(x-.5、y-.5)および (x + .5、y + .5)に反対側の角を持つ正方形全体を占めます。建物は、(0、0)から他の建物と交差しない建物内のポイントまでの線分がある場合にのみ表示されます。 たとえば、私()は次の都市に@6つの建物(*)を見ることができます。 * * * *@ x** * y (-1、-1)xでマークされた建物は、隣接する2つによって遮られているため表示されません。または(1、-1)の建物の端で遮られているため、(3、-2)でマークされたもの。y 入力 複数行の文字列、または行のリスト。オプションで長方形にスペースを埋めます。以下のみが含まれます。 単一@(私の位置) スペース *、建物を表します。 常に少なくとも1つの建物があるため、少なくとも1つの目に見える建物があります。 出力 目に見える建物の数。 テストケース *@ 1 * ******* @ * 7 ***** **@** ***** 4 * ** @ ** 2 * * * * @ 4 @ * *** 1 …

30
2番目の非反復キャラクターは何ですか?
コードレビューのこの質問に基づいて 印刷可能なASCII文字の空でない文字列が与えられた場合、2番目の非反復文字を出力します。たとえば、input DEFD、outputの場合F。 入力 適切な形式の単一の文字列。 出力 第二左から右に読むとき、再び適切なフォーマットで、繰り返さない文字。 出力文字は大文字と小文字を区別しません。 そのような文字が存在しない場合(すべての文字が繰り返されるなど)、空の文字列を出力します。 ルール アルゴリズムは大文字小文字を無視する必要があります。つまり、Dおよびd同じ文字としてカウントされます。 完全なプログラムまたは機能のいずれかが受け入れられます。 入力文字列は空でないことが保証されます(つまり、少なくとも1文字の長さ)。 入力文字列はASCIIです。英数字だけではなく、任意の有効な文字を繰り返すことができます(これにはスペースが含まれます)。 標準的な抜け穴は禁止されています。 これはコードゴルフなので、通常のゴルフルールがすべて適用され、最短のコード(バイト単位)が勝ちます。 例 入力は1行目にあり、出力は2行目にあります。 DEFD F FEED D This is an example input sentence. x ...,,,..,,!@ @ ABCDefgHijklMNOPqrsTuVWxyz B AAAAAABBBBB Thisxthis This this. .

3
遅延マイクロ波入力を生成する
関連:電子レンジをプログラムし、遅延値を生成します。 私の同僚はとても怠け者なので、電子レンジをプログラミングするときに指を動かすことさえしません。(これは実際に本当です!) 彼が望んでいるものに最も近いが、すべての数字が同じである時間を与えるマイクロ波入力を見つけるのを手伝ってください。2つの入力が目的の時間と同じ時間差になる場合は、数字が少ない方を選択します。両方の桁数が同じ場合は、小さい方を選択してください。そうすれば、彼はそれほど長く待つ必要がなくなります。 入力は、完璧主義者が入力する整数です。たとえば430、4分30秒で100、60それぞれ1分です。0より大きく、9999を超えません。 出力は整数である必要があります。たとえば444、4分44秒、5555秒です。 合計時間が1分40秒未満の場合、入力と出力の両方が単純な秒(分ではない)になります。 これはcode-golfなので、コードはできるだけ短くする必要があります。 テストケース: 30 → 33 60 → 55 70 → 111 90 → 88 100 → 55 101 → 66 120 → 77 130 → 88 200 → 99 201 → 222 500 → 444 700 → 666 1000 → 888 1055 → 999 …
18 code-golf  number  date 

2
チェーンワードクロスワードスタイル
チャレンジ 単語のリストが与えられた場合、["Programming", "Puzzles", "Code", "Golf"]クロスワードスタイルの単語を出力します。 プログラミング あなたは z z G l コード ls f アルゴリズム 指定された順序でリストを処理する必要があります。 単語は、水平方向から交互に印刷されます。 2つの単語は、2番目の単語にも存在する最初の単語の最初の文字で交差します。この文字がseond語で複数回出現する場合は、最初の文字を取ります。 例:に ["no", "on"]なります: o n o そしてありません n o n その他の注意事項 リスト内の隣接する単語には、少なくとも1つの共通の文字があります。["Hi", "there"]有効な入力ではありません。 言葉が衝突することはありません。最初の可能な交差点で単語を印刷するのに十分なスペースが常にあります。["Hello", "there", "end", "hello"]有効な入力ではありません マッチングでは大文字と小文字が区別されます。 単語は左および上に展開できます。 水平方向の単語の文字は、1つのスペースで区切る必要があります。 入力リストには少なくとも2つの単語が含まれます。 すべての単語が正規表現に一致します。 [A-Za-z]+ 単語が正しく連鎖している限り、末尾の空白または改行を必要な数だけ印刷できます。 一方、先頭に空白を追加することはできません。一番左に浮かぶ単語の先頭のスペースはゼロで、他の行の先頭スペースは非常に多いため、すべてが正しく並んでいます。 プログラムは、任意の量の単語を処理できる必要があります ルール 機能または完全なプログラムが許可されます。 入出力のデフォルト規則。 標準の抜け穴が適用されます。 これはcode-golfなので、バイト数が最も少なくなります。Tiebreakerは以前の提出です。 テストケース …

1
サンドパイル整数
チャレンジ n入力として正の整数が与えられます。出力は、以下に指定されたルールに基づいて構築されたピラミッドのような砂山である必要があります。 各整数は、砂が円錐形に落ちるように、同じ最初の開始点から下に「落ちます」。 可能な場合は、砂山に当たったときにその直下の数よりも大きい数が右に落ちます。 可能な場合は、砂山に当たったときにその直下の数字よりも小さい数字が左に落ちます。 砂山に当たったとき、その直下の数に等しい数はそのままになります。 数字は、それぞれ下または左/右に移動できる場合、左/右に落ちることができます。つまり、方向に応じて、下または左/右に既に数字がある場合、現在下降している数字は移動しません。 数は、次の位置に移動できないか、床にぶつかるまで、砂山を転がり続けます。 ノート 最初の比較チェックは、最初に検出された整数にのみ適用され、サンドパイルをたどるときに連続する各検出には適用されません。 後続のスペースは大丈夫ですが、後続の改行はそうではありません。 砂山の構造を維持するために必要な場所を除いて、先行スペースや改行はありません。 完全なプログラムまたは機能を作成できます。 入力にはいくつかの組み合わせのみが含まれると想定できます[0-9]。 これはcode-golfで、バイト単位の最短コードは3月のIdesによって勝者としてマークされます 例 1 1 12345 35 124 54321 13 245 555444333222111 2 2 2 135 1345 13445 111222333444555 4 4 4 135 1235 12235 7313623030872935273465247457435345345345350 3 3 3 3 34 355 3644 239475 201277445 020373685575
18 code-golf  math  number 

5
文字の穴を埋める
時々退屈しているとき、私はいくつかのテキストを取り、文字の「穴」を埋めます。しかし、穴を埋めることはあなたができる最も退屈なことではありませんか?私たちはそれを自動化すべきだと思うので、時間をより有効に使うことができます。 標準のコードゴルフ規則が適用されます。 入力 英数字(az、AZ、0-9)およびスペースのシーケンスを含む文字列。 出力 レンダリングされた文字列とその上の穴を含む画像。穴を埋める必要がある限り、人間が読める任意のフォントを使用できます。画像をi.png(png形式で)ファイルに保存するか、単に画像を表示することができます。 画像のプロパティ: 黒いテキスト 白または透明の背景 パディング: 画像の寸法は、テキストの寸法の最大2倍にすることができます パディングは背景と同じ色、白または透明にする必要があります 例 入力: Example text 出力:

6
短縮された整数シーケンスを展開する
整数の略記法の形式で数字のリストを入力すると、その列が完全に出力されます。 短縮シーケンスの整数シーケンス形式 は、その前の数字mよりも少ない桁数ですべての数字nを見つけることによって機能します。Dの桁数としてN、最後のDの桁数Mはすべての数字に置き換えられ 、N。入力例を次に示します。 123 45 6 7 89 200 置換ルールを適用すると、45 <123であるため、最初に45を145に変換します。 123 145 6 7 89 200 同じルールを繰り返し適用すると、次のようになります。 123 145 146 7 89 200 123 145 146 147 89 200 123 145 146 147 189 200 シーケンスはソートされているため(ルールが適用される番号はありません)、これが最終出力です。 あなたはそれを仮定するかもしれません 可能な場合は常に略記法が使用されます。たとえば、入力は 12 3、neverになり12 13ます。 同じ桁数のままで数字が減ることはありません。たとえば、入力はにはなりません333 222。 速記規則を適用しても、シーケンス内の前の番号よりも小さい番号になることはありません。たとえば、入力はにはなりません 123 12。 数値は常に正の整数であり、先頭に0が含まれることはありません(文字列形式を使用する場合)。 展開された完全なシーケンスに重複した番号が含まれることはありません。(ただし、省略形のシーケンスは、例:10 …
18 code-golf 

4
単一損失の整数:単一の要素が欠落した連結シーケンス
シーケンスを結合する方法を定義して、シーケンス内のすべての数値が文字列として連結され、その結果が整数になることを意味します。 [1, 2, 3] -> 123 少なくとも3つの連続する整数の有限シーケンスごとに、シーケンス内の要素を1つだけ欠落し、この欠落した要素がシーケンスの最初または最後の要素ではない可能性がある場合、シーケンスを結合した結果の整数を出力します。これを「単一損失のある整数」と呼んでいます。 [1, 2, 3] -> {1, 3} (missing an element) -> 13 この単一損失整数のシーケンスは、次のサブシーケンス(パーティション?)の結合です。 最初のサブシーケンス{n, n+2}はA032607です。 {n, n+2} -> 13, 24, 35, 46, 57, 68, 79, 810, 911, 1012, ... {n, n+1, n+3} -> 124, 235, 346, ... {n, n+2, n+3} -> 134, 245, 356, …

1
サブシーケンスでシーケンスを知る
前書き あなたとあなたの友人がゲームをプレイしているとします。あなたの友人はいくつかの特定のシーケンスを考えていますnビットのおり、あなたの仕事は彼らに質問することによってシーケンスを推測することです。ただし、質問できる唯一のタイプの質問は、S「シーケンスの最も長い共通サブシーケンスの長さ」と、Sビットのシーケンスです。必要な質問が少ないほど良い。 タスク あなたの仕事は、入力として正の整数nとR長さのバイナリシーケンスを取るプログラムまたは関数を書くことですnです。シーケンスは、整数の配列、文字列、または選択した他の合理的なタイプです。プログラムはシーケンスを出力しますR。 プログラムがシーケンスに直接アクセスすることは許可されていませんR。唯一行うことが許可されています事は、R関数への入力としてそれを与えるためにあるlen_lcs別のバイナリ・シーケンスと一緒にS。関数は、len_lcs(R, S)の最長共通サブシーケンスの長さを返すRとS。これは、両方に(必ずしも連続していない)サブシーケンスとして生じるビットの最長の配列を意味Rし、S。入力のlen_lcs長さは異なる場合があります。プログラムは、この関数Rと他のシーケンスを何度か呼び出してから、Rその情報に基づいてシーケンスを再構築する必要があります。 例 入力n = 4とを考慮してくださいR = "1010"。まず、我々は評価するかもしれないlen_lcs(R, "110")与える、3以来、"110"の最長共通部分列である"1010"と"110"。それRから"110"、ある位置に1ビットを挿入することで得られることがわかります。次に、を試してみることができます。これは、最も長い共通サブシーケンスがとであるため、正しくないためにlen_lcs(R, "0110")戻ります。それから、戻ります。今、私たちはそれを知っています3"110""010""0110"len_lcs(R, "1010")4R == "1010"ので、正しい出力としてそのシーケンスを返すことができます。これには、への3つの呼び出しが必要でしたlen_lcs。 ルールとスコアリング ではこのリポジトリは、ファイルと呼ばれる見つけることができますsubsequence_data.txt彼らは、0と1の間の3つのランダムな浮動小数点数を取って彼らの平均をとることによって生成された75と124の間の長さの100のランダムなバイナリ配列を含むa、その後、フリップa-biasedコインn回。スコアは、これらのシーケンスに対する平均呼び出し回数でありlen_lcs、スコアが低いほど優れています。提出には、呼び出し回数を記録する必要があります。時間制限はありませんが、送信する前にファイルでプログラムを実行する必要があります。 あなたの提出は決定論的です。PRNGは許可されますが200116、ランダムシードとして今日の日付(またはそれに最も近い日付)を使用する必要があります。これらの特定のテストケースに対して提出を最適化することはできません。これが発生していると思われる場合は、新しいバッチを生成します。 これはコードゴルフではありませんので、読みやすいコードを書くことをお勧めします。Rosetta Codeには、最も長い共通サブシーケンスに関するページがあります。これを使用してlen_lcs、選択した言語で実装できます。

12
オブジェクトの体積を計算する
特定の次元セットに基づいてオブジェクトの体積を決定できます。 球体の体積は、半径(r)という1つの数値を使用して決定できます。 円柱の体積は、半径(r)と高さ(h)の2つの数値を使用して決定できます。 ボックスの容積は、長さ(l)、幅(w)、高さ(h)の3つの数値を使用して決定できます。 不規則な三角ピラミッドの体積は、辺の長さ(a, b, c)と高さ(h)の4つの数値を使用して決定できます。 課題は、次の入力のいずれかを与えられたオブジェクトのボリュームを決定することです。 単一の番号(r)または(r, 0, 0, 0)=>V = 4/3*pi*r^3 2つの数字(r, h)または(r, h, 0, 0)=>V = pi*r^2*h 3つの数字(l, w, h)または(l, w, h, 0)=>V = l*w*h 4つの数字(a, b, c, h)=> V = (1/3)*A*h、ここでHeronの式でA与えられます:A = 1/4*sqrt((a+b+c)*(-a+b+c)*(a-b+c)*(a+b-c)) 規則と説明: 入力は整数と小数の両方にすることができます すべての入力ディメンションが正であると仮定できます Piがハードコーディングされている場合は、最大で正確でなければなりません3.14159。 より少ない桁で正確に表現できる数値を除き、出力には少なくとも6桁の有効数字が必要です。3/4として出力することができますが0.75、する4/3必要があります1.33333(より多くの数字はOK) 不正確な値を丸める方法はオプションです 無効な入力の動作は未定義です I / Oの標準ルール。入力は、リストまたは個別の引数にすることができます これはコードゴルフであるため、バイト単位の最短ソリューションが勝ちます。 テストケース: …

15
2つの文字列を結合する
前書き S 1 = a...bおよびS 2 =であるとしましょう..c..。それらを互いの上に配置すると、次のようになります。 a...b ..c.. 両方の文字列.を、リキッドキャラクタ(重複可能)としてマージします。これを取得します。 a.c.b 文字列の一方が他方より長い場合、同じアルゴリズムを適用します。 a.....b ..c.. becomes: a.c...b そして a.....b ..c....... becomes: a.c...b... 2つの文字が衝突する場合、下の文字を使用します。例えば a..b ...c becomes: a..c タスク 空でない2つの文字列が与えられた場合、マージされた文字列を出力します。注、入力にはピリオドと小文字(または、より便利な場合は大文字)のみが含まれると想定できます。 テストケース Input Output a....b ..c... a.c..b aaaaaa bbbbbb bbbbbb ab.ab. b.b.b. bbbab. a.......b c c.......b これはcode-golfであるため、バイト数が最小の提出が勝ちです!
18 code-golf  string 

3
スキャットハンドを評価する
前書き Skatは、3人のプレイヤー向けの伝統的なドイツのカードゲームです。このデッキは32枚のカードで構成されています:エース、キング、クイーン、ジャック、10、9、8、7、4スーツすべて(クラブ、スペード、ハート、ダイアモンド)。 すべてのラウンドで、1人のプレーヤーがソロをプレイし、他の2人が彼と対戦します。ラウンドの開始時に、各プレイヤーに10枚のカードが配られ、残りの2枚のカードはスカットと呼ばれ、真ん中に裏向きに置かれます。ソロプレーヤーは、入札フェーズによって決定されます。これは、このチャレンジで対処しなければならないゲームの一部です。これについては以下で詳しく説明します。 入札フェーズで勝ったプレイヤーがソロプレイヤーになります。彼はスケートを拾い上げ、次に2枚のカード(同じかもしれませんが、他のチームは知らない)を落とし、切り札のスーツを選び、ラウンドが始まります。 1ラウンドは10のトリックで構成されています。トリックに勝ったプレイヤーは、すべてのカードがプレイされるまで次のプレイヤーをリードします。ここではルールを説明しませんが、多くの切り札を持っているのは良いことです。ルールについて学びたい場合は、この投稿の冒頭でリンクしたウィキペディアの記事を確認してください。ただし、このチャレンジには必要ありません。 チャレンジ 2人の息子にスケートの遊び方を教えたいと思います。ルールはそれほど難しくないので、すぐにそれに入ります。彼らに苦労を与える唯一のことは、特に彼らの手のゲーム価値を計算する入札です。そこで、現在のハンドでビッドできる最大のゲーム価値を出力する小さなプログラムを書くことにします。 ゲーム価値の計算 すべてのハンドには特定のゲーム価値があります。それはあなたが持っている連続したジャックの量と、あなたが切り札として選びたいスーツによって決まります。最初の要素であるジャックから始めましょう! ジャックファクター ジャックは常に切り札であり、他のすべての切り札よりも優れています。4つのジャックの強さの順序は次のとおりです。 クラブのジャック(最高) スペードのジャック ハートのジャック ダイヤモンドのジャック(最低) 詳細な説明では、ここで割り当てた番号でそれらを参照します。 ゲームの価値の一部である、あなたの手にあるジャックから得られる何らかの種類の要因があることを覚えていますか?すごい!取得方法は次のとおりです。 このジャックファクターは、トップジャックの数(上記の順序を参照)に1を加えたものです。したがって、4つのジャックがすべてある場合は4 + 1 = 5です。最初の2つのジャックしかない場合は2 + 1 = 3。 あるいは、物事をもう少し複雑にするために、ジャックファクターは、欠落しているトップジャックの数に1を足した数に1を加えたものにすることもできます。最初の3つが欠落しています。3+ 1 = 4です。ここでは、上記の番号付けを使用したいくつかの例を示します。 [1, 4] -> 1 + 1 = 2 [1, 2, 4] -> 2 + 1 = 3 [2, 3, 4] …

4
圧縮された曜日
曜日のリストの入力が与えられると、リストの最短のソートされた表現を出力します。 入力の形式は、2文字のストリングの一つ以上からなる文字列であるSu(日)、 Mo(月)、 Tu(など)、 、We、Th、 FrおよびSa。入力は必ずしもソートされた順序で与えられるとは限りません。 入力を出力形式に変換するには、 入力を日曜日から始まる曜日で並べ替えます(例ThMoSaSuFrTuWe-> SuMoTuWeThFrSa)。 あいまいさを残さない場合は、略語を1文字に減らします。たとえば、最初のSが土曜日になることができなかったため、にSuMoTuWeなるはずSMTWです。これにより、出力がソートされなくなります(Tと同じ)。しかし、ThFrSaなるはずThFS火曜日と木曜日の両方が金曜日前にそれを減らしてくると、TFSあいまいさを作成します。 出力がnowの場合、代わりMTWTFに出力D(「week day s」を表します)。同様に、SSなるはずE週間のために終了。最後に、 SMTWTFSなるべきAために、すべての日。 入力と出力は両方とも単一の文字列でなければなりません。 これはcode-golfであるため、バイト単位の最短コードが優先されます。 テストケース: In Out | In Out -----------------------|-------------------- SuTu STu | SuTuWe STW SuTuSa STuS | SuWeTh SWT TuThSa TTS | TuThSu STT Su Su | Sa Sa WeTh WT | FrTh ThF WeTu TW …

6
RNAをコドンに解析する
前書き RNAはDNAのあまり知られていないいとこです。その主な目的は、翻訳と呼ばれるプロセスを通じて細胞内のタンパク質の生産を制御することです。この課題では、あなたの仕事は、RNAがコドンに分割されるこのプロセスの一部を実装することです。 この課題はテーマ的に関連していますが、翻訳プロセスの別の部分に集中しています。 コドン RNAは、塩基対のアルファベット上の長い文字列であると考えますAUCG。翻訳では、RNAはコドンと呼ばれる3つの塩基対の重複しないチャンクに分割されます。プロセスはから始まり開始コドン、AUGおよびで終わる終止コドンの一つUAA、UAG又はUGA。各コドン(停止コドンを除く)はアミノ酸に対応し、結果として生じるアミノ酸のストリングがタンパク質を形成します。 入力 入力は空でないRNAの文字列です。 出力 出力は、RNAが分割されたコドンのリストであり、適切な形式です。この単純化されたモデルでは、プロセスは出力に含まれる左端の開始コドンから始まりAUGます。終止コドンが検出されるか、RNAがなくなると終了します。入力に開始コドンが含まれていない場合、出力は空のリストになります。 例 入力シーケンスを検討する ACAUGGAUGGACUGUAACCCCAUGC 解析は、AUGインデックス2の左端のから始まります。次のように続きます。 AC AUG GAU GGA CUG UAA CCCCAUGC * ^ ^ ^ + マークされたコドン*は開始コドンであり、マークされたコドン^も出力の一部です。停止コドンにはが付いてい+ます。正しい出力は AUG,GAU,GGA,CUG 短い入力の場合 ACAUGGAUGGACUGU プロセスが行く AC AUG GAU GGA CUG U * ^ ^ ^ 今回は停止コドンに遭遇しないため、塩基対がなくなるとプロセスが停止します。出力は上記と同じです。 ルールとスコアリング 関数の完全なプログラムを書くことができます。最小のバイトカウントが優先され、標準の抜け穴は許可されません。 テストケース GGUACGGAUU -> GGCGAAAUCGAUGCC -> AUG ACAUGGAUGGACUGU …

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