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

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

12
放火犯の子守Findを探す
放火犯が町を歩き回って、非常に特定のパターンに従って犠牲者を選ぶことを想像してください(あるいは、庭の周りを飛んで、非常に特定のパターンに従って花粉を取るために花を選ぶ蜂を想像してください)。町がN×N行列であるとします。ここで、Nは2以上の整数です。放火犯は左上隅から開始し、家の前にM個のスポットを順番に設定します(Mは現在いる家の数です)。各火災の後に移動する方向を順番に変更します。東⟶南⟶西⟶北⟶東⟶南...など。子守唄放火犯のMは、町を出るようにするMの値です(つまり、憎むべきことを止める前に最後に訪れる家)。これは例で理解しやすい方法です。たとえば、次のマトリックスをご覧ください。 3 2 3 2 7 3 1 4 1 6 2 5 3 1 1 4 4 3 2 4 1 1 1 1 1 左上隅から開始するので、M = 3(X放火犯の現在位置と前位置をマークします): X 2 3 2 7 3 1 4 1 6 2 5 3 1 1 4 4 3 2 4 1 …

9
2D配列の最大の長方形
入力 ボード:次のような文字の2Dコンテナ(マトリックス、リストのリストなど): ["B", "C", "C", "C", "C", "B", "B", "C", "A", "A"], ["B", "A", "C", "B", "B", "A", "B", "B", "A", "A"], ["B", "C", "B", "C", "A", "A", "A", "B", "C", "B"], ["B", "B", "B", "A", "C", "B", "A", "C", "B", "A"], ["A", "A", "A", "C", "A", "C", "C", "B", …

24
バージョン番号を比較する
ソフトウェアを公開するとき、バージョン番号を割り当てます。また、ユーザーは一部のソフトウェアの最新バージョンに更新したい場合があります。それで、どのバージョンをより新しくすべきかを判断する時が来ました。 入力 2つのバージョン番号を文字列として入力します。 この課題の文脈では、ドットで結合されたいくつかの数字であるバージョン番号のみをサポートします。 バージョン番号は、数字(0〜9)とドット(.)のみを含む文字列です。 ドットは、バージョン番号の最初/最後の文字ではありません。 ドット間には数字が必要です。2つのドットが連続して表示されることはありません。 バージョン番号の数値はすべて2 16未満です。 出力 入力されたバージョン番号を比較し、最初のバージョン番号が2番目のバージョン番号よりも大きい/等しい/小さいかどうかを出力します。次のプレゼンテーションのいずれかを選択できます。 正の数/ゼロ/負の数を使用します。ゼロは等しいことを意味します。 3つの定数の異なる値を使用します。 比較する このセクションで説明されているアルゴリズムを実装する必要はありません。このアルゴリズムで同じ出力が得られる限り、提出は有効です。 バージョン番号は、ドットで結合されたいくつかの10進数です。まず、2つのバージョン番号を番号の配列に分割しました。 配列の末尾にゼロを追加して、同じ長さにします。 最初の項目から最後の項目までを比較します。 2つの配列項目が異なる場合、数字が大きいほどバージョン番号が大きくなります それらが同じ場合、次の項目の比較を続けます。 配列内のすべてのアイテムが等しい場合、2つのバージョンは等しくなります。 テストケース version1 version2 result 2 1 > 1.0.0 1 = 1.0 1.0.0 = 1.2.42 1.2.41 > 1.1.56789 1.2.0 < 1.10 1.2 > 1.20 1.150 < 18.04 18.4 = 7.010 …

12
圧縮されたBrain-Flakを展開する
このチャレンジは、2018年4月のLotMチャレンジの一部として、およびBrain-flakの2回目の誕生日に投稿されました Brain-Flakプログラムをエンコードする最も効率的な方法は何かを考えていました。有効な文字は8つしかないため、行うべき明らかなことは、各文字を3ビットシーケンスにマップすることです。これは確かに非常に効果的ですが、それでも非常に冗長です。Brain-flakコードには、エンコードを短縮するために利用できる機能がいくつかあります。 ニラッドはすべて2つの一致するブラケットで表され、実際には2ではなく単一の情報単位として機能します。各ブラケットを1バイト文字に置き換えると、データを失うことなくエンコードがはるかに小さくなります。 これはそれほど明白ではありませんが、モナドの終了バイトも冗長です。'?'次のスニペットで文字が何を表すか推測できると思いますか? {(({}?<>?<>? 入力が有効なbrain-flakコードであると仮定した場合、それらの疑問符ごとに1つのオプションしかありません。これは、閉じるモナド文字を明確に使用して、すべての閉じ括弧を表すことができることを意味します。これには、文字セットを小さく保つという追加の利点があります。これは、ハフマンエンコーディングを使用する場合に非常に役立ちます。以来近いモナドの文字が最も可能性の高いワイドマージンによって最も一般的な文字になります、非常効率的である、単一ビットで表現することができます。 これらの2つのトリックにより、次のアルゴリズムを介してbrain-flakコードを圧縮できます。 モナドのすべての閉じ括弧をに置き換え|ます。または、言い換えると、開始一致の前にないすべての閉じ括弧をバーに置き換えます。そう... (({})<(()()())>{}) になるだろう (({}|<(()()()||{}| すべてのニラッドを閉じブラケットで置き換えます。したがって、何も含まれていない一致した括弧は、次のマッピングを使用します。 () --> ) {} --> } [] --> ] <> --> > これで最後の例は次のようになります。 ((}|<()))||}| 末尾の|文字を削除します。バーの総数は({[<文字の総数と等しくなければならないことがわかっているため、最後にバーがない場合は推測できます。次のような例: ({({})({}[()])}) になるだろう ({(}|(}[) 今日の課題は、このプロセスを逆にすることです。 文字のみを含む圧縮されたbrain-flakの文字列が与えられた(){}[]<>|場合、元のbrain-flakコードに展開します。入力は常に有効なブレインフラックに拡張されると想定できます。これは、入力のプレフィックスに文字を|超える({[<文字が含まれないことを意味します。 入力には末尾の|文字は含まれません。これらはコンテキストから推測する必要があります。 通常どおり、完全なプログラムまたは関数のいずれかを送信でき、入出力形式は許容されます。また、これはcode-golfであるため、ソースコードの長さ(バイト単位)によってコードがスコアリングされます。スコアが小さいほど優れています。 テストケース ここにいくつかのテストケースがあります。さらに必要な場合は、このpythonスクリプトとBrain-Flak Wikiを使用して独自のテストケースを生成できます。これは、これらのテストケースの大部分が由来する場所です。 #Compressed code #Original code ()))) (()()()()) ([([}()||||(>||{(})|>|}{((<}|||>}|}>} ([([{}(())])](<>)){({}())<>}{}{((<{}>))<>{}}{}<>{} ({(}|(}[)|||} ({({})({}[()])}{}) (((()))||(](((}}||(}([(((}))||||(]((}}|}|}}|||]||]|[))||(}))|}(}|(}]]|} ((((()()()))([]((({}{}))({}([((({}()())))]([](({}{}){}){}{})))[]))[])[()()])({}()()){}({})({}[][]){}

8
相互攻撃の女王
8x8のチェス盤を2つの異なる値で表し、1つの値を空の正方形、もう1つの値をクイーンとします。次の例では、空の四角形として0を使用し、クイーンとして1を使用します。例えば: によって与えられます 1 0 1 1 1 0 0 0 1 0 1 0 1 0 1 1 1 0 1 0 1 1 0 1 0 1 0 1 0 1 0 0 0 1 1 0 0 1 0 1 1 0 0 0 1 0 0 0 …

1
三次元チェス
誰かの不可解な決定を守るために、人々はしばしば、その人は誰の頭をも越えて「3次元チェス」をしていると言います。さあ、3次元のチェスをするチャンスです! ルール 3Dチェスには多くのバリエーションがありますが、この課題のために私は自分で作成しました。私のバージョンは通常のチェスと同じですが、ピースが正方形ではなく立方体の中にあり、動きの次元が増えている点が異なります。この挑戦を簡単にするために、ポーンとキャスティングがありません。 ピースムーブメント (コンパスの方向は、標準のチェス盤で発生する動きを指し、上下は3Dチェス盤で垂直に動くことを指します)。 キング -与えられたターンに行くことができる26の正方形を持っています:N、NE、E、SE、S、SW、W、NW。上、下、上/下+コンパス方向の1つ。 女王 -王と同じ方向に移動できますが、彼女が望む方向に移動できます。 ルーク -6方向に移動できます:N、E、S、W、上、下、 ビショップ -8つの三角形の移動方向:NE +上/下、SE +上/下、SW +上/下、NW +上/下 ナイト -2つのスペースを1つの軸に移動し、次に1つのスペースを別の軸に移動します。通常のチェスのように、ナイトは他の駒を飛び越えることができる唯一の駒です。 ピーステスター このスニペットを使用して、3Dボード上でさまざまなピースがどのように動くかを確認します(ヒント:*Testピースからの絶対距離に基づいて、正方形が有効な動きであるかどうかをすばやく判断するためのJS の機能を確認してください): const color = "Black"; const pieces = ["N","B","R","Q","K"]; const urls = ["https://image.ibb.co/gyS9Cx/Black_N.png","https://image.ibb.co/dknnzc/Black_B.png","https://image.ibb.co/kb3hXx/Black_R.png","https://image.ibb.co/hGO5kH/Black_Q.png","https://image.ibb.co/jApd5H/Black_K.png"]; var dragPiece; var size = 3; var index = 0; function start() { Array.prototype.add = function(a) …

19
単純な文字列の反射
文字列内の文字のリフレクションを定義することから始めましょう: のようにスペースのない明確な小文字のアルファベットの文字列が与えられた場合、文字列abcdefg内の文字の反射をc(他の文字の順序を変更せずに)文字列内の新しい場所に移動するように定義しますその右側は、左側の文字数です。 したがって、文字の反映はcにabcdefgなりますabdecfg。説明:の右側にc4つの文字があり、現在、の左側に4つの文字がありcます。 さらにいくつかの例: 文字eを反映すると文字myfriend列が形成されますmyefrind 文字aを反映axyzすると、文字列が形成されますxyza。 文字bを反映abcすると、文字列が形成されますabc。 文字dを反映dすると、文字列が形成されますd。 文字eを反映efすると、文字列が形成されますfe。 詳細については、またはいくつかのテストケースを試してみることを、ここに私はC ++で書いた(やや長い)プログラムです。 チャレンジ 明確に小文字の文字列が与えられた場合、各文字をアルファベット順に調べて、文字列に「反映」します。 明確化:文字列の文字はfromでa-z、スペースはなく、文字は一意であり、文字列は少なくとも1文字、最大26文字です。 例 入力:dcba。出力:dcba。 理由:最初aに、文字列内の文字がアルファベットの中で最初に来るように反映します。取得しadcbます。次に、bアルファベットの次の文字を反映して、を取得しbadcます。その後、反映c取得するにはcbad、次にd取得しますdcba。 入力:myface。出力:fyecma。 ヒント:文字を順番に確認しa, c, e, f, m, yます。 入力:a。出力:a。 入力:acb。出力:bac。 入力:cwmfjordbankglyphsvextquiz。出力:ieabhqzugdltkfnvpjxsormycw。 得点 入力と出力は、任意の便利な方法で指定できます。 完全なプログラムまたは機能のいずれかが受け入れられます。関数の場合、出力する代わりに出力を返すことができます。 標準的な抜け穴は禁止されています。 これはコードゴルフなので、通常のゴルフルールがすべて適用され、最短のコード(バイト単位)が勝ちます。 投稿後約100時間を受け入れます。 現在の勝者 コードスニペットを表示 <style>body { text-align: left !important} #answer-list { padding: 10px; width: 290px; float: left; } #language-list …
26 code-golf  string 

6
放射線検出器!
放射線耐性プログラムとは、コードの文字が削除された場合でも、プログラムは同じように機能するプログラムです。この質問のために、いつ照射されたかを検出するプログラムを作成します。 プログラムや関数、とき書く任意の単一のバイトが削除され、結果としてプログラムが出力されますが、そのバイトだけそのバイトを。(他のバイトを出力しない限り、そのバイトを複数回出力できます) ルール: プログラムには、少なくとも2つの異なるバイトが含まれている必要があります。(0だけのソリューションはありません;) 元のプログラムが何をするかは関係ありません 独自のソースコードを読む必要はありません。 コードは、異なるバイト数でスコアリングされ、最大バイトが勝ちます。たとえば、abc= 3ポイント、ababba= 2ポイント、abc勝ちです。 タイブレーカーはバイト数が少なく、その後に送信時間が早くなります がんばろう!

1
ジョリーゲリマンダリング
バックグラウンド 米国には、ゲリマンダリングに対する独特の愛情があります。特定の投票結果を予測するための選挙区の意図的な操作です。つい最近、最高裁判所に持ち込まれたゲリマンダー事件がありました。ジェリーマンダリングは、特に人種に関連する場合、違法と判断され、地区の路線を変更する必要が生じます。 自治体の長方形の地図(2次元配列)を指定すると、地区の線を描画して、パーティが最も表現しやすくなります。つまり、ゲリマンダーになります。すべての自治体には2つの政党が0あり1ます。マップは、いずれか0または1その上の正方形で構成されます。以下にマップの例を示します。 チャレンジ マップを地区にグループ化して、1パーティが少なくとも入力で指定された地区の数を取得できるようにします。 入力 入力は、マップ、描画する地区の数、および1パーティーが勝つ必要がある地区の最小数(最小スコア)で構成されます。 出力 出力は、地区の地図になります。各地区はアルファベットの大文字で一意に構成されます。はい、これは26以上の地区がないことを意味します。 入力されたパーティが十分な地区に勝つ可能性のある出力がない場合、次のいずれかです 印刷してみました... 選挙結果により党が取り返しのつかないほど負傷したため、致命的なエラー または両方 ルール(非常に重要) すべての地区は連続している必要があります 地区には他の地区がない場合があります 各地区には、少なくとも4つのノードが必要です。入力はルールと一致します。つまりnumber_of_districts * 4、マップには少なくともノードがあります。 各政党のスコアは、政党が過半数を占める地区の数です 地区の0sと1sの数が同じ場合、どちらの当事者もその恩恵を受けません 通常の不正行為のルール これはcode-golfなので、バイト単位の最短コードが優先されます。 テストケース 1. Input 1. Output 2. Input 2. Output 3. Input 3. Output districts: 5 Image and map districts: 3 Image below districts: 3 fatal error min …

30
直交ステップ
2Dマトリックス内をナビゲートすることは一般的な問題です。私たちは何度も見てきましたが、また見ます。それでは、将来の私たちを助け、2Dマトリックスで可能な8つのステップすべてを生成する最短のソリューションを開発しましょう。 チャレンジ コードは、次の8ペアの-1,0,1を任意の順序で出力する必要があります。 (0,1) (0,-1) (1,0) (-1,0) (1,1) (1,-1) (-1,1) (-1,-1) ルール 入力はありません。 出力順序は関係ありません 出力は柔軟です。数字のペアは区別できる必要があります これはcode-golfなので、バイト単位の最短回答が勝ちます

22
希釈整数和
正の整数は、2進展開に2ビットを挿入することで希釈できます0。これは、- nビット数にn-1希釈があることを意味し、必ずしもすべてが異なるわけではありません。 たとえば、12(または1100バイナリで)、希釈は 11000 = 24 ^ 11000 = 24 ^ 10100 = 20 ^ この課題では、元の数を除いて、すべての希釈の合計を取ります。の場合12、24, 24, 20結果の合計を取得する68ため68、の出力もそうである必要があります12。 チャレンジ n > 1入力として正の整数を指定すると、上記で説明したように希釈された合計を出力/返します。 例 in out --- --- 2 4 3 5 7 24 12 68 333 5128 512 9216 ルール 入力と出力は、言語のネイティブ整数型に適合すると仮定できます。 入力と出力は、任意の便利な形式で指定できます。 完全なプログラムまたは機能のいずれかが受け入れられます。関数の場合、出力する代わりに出力を返すことができます。 標準的な抜け穴は禁止されています。 これはコードゴルフなので、通常のゴルフルールがすべて適用され、最短のコード(バイト単位)が勝ちます。

3
Googleの子供向けコーディングに関するDoodle:すべてのレベルを解決する最短プログラム
今日のGoogle Doodleは、50年の子供のコーディングを祝うことです。目標は、すべてのニンジンを食べることができるように、小さなウサギの道をプログラムすることです。ブロックには4つのタイプがあります(下の図を参照)。 左から右へ: O("...", k)=オレンジ色のピース:これらはfor、プログラムのk回実行されるループ"..."です。 G =緑のピース:可能であれば1歩先に進み、そうでなければ何もしない Bl =青いピース:右に曲がって同じブロックにとどまる Br =青い部分:左に曲がって同じブロックにとどまる 上記のコードは次のように書くことができます O(O(G G Br, 4) Bl Bl, 23) 各ブロック(G, Bl, Br, O(...,k))は1単位としてカウントされるため、このプログラムの長さは7 kですO。 6つのレベルがあります。レベルを完了するには、すべてのニンジンを食べる必要があります。プログラムが完全に実行されていなくても問題ありません。最後のニンジンを食べるとレベルが直接終了します。 すべてのレベルで4種類のブロックがすべて使用可能であると想定しています。 あなたの仕事は、ゲームのあらゆるレベルを解決する単一のプログラムを見つけることです。 ブロック単位の最短プログラムが勝ちます。 各レベルのスクリーンショット: レベル1: レベル2: レベル3: レベル4: レベル5: レベル6:

30
遅延ドロップソートを実装する
この課題は、すでにドロップソートについて説明しています。しかし、私はちょっと怠け者だと私は本当に私の唯一の配列は、もう少しソート以前よりもする必要があり、それはソートする必要はありませんすべての方法を。 ドロップソートでは、その前の要素よりも小さいすべての要素をドロップします。レイジードロップソートでは、厳密に先行する要素よりも小さい要素をすべて削除します。 以下に例を示します。次の配列を検討してください。 8 6 9 9 7 2 3 8 1 3 前の要素よりも小さい要素をすべてマークしましょう。 8 6 9 9 7 2 3 8 1 3 ^ ^ ^ ^ どちら3もマークされていないことに注意してください8。それらはすべて、左側の単一の要素よりも大きくなっています。 アルゴリズムを完了し、マークされた要素を削除すると、次のようになります。 8 9 9 3 8 3 それは基本的にもっとソートされているように見えます。ちょっと。私は怠け者。 あなたがすでに推論したかもしれないあなたの仕事は、このアルゴリズムを実装することです。 入力は1〜9の少なくとも1つの正の整数の配列であるため、数字のストリングも使用できます。 これはcode-golfで、最少バイトが勝ちます! 追加のテストケース: 1 1 1 2 3 1 2 3 5 …

24
ファイル許可
ファイル許可 コードゴルフ UIL-コンピューターサイエンスプログラミング2018年地区の無料回答質問「カーラ」からの適応。 前書き UNIXライクなオペレーティングシステムでは、各ファイル、ディレクトリ、またはリンクは「グループ」のメンバーである「ユーザー」によって「所有」され、「」などの10文字の文字列で表される特定の「許可」を持ちます。 drwxrwxrwx」。最初の文字は「d」、「-」、または「l」(ディレクトリ、ファイル、またはリンク)であり、「読み取り、書き込み、実行」権限を示す「rwx」値のセットが3つ続きます。最初のセットはユーザーの権利、中央のセットはグループの権利、3番目はそのオブジェクトに対する他の全員の権利です。 これらの権利のいずれかに対して拒否された許可は、「r」、「w」、または「x」の代わりに「-」で表されます。たとえば、サンプルのディレクトリパーミッション文字列は「drwxr--r--」で、ユーザーには完全なディレクトリ権限を示しますが、グループメンバーおよびその他すべてには「読み取り専用」権限を示します。 各「rwx」の組み合わせは、8ビット値(0〜7)で表すこともできます。最上位ビットは読み取り許可、次の最上位ビットは書き込み許可、最下位ビットは実行許可を表します。 チャレンジ 文字「D」、「F」、または「L」で構成され、その後に664などの3桁の8進整数値が続く4文字のコード文字列がある場合、許可値を表す結果の10文字の文字列を出力します示された。 入力 プログラムまたは関数は、標準入力(4文字が入力され、オプションで改行が続く)から入力を読み取るか、入力を引数として渡すことができます。 プログラムは大文字または小文字の入力を受け入れますが、一貫している必要があります(すべての入力が大文字であるか、すべての入力が小文字である)。 出力 プログラムは、上記で指定した正確な形式で示された許可値を表す結果の10文字の文字列を印刷する必要があります。末尾の空白は許可されます。 テストケース In:F664Out:-rw-rw-r-- In:D775Out:drwxrwxr-x In:L334Out:l-wx-wxr-- In:F530Out:-r-x-wx--- In:D127Out:d--x-w-rwx スコアリングとルール 標準の抜け穴は禁止されています。 標準ルールが適用されます。 コードをテストするためのリンクと説明を提供してください。 これはcode-golfなので、バイト単位の最短回答が勝ちです!
26 code-golf 

30
前の回答を印刷してください!
これは、各回答が前の回答に基づいて作成される回答連鎖の課題です。何も入力せずに、このスレッドへの最新の送信を出力します。 最も古いものでソートし、最後のページにスキップして最新の回答を見つけることを強くお勧めします。 得点 勝者はポイントシステムに基づいて選択されます。 各ユーザーからのすべての有効な提出には1ポイントが付与されます。 しかし、ここに楽しい部分があります: 提出物が前回の回答(出力)より短い(バイト単位)場合、提出物のスコアにバイト数の差が掛けられます。 これは言われています、あなたの答えは前のものより短くする必要はありません。 勝者は、合計ポイント数が最も多いユーザーであり、このスレッドで2週間非アクティブになった後に選択されます。 ルール 新しい回答はそれぞれ一意の言語である必要があります。回答を投稿する前に以下のリストを確認してください。 投稿したばかりの場合は、少なくとも1時間待ってから新しい回答を送信する必要があります。 連続して2つの回答を提出することはできません。新しい回答を投稿する前に、さらに2回の提出を待つ必要があります。 もちろん、標準的な抜け穴は許可されていません Python 1、Python 2、Python 3などの異なるバージョンの言語は、異なる言語と見なされます。 テキストを出力するためのstdoutまたは言語の標準への出力 コードはエラーを生成してはいけません あなたが自分で書いている時間に誰も回答を送信していないことを確認してください。もしそうなら、コードを調整して再送信してください。 回答が有効であることを確認してください 出力は前の回答であり、前の回答のみです。出力が以前の言語で意図したとおりに実行される場合は、空白と改行を使用できます。 出力をチェックして、正しく実行されることを確認してください。 ノート 物事を面白くするために難解な言語の使用を奨励したい また、テストと検証を簡単にするために、TIOリンクの追加を奨励したいと思います。 開始 非常に単純なPython 1スクリプトを投稿することで、この課題を開始します。 print 1 次の提出では、このコードを正確に印刷する必要があります。 書式設定 投稿を次のようにフォーマットしてください: Answer Number - (language) [code] (preferably a TIO link) [Submission Score] [notes, explanations, whatever you …

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