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

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

5
2D空間でオブジェクトを追跡する
説明 この課題のタスクは、n × nn×nn×n空間で特定のオブジェクトを追跡するプログラムまたは機能を考案することです。 I / O プログラムには3つの入力が与えられますが、これらは適切な方法で取得できます。 n飛行機の側面のサイズになります。(したがって、n = 5n=5n=5場合、飛行機はなります)。常に奇数の整数であると仮定できます。5 × 55×55×5n sオブジェクトの開始位置になり、座標のペアとして指定されます。(x 、y)(x,y)(x, y) D順序付けられたペアのベクトルになります。Dの形式に従います。ここで、は、基本的および主要な方向に対して常にのいずれかであり、は「ティック」の数の整数。D = [ (d0、t0)、(d1、t1)、。。。、(dn、tn)]D=[(d0,t0),(d1,t1),...,(dn,tn)]D = [(d_0,t_0),(d_1,t_1),...,(d_n,t_n)]dkdkd_kt k'N', 'NE', 'E', 'SE', 'S', 'SW', 'W', 'NW'tktkt_k これらの入力が与えられると、プログラムは平面内のオブジェクトの追跡を出力する必要があります。 ルール 出力には平面の境界が含まれている必要があります。例えば: -21012 + +┌─────┐┐ 2││ 1││ 0││ 1││ 2││ -└─────┘ 空の平面の例です。上記および横の数字は参照用であり、印刷する必要はありません。5 × 55×55×5 空白でない限り(または空白としてレンダリングする限り)、境界に任意の文字を使用できます。選択するキャラクターは、平面全体を区切る必要があります。つまり、それらの間に隙間がないようにする必要があります。 許容されるプレーンには次のものがあります。 ┌──┐.... ---- +-+ …

9
誰もが友達になれない
孤立文字とは、同じタイプの隣接する文字を持たない文字(改行以外)です。隣接する文字は左、右上、または下にありますが、対角線にはできません。たとえば、次のテキストHは分離されています。 Ybb YH% %%%% 他のすべての文字は、それぞれに隣接する同じタイプの他の文字が少なくとも1つあるため、分離されていません。 あなたの仕事は、文字列を入力として受け取り、分離された文字の数を決定するプログラムを書くことです。 得点 あなたの答えは、2つの指標によって採点されます。1つ目は、プログラム内の分離文字の数です。これを最小限に抑えることを目指してください。2番目は、プログラムのバイト数です。これも最小限に抑える必要があります。プログラムサイズは、最初の基準のタイブレーカーとして機能します。 追加の規則 印刷可能なASCII範囲とプログラムで使用する文字の入力をサポートする必要があります。 改行は、改行文字または改行に続く改行のいずれかと見なすことができます。 妥当な形式で入力できます。これには、行のリストが含まれます。 テストケース Ybb YH% %%%% 111 Aaaab uuu yyybbb 222 A 111 qqWWaaww 000

9
中秋節のギャンブルゲーム
明日は中秋節であり、その休日の精神で、私たち(ia門の人々)が休日中にプレイするギャンブルゲームを紹介します! ルール ゲームは6つの6面のサイコロでプレイされます。数字の異なる組み合わせは、4と1に特に重点を置いて、異なるランクを持っています。あなたの仕事は、6個のサイコロを振ってハンドをランク​​付けするプログラム/関数を書くことです。ランクは次のとおりです(ルールを少し変更/簡略化しました)。 中国人だけがこの挑戦をすることができると思います!わかりました、ここにいくつかの英語の説明があります。 0:4つの4と2つの4。 1:四つんばい。 2:6個。 3:4と1を除くあらゆる種類の6。 4:5 4。 5:4以外のあらゆる種類の5。 6:4 4。 7:ストレート。(1-6) 8:3 4。 9:4を除くあらゆる種類の4。 10:2 4。 11:1 4。 12:なし。 入力 6個の数字、6個の数字の配列、または1〜6の6個のサイコロの値を表す6個の数字の文字列 出力 各ランクが1つの出力で示される限り、プログラム/関数はランクを示すために何かを返したり出力したりできます。例 0〜12、1〜13などの数字を使用します。 例(0-12を出力として使用) [1,1,1,1,1,1]->2 [1,4,4,4,1,4]->0 [3,6,5,1,4,2]->7 [1,2,3,5,6,6]->12 [3,6,3,3,3,3]->5 [4,5,5,5,5,5]->5 これはコードゴルフなので、最短バイト数が勝ちです!
11 code-golf  game 

1
地雷原の丁寧な近視の酔ったボット
タイトルが示すように、この問題は@NPのPolite Near-Sighted Drunk Botに半インスパイアされています 貧弱なボットは原点のデカルトグリッド上に配置され、1分ごとに4方向(上、下、左、右)のいずれかに1ユニット移動します。 n分後、グリッド上のすべての潜在的な地雷がアクティブになり、それらの上に自分自身を見つける可能性のある貧しいボットを殺します。鉱山は、式| y | = | x |を満たすすべての整数座標に配置されます。 チャレンジ あなたは提供されますn個の入力として、地雷の爆発の前に、分の数を、出力として、あなたはボットである確率見つけなければならない死者を。 入力:nを表す自然数。 出力:ボットが死んでいる確率をp / qとします。ここで、pとqは比較的素数の整数です(qは0にはできませんが、pはできます)。出力p。 ルール アルゴリズムを指数関数的またはそれ以上の時間で実行してはなりません。理想的には、多項式時間以下で実行する必要があります。 アルゴリズムnは、妥当な時間内に20未満の入力を処理できる必要があります(難しすぎる場合は調整可能)。 これはコードゴルフの挑戦です。 与えられたnのすべての可能性を反復することは、答えとして受け入れられることはほとんどありません。 テストケース 1->0 2->3 4->39 6->135 8->7735 10->28287 n = 6の計算例 U、D、R、およびLの4つの可能な移動があります。使用できるパスの合計数は4 ^ 6または4096です。線y = xに沿って着陸する4つの可能なケースがあります:x、y = ±1; x、y =±2; x、y =±3; またはx = y =0。最終的に(1,1)、(2,2)、および(3,3)になる方法の数をカウントし、それらに4を掛けて他の象限を考慮し、追加します。これは、最終的に(0,0)になる方法の数です。 ケース1:ボットは(3、3)で終了します。ボットがここで終了するためには、3回の正しい移動と3回の移動が必要です。言い換えると、ここに到達する方法の総数は、RRRUUUシーケンス内の文字を再配置する方法であり、6 = …

16
多数の素数
1234567891011121314151617などの(10を基数とする)大きい数を指定すると、その中の素数の「サブ番号」を見つけます。 素数の「サブ番号」は、連続した数字列(入力から取得)であり、素数(10を底とする)を表します。 入力:数値(文字列、ファイル、または任意のもの)。 出力:何らかの形で区切られたすべての素数(リスト、ファイル、コンマ区切りの文字列のいずれか...)クラッシュ。 例えば > 2、3、23から1234 6542 - > 5、2 14 - > [..空の出力] これはコードゴルフです。最短のプログラムが勝ちます! [編集]:追加ルール、プログラムを説明する必要があります!誰もがゼリーに堪能ではない:)

5
タマネギ、またはタマネギではない?
The Onion(警告:多くの記事はNSFWです)は、伝統的なニュースメディアをパロディ化する風刺的なニュース組織です。2014年、The OnionはClickBole(警告:NSFWも頻繁に)を立ち上げました。これは、BuzzFeedのような「clickbait」サイトをパロディ化する風刺的なニュースWebサイトです。Poeの法則のおかげで、人々が風刺を意図していることを知らずに、The OnionまたはClickHoleの記事の見出しを読んで、それらが真実であると信じることはかなり一般的です。その逆は、ばかげて聞こえる本当のニュース記事でも起こります。 この混乱は自然にゲームに役立ちます-ニュースの見出しを考えれば、それが風刺であるかどうかを推測してみてください。この課題は、まさにそれをプログラムで行うことです。 ニュースの見出し(印刷可能なASCII文字とスペースのみで構成される文字列)が与えられた1場合、見出しが風刺であるか0、そうでない場合に出力します。スコアは、正しい出力の数を見出しの総数で割ったものになります。 通常どおり、標準の抜け穴(特にテストケースの最適化)は許可されていません。これを実施するために、200の隠されたテストケース(The Onionから100、Not The Onionから100)のセットでプログラムを実行します。ソリューションが有効であるためには、パブリックテストケースのスコアより20パーセントポイント以下しかスコアを取得してはなりません。 テストケース このチャレンジのテストケースを考え出すために、The Onion subreddit(The OnionとClickHoleなどの子サイトからの記事が掲載されている)から25件の見出しを選び、Not The Onion subreddit(実際のニュース記事から)風刺のような音が掲載されています)。見出しに加えた唯一の変更は、「空想的な」引用を通常のASCII引用に置き換え、大文字を標準化することでした。他のすべては元の記事の見出しから変更されていません。各見出しは独自の行にあります。 オニオンの見出し Trump Warns Removing Confederate Statues Could Be Slippery Slope To Eliminating Racism Entirely 'No Way To Prevent This,' Says Only Nation Where This Regularly Happens My Doctor Told Me I Should …

4
元の増加セットシーケンス
バックグラウンド 順序の元の増加セットシーケンスは、次の条件を満たす整数セットシーケンスとして定義されます。NNNS1、S2、⋯ 、SnS1、S2、⋯、SnS_1,S_2,\cdots,S_n 各は、空でないサブセットです。S私S私S_i{ 1 、2 、⋯ 、N}{1、2、⋯、N}\{1,2,\cdots,N\} 以下のための、、すなわち、任意の二つの連続したセットは、共通の要素を持ちません。1 ≤ I &lt; N1≤私&lt;n1\le i<nS私∩ Si + 1= ∅S私∩S私+1=∅S_i \cap S_{i+1} = \varnothing 以下のための、平均(平均値)の厳密に以下のものよりなる。1 ≤ I &lt; N1≤私&lt;n1\le i<nS私S私S_iSi + 1S私+1S_{i+1} チャレンジ 正の整数を指定するとN、順序の最大の元増加セットシーケンスの長さを出力しNます。 テストケース これらは、Project Eulerユーザーthundreによる結果に基づいています。 1 =&gt; 1 // {1} 2 =&gt; 2 // {1} {2} 3 =&gt; 3 // …

5
最小中心対称化
局所的に関連。 目的:正の整数の行列を考える、出力最小中心対称行列含まM(このマトリクスは同様に、非正の整数を含んでいてもよいです)。MMMMMM 中心対称行列は、2次の回転対称性を持つ正方行列です。つまり、2回回転しても同じ行列のままです。たとえば、中心対称マトリックスの左上要素は右下要素と同じであり、中心より上の要素は中心より下の要素と同じです。便利な視覚化はここにあります。 より正式に、行列所与、正方行列を生成するNようにNが中心対称であり、M ⊆ N、および他の正方行列が存在しないKようDIM K &lt; DIM Nは。MMMNNNNNNM⊆NM⊆NM\subseteq NKKKdimK&lt;dimNdim⁡K&lt;dim⁡N\dim K<\dim N サブセットである B(表記: A ⊆ B)であれば、各値の場合にのみ、 A iは、j個のインデックスに現れる Bはiは+ I '、J + J '整数のいくつかのペアのための(I '、J ')。AAABBBA⊆BA⊆BA\subseteq BAi,jAi,jA_{i,j}Bi+i′,j+j′Bi+i′,j+j′B_{i+i^\prime,j+j^\prime}(i′,j′)(i′,j′)(i^\prime, j^\prime) 注:一部のマトリックスには複数のソリューションがあります(または[[3,3],[1,2]]として解決される[[2,1,0],[3,3,3],[0,1,2]]など[[3,3,3],[1,2,1],[3,3,3]])。有効なソリューションの少なくとも1つを出力する必要があります。 テストケース input example output [[1, 2, 3], [4, 5, 6]] [[1, 2, 3, 0], [4, 5, 6, 0], [0, …

21
Minecraft言語ファイルアップデーター
1.13では、Minecraft言語ファイルは単純な複数行のkey = value形式からJSONに切り替えられました。 チャレンジ JSON文字列を返す元の形式から変換するプログラムを作成します。入力は任意の標準入力メソッドを使用して取得できます。出力は標準出力メソッドのjsonである必要があります 元の形式には、キー=値のペアを持つ行が含まれます。たとえば tile.dirt.name=Dirt advMode.nearestPlayer=Use "@p" to target nearest player build.tooHigh=Height limit for building is %s blocks key = valueで1つの大きなJSONオブジェクトに変換する必要があります { "tile.dirt.name": "Dirt", "advMode.nearestPlayer": "Use \"@p\" to target nearest player", "build.tooHigh": "Height limit for building is %s blocks" } いくつかの詳細 正しいキー/値のペアのみが含まれている限り、任意の有効なJSONが許可されます。Minecraftが許可するため、末尾のコンマが許可されます。 エスケープする必要があるのは引用符のみです。(1.13より前の言語ファイルには、改行、バックスラッシュ、またはその他のJSONを破壊するものはありませんでした) 空行は無視する必要があります 行には、1つのイコール テストケース 入力: tile.dirt.name=Dirt …
11 code-golf  game  json 

2
パンの怠zyな袋
私は小麦、ライ麦、大麦、穀物、フランスパンを提供するパン屋で働いていますが、パン屋は少し奇妙です-彼はパンをランダムに積み重ね、時には棚の最後を空にします。 毎日、同じ顧客がやって来て、それぞれのパンを1つずつ求めますが、難しいのは、彼が生殖嫌悪者なので、彼のバッグをいっぱいにすると、連続した選択で隣接する2つの棚からパンを取ることができないことです。 隣接する棚の間を歩くには1秒かかります。忙しい店です。パンをランダムに構成する場合は、一意のパンを1つずつ取得するのにかかる時間を最小限に抑えたいと思います。任意の棚で開始および終了できます。 今日の注文がのW B W G F R W場合、可能なパスは0, 3, 5, 1, 4で、合計で12秒です:abs(3-0) + abs(5-3) + abs(1-5) + abs(4-1) = 12 (1, 2, 3, 4, 5パンは隣接する棚から連続して選択されるため、機能しません。) の場合B W B G B F B R B W B F、可能なパスは1, 3, 5, 7, 10、合計9秒です。 マネージャーは常に可能な解決策があることを確認するので、悪い入力をキャッチすることを心配する必要はありません。彼は通常、ファイルで注文を送信しますが、必要に応じて、STDINに入力するか、別の方法で読み取ることができます。デフォルトのI / Oルールに従って、プログラムにその時間と同様に最適なパスのインデックスを出力してほしい。 要するに: 5種類のパン。 パンの順序は、ランダムな順序と長さの文字列として表示されます。 一意のパンを1つずつ選択する必要があります。 …

13
スコアリングブリスコラ
前書き ブリスコラは、イタリアで最も人気のあるカードゲームの1つです。それは、ブリッジのようなトリックをとるカードゲームです。ブリスコラは、その奇妙なポイントシステムで有名です。このチャレンジでは、2枚のカードが与えられた場合、最初のカードのスコアがブリスコラのポイントシステムの2番目のカードより多いか少ないか、同じポイントかを出力します。 チャレンジ ブリスコラはイタリアのトランプのデッキでプレイされます。デッキには40枚のカードがあり、カップ、剣、クラブ、コインの4つのスーツのそれぞれに1〜10枚あります。私たちはこの挑戦の訴訟を無視します。カード2〜7は数字カードで、カード8、9、および10はフェイスカードです。最高から最低までのカードのランキングは次のとおりです。 +------------------------+-------------+ | Cards, by Rank | Point Value | +------------------------+-------------+ | Ace (1) | 11 | | Three (3) | 10 | | King (10) | 4 | | Knight (9) | 3 | | Jack (8) | 2 | | Numeric Cards (2, 4-7) | …

13
最初最後最後最初
チャレンジ タスクは簡単です。配列と最初と最後の値が与えられた場合:最初の後の最後の最初と最後の前の最初の最後を返します。 または単純に:配列var1、var2を指定します。 配列の例: [var2、var1、、var2、、var2、var1、var2、] 戻り値: 配列に表示される最初のvar1の右側にある最初のvar2のインデックス。 [VAR2、第VAR1、第VAR2、第VAR2、VAR1、第VAR2、】 配列に表示される最後のvar2の左側にある最初のvar1のインデックス。 [var2、、2番目のvar1、、var2、、var2、最初のvar1、最後のvar2、] 入力 2つの異なる正の整数 正の整数の配列 出力 回答のインデックス、順番 ルール 配列には各変数が少なくとも1つ含まれます(最小サイズは2) 入力が機能すると仮定する 例:0, 1 [1, 0]または同様の失敗 IOは柔軟です 例 Input First = 2; Last = 4; [0, 2, 4, 2, 3, 1, 4, 0, 1, 2, 4, 9] Output 2, 9 Input First = 4; …

2
キャメルアップカップ:AIボードゲームトーナメント
キャメルアップカップ2k18 このチャレンジでは、半人気のボードゲームCamel Upをプレイします。 キャメルアップ!ラウンドに勝つ、ゲームに勝つ、またはゲームに負けるためにラクダに賭けているプレイヤーがいるボードゲームです。これらの決定のそれぞれは、いくらかのお金を得るチャンスであなたに報酬を与えます、それは勝者を決定するものです。プレイヤーは、確率、ゲームの状態、および対戦相手のテナントを使用して決定を下す必要があります。これはプレイヤーがプレイする方法を示す短いビデオです。 遊び方 プレイ方法の大まかなアイデアを以下に示します。ビデオのいずれかを見ると、視覚効果があるため、より役立つ場合があります:) あなたの番には4つの選択肢があります。 ラクダを動かします。これは、移動していない人からラクダを選び、1〜3スペース間で移動します。あなたは1コインを取得します。5頭すべてのラクダが移動するとラウンドが終了し、その後すべて移動できます トラップを配置します。これはラウンドの終わりまでボードに残ります。+ 1 / -1トラップを選択します。ラクダまたはラクダのスタックがその上に着地した場合、それらは+ 1 / -1移動し、コインを受け取ります。正方形0にトラップを配置することはできません。ラクダがいる場所にトラップを配置することはできますが、その後に着くラクダにのみ影響します。 ラウンド勝者の賭け。ラウンドの勝者に賭けます。あなたは、あなたがそのラクダに賭ける1/2/2/3であるかどうかに応じて5/3/2/1を獲得します。 ゲームの勝者/敗者。ゲームの最後に誰が最初か最後かを賭けます。あなたがそのラクダに賭けたのが1/2/2/3だったかどうかに基づいて8/5/3/1/1(私は思う)を得る ノート: 5匹のラクダがいます。0から2までの位置からランダムに開始します。 ラクダを動かすと(これをトリガーするものについては上記を参照)、1〜3マス移動します。それらが別のラクダと正方形に配置される場合、それらは他のラクダの「上」に配置され、ラクダスタックが作成されます。ラクダが移動する場合は、ラクダスタック上でラクダの上にあるすべてのラクダを移動します。スタックの最上部にあるラクダが先頭にいると見なされます +1トラップに着地した場合(これをトリガーするものについては上記を参照)、1マス先に移動します。標準のスタッキングルールが適用されます。 ただし、-1トラップをヒットすると、1マス後ろに移動します。あなたは行くの下であれば、その広場にあるラクダのスタック。 ラクダがスクエア16に達すると、ゲームは終了します。これにより、ラウンドエンドとゲームエンドトリガーが直ちに呼び出されます。 ゲームの勝者/敗者のベットは、ラクダごとに1回のみ行うことができます。つまり、あなたが勝つためにラクダに賭けることができないとゲームを失います チャレンジ この課題では、4人のプレーヤーをプレイするPython 3プログラムを作成し、勝者はCamel Upのすべての栄光のゲームを取ります あなたのプログラムは以下を含むゲームステートを受け取ります: camel_track:ラクダの位置 trap_track:トラップの場所([trap_type(-1,1)、player]の形式のエントリ) player_has_placed_trap:プレイヤーがこのラウンドでトラップを配置したかどうかを通知する配列 round_bets:このラウンドで行われたベットの配列。フォームの[キャメル、プレーヤー] game_winner_bets / game_loser_bets:ラクダがゲームに勝つか負けるために作られたベットプレイヤーの配列。ベットしたプレイヤーではなく、ベットしたプレイヤーの価値のみを見ることができます。あなたは誰に賭けているかを知ることができます。#フォーム[キャメル、プレーヤー] player_game_bets:game_winner_bets / game_loser_betsの別の表現。繰り返しますが、ボットが行った賭けだけを見てください。 player_money_values:各プレイヤーが持っている金額を示す配列。 camel_yet_to_move:ラクダがこのラウンドを移動したかどうかを示す配列。 ゲームステートの上部には次のものもあります: player:プレーヤー番号(0〜3)を示す整数。 プレイヤーが返すものの構文は次のとおりです。 [0]:キャメルを移動 [1、trap_type、trap_location]:トラップを配置 [2、projected_round_winner]:ラウンド勝者のベットをする [3、projected_game_winner]:ゲームの勝者を賭ける [4、projected_game_loser]:ゲーム敗者のベットをする これはmove(player、gamestate)メソッドでラップする必要があります …

14
子孫のピラミッドを描く(追加)
チャレンジ 負でない整数のシーケンスを指定して、子が両方の親数の合計である子孫ピラミッドを出力する関数を作成します。 結果は、tabを使用して文字列として出力されます\t。 注:各行の末尾のタブは不要です 1\t\t2\t\t3\n\t3\t\t5\t\n\t\t8\t\t results in 1 2 3 3 5 8 オプションとして、空の位置をスペースとして使用して、結果を配列として出力できます。 [[1,,2,,3], [,3,,5,], [,,8,,]] 例: 与えられた4,5,7,3,4,2出力: 4 5 7 3 4 2 9 12 10 7 6 21 22 17 13 43 39 30 82 69 151 ルール 標準のコードゴルフ規則が適用されます 入力は、任意のセパレータまたは配列を使用した文字列にすることができます 行頭または行末の改行とタブは許可されます(ただし、出力が逆ピラミッドである限り必須ではありません) テストケース Input: 1,3,5 1 3 5 …
11 code-golf 

2
文字列をブロック分割
インスピレーション。 l数字で構成されるリストを考えてみましょう。iリストのインデックスでブロック操作を定義し、l3つの連続した要素をiin lから最後まで移動する動作にします。 例: l, i (1-indexing) -&gt; l (after applying block operation at index i) [1,2,3,4,5], 1 -&gt; [4,5,1,2,3] [1,2,3,4,5,6,7], 3 -&gt; [1,2,6,7,3,4,5] 0と1のみで構成されるリストを考えると、ブロック操作のみを使用して、0が先頭に、1が末尾になるようにリストを分割することが課題です。出力は、リストに適用される順序のインデックスでなければなりません。 これはリスト[1,0,1,0]では不可能であるため、リストの長さは少なくとも5であることが保証されています。 テストケース(1-indexing) (他の有効な出力があります) [1,1,1,0,0] -&gt; [1] [0,1,0,1,0] -&gt; [1,2,1,1] [0,0,0,1,1,1,0,0,0] -&gt; [4] このスクリプトを使用して、さらにテストケースを生成します。(入力のみ。rplc ' ';','一部がために使用されるR E PL A C出力でカンマでEスペース) 受賞基準 コードチャレンジが主な勝利基準であり、最速のコードがタイブレーカーです。特に: テストケース(n_elem= 500、random_seed= {secret value})を使用した最短の出力長(ブロック操作の最小数)のソリューションが勝ちです。テストケース(n_elem= …

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