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

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


2
サブセットファクターの検索
正の整数の有限セットがあると想像してみましょう。このセットは、セット内に存在する各整数がスキャントロンまたはパンチカードのように塗りつぶされた点の線として表すことができます。たとえば、セット{1,3,4,6}は次のように表すことができます。 *.**.* *はセットのメンバーを表し、セットのメンバーで.はない整数を表します。 これらのセットには「要因」があります。yがxのコピーから構築できる場合、ゆるくxはyの因子です。より厳密には、因子の定義は次のとおりです。 xがyの因数であるのは、yが互いに素な集合の集合であり、そのすべてがオフセット付きのxである場合のみです。 ファクターを呼び出すの*.*は、2つのコピーのエンドツーエンドのコピーで非常に明確に構成されているためです。*.**.**.* *.**.* ------ *.*... ...*.* 要因はエンドツーエンドである必要はありませんが、それ*.*は要因でもあります*.*.*.* *.*.*.* ------- *.*.... ....*.* 要因は重複することもあります。これは*.*、次の要因でもあります**** **** ---- *.*. .*.* ただし、1つの数値で1つの数値を複数回カバーすることはできません。たとえば、の要因で*.*はありません*.*.*。 より複雑な例を次に示します。 *..*.**..***.*.* これには*..*.*要因があります。以下のように、3つのインスタンスを並べたことがわかります*..*.*。 *..*.**..***.*.* ---------------- *..*.*.......... ......*..*.*.... ..........*..*.* 仕事 合理的な表現によるセットが与えられると、入力の要因であるすべてのセットが出力されます。 任意の値でインデックスを作成できます(つまり、入力に存在できる最小の数値を選択できます)。また、入力セットには常にその最小値が含まれると想定することもできます。 これはコードゴルフの質問ですので、できるだけ少ないバイトでこれを行うようにしてください。 テストケース これらのテストケースは手作業で行われましたが、大きなテストケースでは1つまたは2つの間違いがある可能性があります * -> * *.*.* -> *, *.*.* *.*.*.* -> *, *.*, *...*, *.*.*.* ****** -> …

8
xorspaceの探索
整数セットのxorspaceは、開始整数を通常のビット単位のxor演算子(^)と組み合わせることによって取得できるすべての整数のセットです。たとえば、のxorspace (8, 4)は(0, 4, 8, 12)次のとおりです。0は4 ^ 4、12 は4 ^ 8であり、他の数値には到達できません。この定義では、開始番号が常に含まれることに注意してください(たとえば、4は4 ^ 4 ^ 4です)。 あなたの目標は、入力として非負整数のリストを取り、xorspaceの要素数を出力する最短のプログラムを書くことです。 標準的な抜け穴は禁止されています。 入力と出力は、通常の形式のいずれかです。入力は、有効で、空ではなく、重複がないことが保証されています。 コードはすべてのテストケースを1日以内に処理できる必要があります。 テストケース Input: 0 Output: 1 Input: 6 Output: 2 Input: 8 4 Ouput: 4 Input: 0 256 Output: 2 Input: 256 259 3 Output: 4 Input: 60 62 94 101 115 …

2
クイン/エラークインポリグロット
タスクは簡単です。2つの言語で実行できるプログラムを作成します。言語1では通常のクイン(独自のソースコードを出力)、言語2ではエラークイン(独自のソースコードと同じエラーメッセージを生成)である必要があります。 これはcode-golfであるため、最短の有効な送信(バイト単位)が優先されます。 ルール: 言語は任意に似ている場合があります。スーパーセット/類似バージョン/類似方言は禁止されていません。 エラークインのルールは、エラークインの作成と同じです。。

11
テイクバックカウントアルゴリズム
数え方を学んでいる子供は、数字の連続をよく知っていますが、それらの連続を適切にまとめることができないようです。 たとえば、彼らは言うかもしれません: 1,2,3,4,7,8,9,10 時々、子供たちはいくつかの数字をスキップしたことに気づき、戻ってきます: 1,2,3,4,7,8,5,6,7,8,9,10 これは明らかに優れたパターンです。それらを識別する必要があります。 これらのリストを識別するには: リストの最小値Mと最大値を特定しNます リストをステップスルーします。現在の数がその右側のリストのメンバー以上である場合、現在の数を削除します。 残りのリストにからMまでのすべての数値が含まれている場合N、真の値を返します。 入力リストには少なくとも1つの要素が含まれると想定できます。すべての整数が負でないと仮定できます。 テストケース: 真実: 0 10 0 0 0 1 0 1 0 1 2 3 4 5 6 7 8 9 10 0 1 2 3 0 1 2 3 0 1 2 3 4 5 5 0 1 1 …

9
奇数オッズを見つける
妥当な入力メソッドによって正の整数の順不同のコレクションが与えられた場合、奇数個の奇数要素を持つ(つまり、合計が奇数である)すべてのサブコレクションを返します。 これはコードゴルフなので、プログラムのバイトカウントを最小限に抑えることを目指してください。 一部の言語には順序付きコレクション(リスト、配列、ベクトルなど)のみがあるか、重複を許可する順序なしコレクションがないため、言語コレクションに関係なく順序付きコレクションを使用できますが、重複コレクションは出力しないでください。異なる順序([2,3]およびなど[3,2])。適切な順序で出力できます。 テストケース [2,3,7,2] -> [[3],[7],[2,3],[2,7],[2,2,3],[2,2,7]] [2,4,6,8] -> [] [4,9] -> [[9],[4,9]]

12
おおよその相関を見つける
S長さのバイナリ文字列を考えnます。インデックス作成1、我々は計算することができハミング距離の間S[1..i+1]とS[n-i..n]すべてのためにiから順に0しますn-1。等しい長さの2つのストリング間のハミング距離は、対応するシンボルが異なる位置の数です。例えば、 S = 01010 与える [0, 2, 0, 4, 0]. これは0マッチ0、01ハミング距離が2に10、010マッチ010、0101 4にハミング距離があり1010 、最終的に01010自分自身にマッチします。 ただし、ハミング距離が最大1である出力のみに関心があります。したがって、このタスクではY、ハミング距離が最大で1であるかどうかを報告し、N場合そうでないます。したがって、上記の例では次のようになります [Y, N, Y, N, Y] すべてを反復するときに取得されるsとsのf(n)個別の配列の数になるように定義するYN2^nS長さの異なる可能性のあるビット文字列をn。 仕事 n開始時の増加1場合、コードを出力する必要がありますf(n)。 回答例 のn = 1..24正解は次のとおりです。 1, 1, 2, 4, 6, 8, 14, 18, 27, 36, 52, 65, 93, 113, 150, 188, 241, 279, 377, 427, 540, 632, 768, 870 …

15
発音番号
概念 数字を覚えるのは難しい場合があります。単語を覚える方が簡単かもしれません。大きな数字を記憶するために、私はそれらをリーツピークのような方法で発音する方法を作りました。 ルール 各数字は、最初に対応する文字に置き換えられます。 0 => O 1 => I 2 => R 3 => E 4 => A 5 => S 6 => G 7 => T 8 => B 9 => P 置換後、発音を改善するために2つの追加処理が行われます。 2つの子音の間に、a Uが追加されます。 2つの母音の間に、a Nが追加されます。 例/テストケース 512431 => SIRANENI 834677081 => BENAGUTUTOBI 3141592 => ENINANISUPUR 1234567890 …
14 code-golf  number 

30
配列のスカラーをランダム化します
配列にはすべての数値を0-n含める必要があります。数字は繰り返さないでください。ただし、それらはランダムな順序でなければなりません。 ルール すべての標準コードゴルフ規則と標準抜け穴が禁止されています 配列は擬似ランダムに生成する必要があります。可能なすべての順列は、等しい確率を持つ必要があります。 入力 n メタのI / O投稿で許可される方法。 出力 スクランブルされた数値の配列0-n。
14 code-golf  random 

2
あのポリゴンは誰ですか?
トポロジカルサーフェスを表す便利で便利な方法は、基本ポリゴンを使用することです。多角形の各辺は別の辺と一致し、平行または反平行のいずれかになります。たとえば、これはトーラスの基本的なポリゴンです。 これがトーラスである理由を理解するために、ポリゴンが紙であると想像できます。適切な表面を作成するために、対応するエッジが矢印が同じ方向に並ぶように紙を曲げます。トーラスの例では、紙を円柱に丸めて、2つの青いエッジ(ラベルb)を接続することから始めます。次に、チューブを取り出して曲げて、2つの赤いエッジ(a)が互いに接続するようにします。トーラスとも呼ばれるドーナツ型にする必要があります。 これには少し注意が必要です。エッジの1つが反対方向に向いている次のポリゴンで同じことをしようとすると: トラブルに巻き込まれる可能性があります。これは、このポリゴンが3次元に埋め込むことができないクラインボトルを表しているためです。このポリゴンをクラインボトルに折り畳む方法を示すウィキペディアの図を次に示します。 ご想像のとおり、ここでのタスクは、基本的なポリゴンを取得し、どのサーフェスであるかを判断することです。4面ポリゴン(処理する必要がある唯一のサーフェス)には、4つの異なるサーフェスがあります。 彼らです トーラス クラインボトル 球 射影平面 これは画像処理ではないので、入力として画像を受け取るとは思わないが、代わりに便利な表記法を使用して基本ポリゴンを表現します。上記の2つの例で、同じ文字(aまたはb)で対応するエッジに名前を付け、ねじれたエッジにねじれを示す追加のマークを付けたことに気付いたかもしれません。時計回りに進んで、上端から開始して各端のラベルを書き留めると、各基本ポリゴンを表す表記を取得できます。 たとえば、提供されたトーラスはababになり、クラインボトルはab - abになります。私たちの挑戦では、ねじれたエッジをネガでマークする代わりに、文字を大文字にします。 仕事 文字列が与えられると、それが基本ポリゴンを表すかどうかを判断し、その適切な表面に対応する値を出力します。サーフェスに正確な名前を付ける必要はありません。それぞれが4つのサーフェスの1つを表す4つの異なる出力値を必要とし、5番目の値が不適切な入力を表します。すべての基本的なケースは「簡単なテスト」セクションで説明されており、すべての車は、1つまたは無効な車と同形です。 ルール 側面には常にaおよびbのラベルが付けられるわけではありませんが、常に文字でラベルが付けられます。 有効な入力は、4つの文字で構成され、2つのタイプと2つのタイプがあります。有効な入力を得るには、常に正しいサーフェスを出力する必要があります。 無効な入力は拒否する必要があります(サーフェスを表す4つの値のいずれも出力しません)。4つのサーフェスと区別できる限り、入力を拒否するときに何でもできます。 これはコードゴルフなので、目標はソースコードのバイト数を最小限にすることです。 テスト 簡単なテスト abab Torus abAb Klein Bottle abaB Klein Bottle abAB Projective Plane aabb Klein Bottle aAbb Projective Plane aabB Projective Plane aAbB Sphere abba Klein Bottle abBa Projective …

19
フィボナッチ化された除数を合計します!
有名なフィボナッチ数列はF(0) = 0; F(1) = 1; F(N+1) = F(N) + F(N-1)(このチャレンジでは0から始まります)です。 あなたの挑戦:考えるとnは、出力のすべての合計Dすべての除数のためのフィボナッチ数番目日間のN番目のフィボナッチ数。より正式な表記を希望する場合は、 入力:正の整数n 出力:合計 たとえば、検討してくださいn=4。F(4) = 33の約数は1と3なので、出力はになるはずですF(1) + F(3) = 1 + 2 = 3。 用n=6、F(6) = 8および8の除数1、2、4、8、であるので、出力されますF(1) + F(2) + F(4) + F(8) = 1 + 1 + 3 + 21 = 26。 テストケース: 1 => 1 2 => …

15
最大相互共素因数分解
定義 唯一の正の公約数がの場合、2つの数値は互いに素です1。 数字のリストは、そのリスト内の数字のすべてのペアが互いに素である場合、相互に素です。 数の因数分解 n、積がである数値のリストですn。 仕事 正の数nを指定するnと、次を含まない最大長の相互に素な因数分解を出力します1。 例 の場合n=60、答えは[3,4,5]で3*4*5=60あり、それ以外の互いに素な因数分解1は長さが以上であるため3素因数分解は、分解の長です。 ルールと自由 適切な入出力形式を使用できます。 出力リストのエントリをソートする必要はありません。 テストケース n output 1 [] 2 [2] 3 [3] 4 [4] 5 [5] 6 [2, 3] 7 [7] 8 [8] 9 [9] 10 [2, 5] 11 [11] 12 [3, 4] 13 [13] 14 [2, 7] 15 [3, 5] …

8
到達可能な番号
定義 オイラーファイ関数(aka totient function):正の数を取り、特定の数と互いに素である特定の数より小さい正の数を返す関数。として示されφ(n)ます。 到達番号:正の整数が存在する場合x、その結果をφ(x) == n、その後nで到達可能。 仕事 与えられた正の整数が到達可能かどうかを判断する関数/プログラムを作成します。 入力 妥当な形式の正数。数は言語の能力の範囲内であると想定できます。単項入力が受け入れられます。 出力 到達可能な数値用と到達不能な数値用の2つの一貫した値。2つの値は、一貫している限り、何でもかまいません。 テストケース 以下の到達可能な番号100は次のとおりです。 1、2、4、6、8、10、12、16、18、20、22、24、28、30、32、36、40、42、44、46、48、52、54、56、58、 60、64、66、70、72、78、80、82、84、88、92、96 (OEISのA002202) ルール 標準の抜け穴が適用されます。 勝利基準 これはcode-golfです。最も少ないバイト数での送信が優先されます。 参照資料 オイラーファイ関数 OEIS A002202

25
分数を追加する
入力と同じ長さの2つの空でないリストを取り、次のことを行うプログラムまたは関数を作成します。 最初のリストの要素を使用して分子を取得し、 2番目のリストの要素を使用して分母を取得し、 (2/4=>1/2)「+」で区切られた、簡略化後の結果の小数部を表示します。 最後の小数部の後に「=」と加算結果を表示します。 例: 入力 [1, 2, 3, 3, 6] [2, 9, 3, 2, 4] 出力 1/2+2/9+1+3/2+3/2=85/18 ルールについて リストの要素は正の整数になり、 要素はスペースで区切ることができます。たとえば:1/2 + 2/9 + 1 + 3/2 + 3/2 = 85/18is ok、 末尾の改行は許可されますが、 リストは、上記以外の形式で取得することもできます(例:(1 2 3 3 6)または{1;2;3;3;6}など)。 1表すことができ1/1、 印刷する代わりに、適切な文字列を返すことができます。 間違った入力を処理する必要はありません。 最短コードが勝ちます。

23
2つの6面ダイスの100ロールの合計
2つの6面ダイスがあるとします。ペアを100回ロールして、各ペアの合計を計算します。各合計が発生した回数を印刷します。合計がロールされなかった場合、その特定の合計がロールされなかったことを識別するゼロまたは何らかの方法を含める必要があります。 出力例:[3、3、9、11、15、15、15、11、15、7、8、3] 合計がロールされた回数は、合計インデックス-2で表されます。 この例では、合計2回が3回([2-2])、合計3回が3回([3-2])、合計が4回9回([4-2])などでした。オン。個々のサイコロの出目が合計に達することは問題ではありません(5と2は6と1と同じ合計としてカウントされます) データの読み取り方法を説明する限り、「Uい」出力は問題ありません(末尾のゼロの負荷、余分な出力、データの奇妙な表現方法など)。

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