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

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

18
関連する数字グループを見つける
最近、私の評判はでした25,121。各数字のグループ化(つまり、コンマで区切られた数字)が完全な正方形であることに気付きました。 あなたの挑戦は、非負の整数Nと単項ブールブラックボックス関数 f:Z * → Bが与えられると、Nの桁グループに適用されるfの各値が真である場合は真の値を返し、それ以外の場合は偽です。 右側から数を3のグループに分割することにより、数字のグループ化を見つけることができます。一番左のグループには、1、2、または3桁があります。いくつかの例: 12398123 -> 12,398,123 (3 digit groupings) 10 -> 10 (1 digit grouping) 23045 -> 23,045 (2 digit groupings) 100000001 -> 100,000,001 (3 digit groupings) 1337 -> 1,337 (2 digit groupings) 0 -> 0 (1 digit grouping) 追加のルール この関数は、ブール値(trueおよびなどfalse)、1sおよび0s、または真偽値にマッピングできます。回答でサポートされている形式を指定してください。 入力として整数、または整数文字列(数字で構成される文字列)を使用できます。 プログラムまたは関数を作成できます。 デジタルグループを関数fに渡す場合、不要な先行ゼロをすべて削除する必要があります。例えば、F、に適用した場合N = 123000のように実行されるべきであるF(123)およびF(0)。 …

9
巡回差分セットの検証
循環差分セットは、一意のプロパティを持つ正の整数のセットです。 ましょうnセットで最大の整数になります。 Let rは、0より大きく、以下の任意の整数(セット内にある必要はありません)n/2です。 してみましょうkことが解決策の数にとセットの任意のメンバーです。各ソリューションは順序ペアです。(また、多くの言語での実装とは異なり、このバージョンのモジュロは、追加することで負の数を正にすることに注意してください。)(b - a) % n = rab(a,b)n 最後に、これが循環差分セットである場合にのみ、の値はのk選択に依存しませんr。つまり、すべての値はr、上記の一致に対して同じ数の解を与えます。 これは、次の例で説明できます。 Cyclic difference set: {4,5,6,8,9,11} 0 < r <= 11/2, so r = 1,2,3,4,5 r=1: (4,5) (5,6) (8,9) r=2: (4,6) (6,8) (9,11) r=3: (5,8) (6,9) (8,11) r=4: (4,8) (5,9) (11,4) since (4-11)%11=(-7)%11=4 r=5: (4,9) (6,11) (11,5) の各値にrは同じ数の解(この場合は3)があるため、これは循環差分セットです。 入力 …

12
パリンドローム部分文字列からパリンドロームをつなぎ合わせる
文字列を考えるとl、全てのパリンドロームのサブストリングを見つけるpのl(重複し、単一の文字列を含む)を。次に、すべての部分文字列をp有効な回文に再配置します(複数の正解がある場合があります)。p単一のパリンドロームに再配置できない場合は、プログラムに未定義の動作(エラー、スタックオーバーフロー、終了、ジョンドヴォルザークの首吊り/早すぎる殺人など)が含まれている可能性があります。 例 有効なテストケース l = anaa p = ['a', 'n', 'a', 'a', 'aa', 'ana'] result = anaaaaana or aanaaanaa or aaananaaa l = 1213235 p = ['1', '2', '1', '3', '2', '3', '5', '121', '323'] result = 1213235323121 l = racecar p = ['r', 'a', 'c', 'e', 'c', 'a', 'r', …

8
乱れた再配置
あなたの仕事は、行に分割される(改行文字で分割される)ときに、行のすべての配置が1からnの間の異なる数を出力するようにコンピュータープログラムを書くことです!(nは行の総数です)。2つの異なる配置で数値を出力することはできません。すべての配置でこの範囲の数値を出力する必要があります。nがあるので!プログラムの行を配置する方法。これは、各番号が1回の再配置で出力されることを意味します。 たとえば、Pythonプログラム print 1;""" print 2;""" 2つの取り決めがあります print 1;""" print 2;""" そして print 2;""" print 1;""" 最初の出力1と2番目の出力2。 使用している言語の標準である出力形式を使用できます。なんらかのボイラープレートを想定してはいけません。言語が主張している形式を回避する必要がある場合、この課題はより興味深いと思います。 得点 スコアはプログラムの行数になり、スコアが高いほど良くなります。あなたは、出力番号に選択することが0にn個!-1あなたが好きならば。

14
与えられたサイズのすべての正方形部分行列を生成します
整数Mの正方行列と、Mのサイズより厳密に小さい別の正の整数nが与えられます。あなたの仕事は、サイズnのMのすべての正方形部分行列を生成することです。 この課題のために、正方形のサブマトリックスはMに含まれる隣接する行と列のグループです。 入力/出力フォーマット 他の合理的な形式を自由に選択できます。これらはほんの一例です。 入力 ネイティブマトリックスタイプのマトリックス(言語にマトリックスがある場合) 2D配列(それぞれが1行/ 1列に対応する1D配列の配列) 1D配列(行列は常に正方形であるため) 文字列(スペースを選択しましたが、これを悪用しないでください)など 出力 マトリックスのマトリックス。 各要素(3Dリスト)が行/列の部分行列を表す4D配列。 3D配列。各要素(2Dリスト)はサブマトリックスを表します。 結果の部分行列などの文字列表現。 スペック 入力としてMのサイズを選択することもできます。少なくとも2であることが保証されています。 出力の方向は任意です。サブマトリックスを列のリストまたは行のリストとして出力することを選択できますが、選択は一貫している必要があります。 デフォルトではこれらの抜け穴が禁止されていることに注意しながら、任意のプログラミング言語で競争し、標準的な方法で入力を取得し、出力を提供できます。 これはcode-golfであるため、すべての言語の最短の送信(バイト単位)が優先されます。 例 与えられたN = 3とM: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 可能な3x3部分行列は次のとおりです。 + ------- + + -------- + 1 2 3 …

9
極大値と極小値を見つける
定義 特定の関数の最大値と最小値は、特定の範囲内または関数のドメイン全体内の関数の最大値と最小値です。 チャレンジ 課題は、任意の方法を使用して、特定の多項式関数の極大値と極小値を見つけることです。心配しないでください、私は挑戦を説明して、それをできるだけ単純に保つために最善を尽くします。 入力には、電力の降順または昇順のいずれかで(単一の)単一変数多項式のすべての係数が含まれます。例えば、 [3,-7,1] 代表します 3x2 - 7x + 1 = 0 [4,0,0,-3] 代表します 4x3-3=0. 解決方法(デリバティブを使用)? ここで、入力が[1,-12,45,8]であるとしましょう。これは関数にすぎません。x3 - 12x2 + 45x + 8 最初のタスクは、その関数の導関数を見つけることです。これは多項式関数なので、実際には簡単なタスクです。 の導関数はです。に存在する定数項は単純に乗算されます。また、加減算された用語がある場合、それらの導関数もそれぞれ加算または減算されます。定数数値の導関数はゼロであることを忘れないでください。以下に例を示します。xnn*xn-1xn x3 -> 3x2 9x4 -> 9*4*x3 = 36x3 -5x2 -> -5*2*x = - 10x 2x3 - 3x2 + 7x -> 6x2 - 6x …

4
砂時計の下部
チャレンジ: 入力: 3つの整数:下端の長さ。砂粒の開始量; インデックス 出力:指定された下端の長さと砂粒の量に基づいて、指定されたインデックスで砂時計の下部の状態を出力します。 チャレンジルール: 1〜9の数字で砂の粒をシミュレートします 私たちは、あなた自身の選択の1文字が続き、途中で上部の砂の粒の現在の残量を置く(数字、空白や改行を除く、すなわち-)その下の行に 砂時計がいっぱいになると、行ごとに1桁ずつ埋めます 砂が左または右に移動できる場合は、常に右に移動します(砂時計の上にある砂粒の残​​りの量のバランスをとる場合も同じです) 9に達すると、砂が満たされ、砂時計の特定の場所にこれ以上砂を入れることができなくなります 残った砂の粒の量も常に正しく揃えられています 砂時計の下半分が完全に満たされるか、残った砂粒の量が0に達すると、これ以上進むことはできません。これは、このポイントを超えるすべてのインデックスの出力になります 0インデックスまたは1インデックスの両方が許可されています。回答で使用したものを指定してください。 末尾と先頭のスペース、および単一の末尾または先頭の改行はオプションです あなたがそれらを表示することを選択した場合、砂時計の下の部分の空白を埋めるためにゼロの代わりに他の文字を使用することができます(数字、改行、または首として使用した文字を除く)。 下端の長さは常に奇数になります 下端の長さは>= 3;になります。砂粒の量>= 0 必要に応じて、指定されたインデックスまでのすべての状態を印刷することもできます (インデックスが0の)インデックスは、砂の粒の合計量より大きくなることはないと想定できます(したがって、砂の粒が100個ある場合、インデックス100は最大の有効なインデックス入力です)。 最初のインデックス(インデックスが0の場合は0、インデックスが1の場合は1)は、砂粒の量が上にある空の砂時計を出力します。 例:写真(またはascii-art)は1000語以上の単語を言うので、以下に例を示します。 入力下端の長さ:5 砂粒の入力量:100 現在のインデックスの代わりに、ここにすべてのステップを表示します。 下端の長さ5と砂粒の量を含むすべての可能なインデックスの出力100: 100 - 0 000 00000 99 - 0 000 00100 98 - 0 000 00110 97 - 0 000 01110 96 - …

14
2つのリストを最大値で比較する
負でない整数の2つの異なるリストが与えられた場合、最大値が最大のリスト(例えば[4, 2], [3, 3, 1] -> [4, 2])を返します。 両方に同じ最大値がある場合、この最大値のインスタンスをさらに含むリストを返します(例:)[4, 2, 4], [4, 3, 3, 3, 1, 3] -> [4, 2, 4]。 これらの比較の後、それらが等しい場合、同じ比較を行いますが、次に高いアイテム(例[2, 3, 4, 4], [4, 4, 3, 3, 1] -> [4, 4, 3, 3, 1])を使用します。 これらすべての比較の後、それらがまだ等しいと見なされる場合、より長いリストを出力します(例:)[4, 3, 2, 1, 0], [1, 2, 3, 4] -> [4, 3, 2, 1, …

6
印象的な時計に合わせる
前書き: 自宅には、1時間ごとに指定された量を打つ時計がありますが、30分ごとに1回打つ時計もあります。したがって、0:01から12:00までは、この順序でストライキします。 1, 1, 1, 2, 1, 3, 1, 4, 1, 5, 1, 6, 1, 7, 1, 8, 1, 9, 1, 10, 1, 11, 1, 12 チャレンジ: 整数を指定nすると、総ストライクがに等しい時間枠のリストを出力しnます。さらに、常にこの時間枠の少なくとも1分前に開始し、この時間枠の少なくとも1分後(最大で29分)に終了します。 たとえば、入力がのn=8場合、出力は次のようになります。 [00:59-03:01, 01:29-03:31, 02:59-04:01, 05:29-06:31, 06:29-07:01, 06:59-07:31, 07:59-08:01] これらの時間枠には以下の合計があり、すべて等しい8: [1+1+2+1+3, 1+2+1+3+1, 3+1+4, 1+6+1, 1+7, 7+1, 8] チャレンジルール: 出力は柔軟です。Time(またはDate / DateTime)オブジェクト、タイムスタンプ、文字列(先頭のゼロの有無にかかわらず)、.29/ .31/ .59/ …

7
彼らは週の同じ日になることができますか?
チャレンジ 負でない整数を指定すると、(グレゴリオ暦の)2つの日付が何年も異なるために曜日を共有できるかどうかを出力します。年は、4で割り切れるが100で割り切れない場合、または400で割り切れる場合、うるう年と見なされます。 出力は次のとおりです。 falsey / truthy(どちらの向きでも) 任意の2つの異なる値 1つの明確な値と1つの何か プログラムの戻りコード別 成功/エラーによって 他の合理的な手段で-物議をかもしていると思われるかどうか尋ねる しかし、ない falsey / truthy以外の値の二つの非明確なセットによって(これはノーオペレーションを許可しないだろうと!) 詳細 これは、入力がOEISシーケンスA230995のメンバーであるかどうかです。 メンバー: 0, 5, 6, 7, 11, 12, 17, 18, 22, 23, 28, 29, 33, 34, 35, 39, 40, 45, 46, 50, 51, 56, 57, 61, 62, 63, 67, 68, 73, 74, 78, 79, …

16
Mod 2多項係数
quintopiaは、ここで多項係数を計算するための課題を投稿しました(ここのテキストの一部はそこからコピーされています)。多項係数mod 2を計算する楽しいアルゴリズムがあります。 数のリストk 1、k 2、...、k mが与えられると、多項係数の剰余を出力します。 それぞれについて、以下のアルゴリズムが効率的にこれを行うMOD 2を減少K iがバイナリ拡張計算し、kはiが発見であること、IJ各ようにijが 1または0であり、そして r≠sに対してa rj = a sj = 1のようなjがある場合、関連するmod 2多項係数は0です。それ以外の場合、mod 2多項係数は1です。 仕事 m個の数値、k 1、k 2、...、k mを取り、対応する多項係数を出力または返すプログラムまたは関数を作成します。プログラムでは、必要に応じて、オプションでmを追加の引数として使用できます。 これらの数値は、コード化プロセスではなくコードによって多項係数の実際の計算が実行される限り、任意の形式で入力できます。たとえば、リストにグループ化するか、単項でエンコードするなどです。 多項係数が奇数の場合、出力は任意の真理値、多項係数が偶数の場合は偽値となります。 多項係数を計算するために設計された組み込み関数は使用できません。 標準の抜け穴が適用されます。 得点 これはコードゴルフです。バイト単位の最短ソリューションが勝ちです。 例: 7、16、および1000の多項係数を見つけるために、それぞれをバイナリ展開します。 1つ以上の列を持つ列はないので、多項係数は奇数であり、したがって、何らかの真実を出力する必要があります。 7、16、および76の多項係数を見つけるために、それぞれをバイナリ展開します。 76と7の2進展開には4があるため、多項係数は偶数であり、偽値を出力します。 テストケース: Input: [2, 0, 1] Output: Truthy Input: [5,4,3,2,1] Output: Falsey Input: [1,2,4,8,16] Output: Truthy …

15
目標値に達する組み合わせを生成する
チャレンジ 数字のリストとターゲット値があるとします。目標値に達する数字のすべての組み合わせのセットを見つけ、それらをリストインデックスとして返します。 入出力 入力には、番号のリスト(必ずしも一意ではない)とターゲットの合計番号が必要です。出力は空でないリストのセットになり、各リストには元の入力リストの値の位置に対応する整数値が含まれます。 例 Input: values = [1, 2, 1, 5], target = 8 Output: [ [0,1,3], [1,2,3] ] Input: values = [4.8, 9.5, 2.7, 11.12, 10], target = 14.8 Output: [ [0,4] ] Input: values = [7, 8, 9, -10, 20, 27], target = 17 Output: [ [1,2], …

1
Minifierを書きましょう
バックグラウンド JavaScriptをWebブラウザに提供する場合、一般的に縮小子が使用されます。通常、送信する必要のあるバイト数を減らすために使用されます。帯域幅を節約することは、明らかな理由で役立ちます。一部の人々は難読化ツール(意図的にコードを読みにくくする)を使用していますが、私はそれらについて話していません。 Python 2を縮小します JavaScriptまたはPythonを縮小化の経験として使用するかどうかを議論していましたが、2つの理由でPythonを決定しました。空白が重要であり、それが興味深いダイナミックな問題を追加すると思います。また、Pythonの2.7を使用して、このような削除余分として、別の動的に提供する()プリント時(すなわちprint("Hello world")対print"Hello world")。個人的には、任意の言語で開くことを望んでいましたが、一部の言語では、このプロセスはあまり意味がありません。また、縮小する言語はスコアに直接影響します(言語を縮小できる場合もあります)。 スペック あなたの目標は、とにかく機能を変更しない方法でのみコードを変更することです。もちろん、出力に影響を与えない限り、変数名を(縮小プログラム内で)変更できます(スコープを追跡します)。特定のプログラムを提供していますが、すべての標準的な抜け穴は禁止されているため、テストケース用に最適化しないでください。 スコア:縮小した後のプログラムの長さ。 入力:任意のPython 2.7プログラム(エラーなし) 出力:縮小版。 コードはすべての有効なPython 2.7入力に対応できる必要がありますが、有効性を証明するためにスクリプトを何かに対してテストする必要があります。 サンプルプログラムを表示するには、ここをクリックしてください。 問題をより親しみやすくする ソリューション内にあるコードを自由に使用または変更してください(以下を参照)。見積もりの​​基本的な見積もり処理を開始するためにこれを行いました。ただし、インデントなどに拡張できます。 Pythonを縮小する方法の例 すべての空白は最小限の量に置き換えることができます(Pythonではtabsを使用していくつかのトリッキーなことを行うことができますが、実装するかどうかはあなたに任せます)。 例 以下: def print_a_range(a): for i in range(a): print(i) になり得る: def print_a_range(a): for i in range(a): print(i) 技術的には、ループ内に1行しかない場合は、さらに圧縮できます。 def print_a_range(a): for i in range(a):print(i) #Note, you can also remove the …

10
プライムへの分解
整数nを指定すると、nが素数のリストとして記述できるウェイの数を返します。例えば、2323のように書くことができ(2,3,23)、(23,23)または(2,3,2,3)あるいは(23,2,3)あなたが出力だろうので、4。この方法で記述できない場合は、を出力する必要があります0。 019またはなどの素数00000037は、この問題の有効な素数です。 テストケース: 5 -> 1 55 -> 1 3593 -> 4 (359 and 3, or 3 and 593, or 3 and 59 and 3, or 3593) 3079 -> 2 (3 and 079, or 3079) 119 -> 0 5730000037 -> 7 (5,7,3,000003,7, 5,7,3,0000037, 5,73,000003,7, 5,73,0000037, 5,73000003,7, 5,7,30000037, 5730000037) 0-> undefined …

11
サブセット合計のNビットバリエーション
私が書いている別の課題については、テストケースが有界整数で解けることを検証する必要があります。具体的には、空ではない整数の配列Aと整数のビット幅について、以下を検証する必要がありますn。 すべての整数aがA満たされます-2**(n-1) <= a < 2**(n-1)(n-bit 2の補数整数で表現可能)。 の長さAは未満です2**n。 の合計はをA満たし-2**(n-1) <= sum(A) < 2**(n-1)ます。 要素のすべての組み合わせはA、上記のすべての条件を満たす。 当然、この問題を外部に委託することにしました! 整数の配列Aと正の整数ビット幅nを指定するとA、上記の条件を満たすことを確認します。 テストケース [0, 0, 0], 2: True [0, 0, 0, 0], 2: False (violates #2) [1, 2, 3, 4, 5], 8: True [1, 2, 3, 4, 5], 2: False (violates all conditions) [1, 2, 3, …

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