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

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

20
2つの連続した整数が隣接しない順列を与える
チャレンジ 整数n≥4の場合、2つの連続する整数(絶対差1の整数)が互いに隣接しないという性質を持つ整数[0、n-1]の順列を出力します。 例 4 → [1、3、0、2] 5 → [0、2、4、1、3] 6 → [0、2、4、1、3、5] 7 → [0、2、4、1、5、3、6] 代わりに1インデックスを使用できます([0、n-1]の代わりに整数[1、n]を使用)。 コードはnの多項式時間で実行する必要があるため、すべての順列を試して、それぞれをテストすることはできません。

8
ASCII迷路をレンダリングする
見て!ASCII迷路です!スー・クーザー、アメーズボールなど。 +-+-----+---+ | | | | | | ++ | | | | ++ +-+ | | | | +-------+ | | | | | +---------+-+ しかし、しかし、しかし...迷路のすべての部分がどの方向に向かっているのかを考えるのは苦痛です。レイアウトを描きたいだけで、迷路は時間をかけずにすっごくクールになります。 これを単に描くことができたら... ############# # # # # # # ## # # # # ## ### # # # # ######### # # # …

10
インターリーブシーケンス
インターリーブされたシーケンスは、いくつかのシーケンスの任意のマージを表します。 インターリーブシーケンスは、いくつかのリストから1つずつリストに要素を追加し、そのたびにリストから次の要素を選択することで作成できます。したがって、インターリーブシーケンスには、すべてのリストと一貫した順序で、結合されたすべてのリストのまったく同じ要素が含まれます。 1つのリストのインターリーブは、同じリストのみです。 チャレンジ あなたの課題は、任意の数のシーケンスを取り、それらのシーケンスのすべての可能なインターリーブを出力する関数/プログラムを作成することです。 例 Input: [1, 2], [3, 4] Output: [1, 2, 3, 4] [1, 3, 2, 4] [1, 3, 4, 2] [3, 1, 2, 4] [3, 1, 4, 2] [3, 4, 1, 2] Input: [1, 2, 3, 4, 5] Output: [1, 2, 3, 4, 5] Input: [] …

13
コンウェイのプライムゲーム
具体的には、ConwayのPRIMEGAME。 これは、14の有理数のシーケンスを使用して素数を生成するためにJohn H. Conwayによって考案されたアルゴリズムです。 A B C D E F G H I J K L M N 17 78 19 23 29 77 95 77 1 11 13 15 15 55 -- -- -- -- -- -- -- -- -- -- -- -- -- -- 91 85 51 38 …

21
昇順の整数ピラミッド
以下のテキスト、または整数のリストのリストを出力します(詳細は以下)。 0 10 1 20 11 2 30 21 12 3 40 31 22 13 4 50 41 32 23 14 5 60 51 42 33 24 15 6 70 61 52 43 34 25 16 7 80 71 62 53 44 35 26 17 8 90 81 72 63 …
18 code-golf 

1
テトリス戦略
あなたの仕事は、スコアとコードサイズのバランスが取れたテトリス戦略を実装することです。 このバージョンのゲームでは、tetrominoesが回転し、上から20行10列のグリッドにドロップされます。落下中は、回転または水平方向への移動はできません。いつものように、ドロップされたピースは、グリッドの底に達するか、さらに下向きの動きがすでに占有されている正方形との衝突を引き起こすと停止します。 ときにn水平線が完全に埋まる、それらは同時に崩壊、グリッドが補充されたn上部に空行、およびスコアが2だけインクリメントされるN -1点。nそれぞれ1,3,7,15ポイントだ= 1,2,3,4。線が消えると、一部のブロックが空中に浮いたままになることがあります(「重力連鎖反応」はありません)。 現在のピースを希望する場所に表示する余地がない場合、グリッドはクリアされ、現在のピースは無視され、ゲームは次のピースを現在のものとして続行します。そのためのペナルティはありません。 ピースタイプのストリームを読み、それらを回転させる方法とドロップする場所を決定する必要があります。あなたが作品を見ることができます:次のピース(一つだけ)のための先読みが許可されているi+1に応答する前にi、しかし、あなたはの運命を決定している必要がありますiを見て前にi+2。入力の最後の部分を超える先読みは利用できません。 Tetrominoタイプとその回転は、次の表に従ってエンコードされます。 type 0 1 2 3 4 5 6 O I Z J L S T ┌────┬────┬────┬────┬────┬────┬────┐ rotation 0 │## │# │## │ # │# │ ## │### │ │## │# │ ## │ # │# │## │ # │ │ │# │ …

4
ハーフカーディナルサイクリッククインを作成する
ハーフカーディナルサイクリッククインは、2つの状態があり、一方が他方に垂直なサイクリッククインです。 ルール 時計回りまたは反時計回りのどちらの回転を実装するかを決定できます。 回転した後、コード内のギャップはスペースで置き換えて、位置を維持する必要があります。 あなたのプログラムは、ウマのコミュニティ定義を満たさなければなりません。 これはコードゴルフなので、各言語で最短のプログラムが勝ちます。あなたの最初のプログラムは、あなたのバイト・カウントのために使用されています。 標準的な抜け穴は禁止されています。 例 プログラムが次の場合: $_='print';eval その場合、次の反復は次のいずれかでなければなりません。 $ _ = ' p r i n t ' ; e v a l または l a v e ; ' t n i r p ' = _ $ 元のプログラムを出力する必要があります: $_='print';eval プログラムが次の場合: ;$_='; ;$_='; print その場合、次の反復は次のいずれかでなければなりません。 ;; …

26
回転平均
入力整数を指定するとn >= 10、整数のすべての重複排除された回転の平均を出力します。 たとえば、inputの123場合、回転は123(回転なし)、231(1回転)、312(2回転)です。それらの平均は(123 + 231 + 312) / 3または222です。 別の例として、取ります4928。回転は4928、9284、2849、と8492。これら4つの数値の平均を取ると等しい6388.25。 別の例では、入力のために445445、重複除外回転があり445445、454454および544544、したがって出力されます481481。 inputの777場合、重複排除ローテーションは1つだけなので、出力は777です。 ルール 該当する場合、入力/出力が言語のネイティブ整数型に適合すると想定できます。 入力と出力は、任意の便利な方法で指定できます。 完全なプログラムまたは機能のいずれかが受け入れられます。関数の場合、出力する代わりに出力を返すことができます。 標準的な抜け穴は禁止されています。 これはコードゴルフなので、通常のゴルフルールがすべて適用され、最短のコード(バイト単位)が勝ちます。

8
シャッフルブロックで並べ替え
ブロックシャッフルソート ブロックは、ソートシャッフルリストをソートする(むしろ人工的な)方法です。例で示すように、次のように機能します。 [6, 1, 0, 3, 2, 4, -2, -1] Break list into contiguous blocks [6][1, 0][3, 2, 4][-2, -1] Sort each block [6][0, 1][2, 3, 4][-2, -1] Sort blocks lexicographically [-2, -1][0, 1][2, 3, 4][6] Concatenate [-2, -1, 0, 1, 2, 3, 4, 6] 連続ブロックへのパーティションは、任意に選択できます。ただし、ブロックのすべての選択が最後にソートされたリストを生成するわけではありません。 [6, 1, 0, 3, …

30
バブルシートに記入する
今日は私の学校でのAP試験登録日で、必要な情報のページやページを細かくバブリングしている間に、このチャレンジのアイデアが思いつきました。そのため、文字と数字の文字列を指定して、適切に記入されたバブルチャートを出力します。 ルール: 入力文字列内の各文字について、対応する列のその文字を#または@またはその他の適切な記号に置き換えます(言語で処理できる場合、Unicode文字「full_block」:█は本当に良さそうです) スペースは空白の列で表されます(例を参照) 有効な入力は、大文字、数字、スペースのみで構成される文字列です。 入力の長さは、最小1文字、最大32文字です。 出力は大文字でなければなりません 入力長が最大長の32より短い場合でも、プログラムは残りの空白列を出力する必要があります プログラムは、小文字の入力を大文字の場合と同じように処理する必要はありませんが、可能であればボーナスポイントを処理します。 ボードフォーマット: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ 00000000000000000000000000000000 11111111111111111111111111111111 22222222222222222222222222222222 33333333333333333333333333333333 44444444444444444444444444444444 55555555555555555555555555555555 66666666666666666666666666666666 77777777777777777777777777777777 88888888888888888888888888888888 99999999999999999999999999999999 例: CODE GOLF -> …

10
リストを最小限の行列に並べ替える
一意の厳密に正の整数のソートされていないリストが与えられた場合、最小限で2Dマトリックスにソートします。入力リストは複合長であることが保証されています。つまり、出力行列は必ずしも正方形ではなく、サイズがn x mとn,m > 1。 ここでの「最小ソート」とは、次のことを意味します。 リストを昇順で並べ替えます。 出力行列を可能な限りコンパクトにします-行列の次元の合計を最小化し20ます(たとえば、入力として入力要素の5x4場合、aではなくa または4x5output行列が必要です2x10)。 ソートされたリストの最初の要素から始めて、ソートされた数値を可能な限りマトリックスの左上まで圧縮します。 これは、リストを並べ替えてから、マトリックスの対角線に沿って左上からスライスすることと考えることができます。 例: 入力の1..20場合、出力は次のように5x4または4x5マトリックスです。 1 2 4 7 11 3 5 8 12 15 6 9 13 16 18 10 14 17 19 20 1 2 4 7 3 5 8 11 6 9 12 15 10 13 16 18 14 …

14
中国の9 * 9マルチテーブルをゴルフ
次の表を出力します。 一一得一 一二得二 二二得四 一三得三 二三得六 三三得九 一四得四 二四得八 三四十二 四四十六 一五得五 二五一十 三五十五 四五二十 五五二十五 一六得六 二六十二 三六十八 四六二十四 五六三十 六六三十六 一七得七 二七十四 三七二十一 四七二十八 五七三十五 六七四十二 七七四十九 一八得八 二八十六 三八二十四 四八三十二 五八四十 六八四十八 七八五十六 八八六十四 一九得九 二九十八 三九二十七 四九三十六 五九四十五 六九五十四 七九六十三 八九七十二 九九八十一 または、一部の言語が中国語の文字をサポートしていない場合、英語の単語の最初の3文字を使用できます。 OneOneGetOne OneTwoGetTwo TwoTwoGetFou …

7
ロシアのネスティングクイン
より一般的として知られているロシアのネスト人形、マトリョーシカ人形は、自身の小さいバージョンを含む人形、あるその後自体の別のより小さなバージョンを含む、自身の小さいバージョンを含む、それ自体の小型版が含まれ、これそれ自体の小さなバージョンが含まれています...-最後まで、最後のものは空です。例: 今日、あなたの目標は、それ自体がN回含まれるとき、それ自体のN-1個のコピーを含む自身を印刷するプログラムまたは関数を書くことにより、このロシアの伝統をエミュレートすることです。 たとえば、人形プログラムabcdのN = 3プログラムabababcdcdcdは、N = 2プログラムababcdcdを印刷し、元のN = 1プログラムを印刷し、abcd最終的にN = 0(空)を印刷します。これは、Nの合理的な値に対して理論的に機能するはずです。 ルール: プログラムに基づいて人形プログラムを生成するのに役立つTIOプログラムを次に示します。 標準クインルールが適用されます 標準の抜け穴が適用されます 「含む」とは、前のバージョンの中心に直接あることを意味するため、ソリューションには正の偶数バイトが必要です。長さ10のプログラムでは、5バイト目の後に元のコピーが挿入され、10バイト目の後に別のコピーが挿入されます。 単一の末尾の空白が出力で許可されます これはcode-golfなので、目標はN = 1プログラムをできるだけ短くすることです。 コードの説明をいただければ幸いです

25
工場労働者
チャレンジ 工場労働者は通常非常に勤勉です。しかし、彼らの仕事は現在一般的に機械に置き換えられています。 入力として数値を取るプログラムを作成する必要があります。10人の労働者の工場を10回印刷します。毎回、各労働者は1/input「解雇」され、機械に置き換えられる可能性があります。 入力 STDINまたは関数呼び出しからの整数。 出力 工場の10件、通常より多くの労働者がそれぞれ解雇された。 出力形式-工場を印刷する方法 工場は次のようになります。 |0000000000| または |0000011001| パイプは壁を表し、0は作業者を表し、1は機械を表します|0000000000|。したがって、工場の最初の印刷は常にになります。 例 入力:10 出力: |0000000000| //always start off with this |0000000010| //a 1/10 chance means that this worker lost his job |0000010010| |0010010010| |1010010010| |1010110010| |1010110011| |1010111011| |1010111111| |1110111111| 入力:5 出力: |0000000000| //always start here |0000001001| //a 1/5 …

2
ボイドアルゴリズムを実装する
前書き Boidsアルゴリズムは、グループ内の緊急行動の比較的簡単なデモです。作成者のクレイグ・レイノルズが説明するように、3つの主要なルールがあります。 基本的な植毛モデルは、個々のボイドが近くの植生仲間の位置と速度に基づいてどのように操作するかを記述する3つの単純なステアリング動作で構成されます。 分離:地元の群れが混雑しないように操縦します。 アライメント:地元の群れの平均的な方向に向かってください。 結束:地元の群れ仲間の平均的な位置に向かって移動するように操縦します。 各boidは、シーン全体の幾何学的記述に直接アクセスできますが、群れを作るには、周囲の特定の小さな近傍内の群れだけに反応する必要があります。近傍は、ボイドの中心から測定された距離とボイドの飛行方向から測定された角度によって特徴付けられます。この近隣地域の外の群れは無視されます。近隣は、限られた知覚のモデルと考えることができます(濁った水中の魚など)が、群れ仲間がボイドのステアリングに影響を与える領域を定義するものと考える方がおそらく正しいでしょう。 私は物事を説明するときに完璧ではないので、ソースをチェックアウトすることを強くお勧めします。また、彼のサイトには非常に有益な写真がいくつかあります。 チャレンジ ボイド(シミュレートされたエンティティ)の数とフレームの数を指定して、シミュレーションのアニメーションを出力します。 ボイドは赤い円としてレンダリングされる必要があり、円の内側の線はヘディングを示します。これは、ボイドが指している方向です。 各ボイドの角度(レイノルズによる説明)は、完全な300度である必要があります。(360ではない) 各boidの開始見出しと位置は、位置と同様に、ランダムに(ただし、シードされているため、出力はまだ確定されている)必要があります。 ボイドの半径が1の場合、近傍の半径は3でなければなりません。 boidの数は2〜20の範囲です。 フレームの数は1〜5000のいずれかになります アニメーションは、フレームごとに最小10ミリ秒、最大1秒でボイドの数で再生する必要があります。(2ボイド=フレームあたり最大2秒、3ボイド=フレームあたり最大3秒など) 出力アニメーションは、少なくとも5ボイド半径x 5ボイド半径、半分のボイド数の倍数である必要があります。したがって、2ボイドの最小サイズは10ボイド半径x 10ボイド半径であり、3ボイドの最小サイズは15ボイド半径x 15ボイド半径などです。 各boidの半径は、最小で5ピクセル、最大で50ピクセルでなければなりません。 各boidの速度は、1フレームで半径の1/5を超えて移動しないように制限する必要があります。 出力は確定的である必要があるため、同じ入力が複数回実行された場合に同じ出力を生成します。 ボイドが境界に達すると、反対側に戻ります。同様に、各boidの周囲も境界を囲む必要があります。 アルゴリズムの規則 この場合、各Boidの周囲には、Boidの見出しを中心とした300度に及ぶセクターがあります。この「近傍」の他のboidは、「近傍」、または(レイノルズの用語を使用すると)「群れ」と見なされます。 各ボイドは、衝突を回避し、1つのボイド半径と隣接するボイドの快適な距離を維持するために、見出しを調整する必要があります。(これはアルゴリズムの「分離」の側面です。1つの半径をバイパスすることもできますが、ゴムバンドのように、元の位置に戻ります。) 各ボイドは、最初のルールに干渉しない限り、さらに他のボイドの平均ヘディングに近づくように、ヘディングを調整する必要があります。(これはアルゴリズムの「アライメント」の側面です) 衝突が発生しないか、2番目のルールを大幅に妨害しない限り、各ボイドは群れの平均位置に向かって回転します。 この件に関する彼の論文で、彼はこれを次のように説明しています。 シミュレートされた群れを構築するには、幾何学的飛行をサポートするボイドモデルから始めます。衝突回避の反対の力と群れに参加する衝動に対応する行動を追加します。ルールとして簡単に述べますが、優先順位の高い順に、群れのシミュレーションにつながる動作は次のとおりです。 衝突回避:近くの群れとの衝突を回避 速度マッチング:速度を近くの群れと一致させようとします 群れの中心化:近くの群れの近くにとどまることを試みる 動きのより詳細な説明: Boidsアルゴリズムの標準実装では、通常、各ルールの計算を行い、それを一緒にマージします。 最初のルールでは、boidは近傍内の隣接boidのリストを通過し、それ自体と近傍との距離が特定の値よりも小さい場合、boidを隣接から遠ざけるベクトルがboidの見出しに適用されます。 2番目のルールでは、ボイドはその隣の平均ヘディングを計算し、現在のヘディングと平均ヘディングの差のわずかな部分(このチャレンジでは1/10を使用します)を現在のヘディングに追加します。 3番目の最後のルールでは、boidはその近傍の位置を平均し、この位置を指すベクトルを計算します。このベクトルは、ルール2に使用されたものよりもさらに小さい数で乗算され(このチャレンジでは、1/50が使用されます)、見出しに適用されます。 次に、ボイドは見出しの方向に移動します ここ Boidsアルゴリズムの有用な擬似コードの実装があります。 入力と出力の例 入力: 5、190(5ボイド、190フレーム) 出力: 勝利基準 これはcode-golfであるため、バイト単位の最小のソリューションが優先されます。

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