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

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

7
積み上げ桁階段
以下に説明するように、正の整数およびhを指定すると、テキストのw列およびh行が出力されます。wwwhhhwwwhhh 最初の行は11 0秒で始まり、2行目は10 1秒で始まり、3 行目は9 2秒で始まり、10行目は2秒で続き9ます。これらの最初の10行のそれぞれで、連続する数字の最初の実行に続いて、次に低い数字が2回現れ、次に2番目に小さい数字が2回現れ、このパターンが永久に繰り返されます。0sの実行が発生した場合、その後の数字は常に9sです。 10番目の行の下の行は、そのすぐ上の行と同じですが、1つ右にシフトします。表示される新しい数字は、それ自体の別のインスタンスの隣にない場合、前の左端の数字と同じです。それ以外の場合は、次に高い桁(9から0に戻る循環)です。 最初の要素は次のとおりです。11×1011×1011\times10 00000000000 11111111110 22222222211 33333333221 44444443322 55555544332 66666554433 77776655443 88877665544 99887766554 パターンをより明確にするために、色付きのテキストを使用した画像を次に示します。 より少ない列/行を作成する必要がある場合は、上記のテキストを切り抜く必要があります。 これより多くの列/行を作成する必要がある場合は、既存の階段を延長する必要があります。さらに列/行が連続する数字の新しい階段を追加する場合、数字は整数から周期的に選択される必要があります。したがって、入力のために出力がなければなりません(15,13)(15,13)(15,13) 000000000009988 111111111100998 222222222110099 333333332211009 444444433221100 555555443322110 666665544332211 777766554433221 888776655443322 998877665544332 099887766554433 009988776655443 100998877665544 このテキストの色付きの画像を次に示します。 ルール 便利な方法で出力できます。 完全なプログラムまたは機能のいずれかが受け入れられます。関数の場合、出力する代わりに出力を返すことができます。 必要に応じて、行のリストを返すことができます。 必要に応じて、数字の2D配列または数字のリストのリストを返すことができます。 標準の抜け穴は許可されていません。 最短のコードが優先されます。 テストケース (w,h)(w,h)(w,h) 1,1 0 3,2 000 111 20,1 …

30
プレフィックスのテキストを検索し、テキスト内のすべてのサフィックスをリストします
ここでは、「接頭辞に続く任意の部分文字列」を意味するために、「接尾辞」を大まかに使用します。 ここでの「プレフィックス」とは、単語の開始を意味します。単語の開始は、スペースの後または入力テキストの最初の文字(最初の単語)として定義されます。単語の途中にある「プレフィックス」は無視されます。 たとえば、入力プレフィックスが「arm」で、入力テキストが「迫り来るハルマゲドンに対してダンブルドアの軍隊が完全に武装した」場合、出力リストには(y、ed、ageddon)が含まれます。 テストケース 大文字と小文字が区別され、文字列はスペースの後に終わると仮定します。入力はスペースで始まりません。 重複の削除はオプションです。 Input prefix: "1" Input text: "He1in aosl 1ll j21j 1lj2j 1lj2 1ll l1j2i" Output: (ll, lj2j, lj2) - in any permutation Input prefix: "frac" Input text: "fracking fractals fracted fractional currency fractionally fractioned into fractious fractostratic fractures causing quite a fracas" Output: (king, tals, …

3
死んだカエルの歩行
前書き ジョニーはフロッガーをプレイしたい。しかし、彼はあまりよくありません。実際、彼はプラットフォームが移動した後にのみ、前進しようとします。 ジョニーのカエルが道の終わりに到達したのか、途中で死んだのかを調べてください。 チャレンジ このプログラムは、0sおよび1sで構成されるフロッガーグリッドを次の形式で入力として受け取ります。 グリッドの幅と長さはランダムで、少なくとも3x3 1 プラットフォームを表します 0 水を表します F カエルの開始位置を表します グリッドの最初と最後の行はすべて1s のみで構成され、移動せず、カエルFは最後の行にランダムに配置されます すべての中間層は常に移動し、各行の最後<または>末尾に、左または右に移動するかどうかを示します これらの記号をすべて独自のものに置き換えて、それらがすべて明確であり、回答で置き換えを指定する限り、許可されます。 入力は、互換性のある任意の形式(改行を含む文字列、文字列の配列、文字の配列、...)にすることができます。 チャレンジルール ターンごとに、すべてのプラットフォームは、<または>記号で示された方向に基づいて1マス移動 プラットフォームが「スクリーン」から押し出されると、グリッドの反対側に再び表示されます カエルが動くプラットフォーム上にある場合、カエルも一緒に移動します その後、カエルは一番上の行に向かって1つの正方形をジャンプします。カエルは毎ターン移動します。 カエルが水に飛び込んだ場合(0)、または移動するプラットフォームとともにグリッドの側面に触れた場合、カエルは死にます。 あなたのプログラムは、カエルが生き残る場合は真実の値を出力し、それ以外の場合は偽の値を出力する必要があります。 これはcode-golfであるため、バイト単位の最短回答が勝ちます。標準の抜け穴が適用されます。 例 例1 入力 11111 00111> 00101< 1F111 出力 1 実行 ターン1: 11111 10011 01010 1F111 11111 10011 0F010 11111 ターン2: 11111 11001 F0100 11111 11111 …

16
タイムスパンを数える
私はここへの答えを求めた現実のシナリオに触発されました:https : //superuser.com/questions/1312212/writing-a-formula-to-count-how-many-times-each-date-日付のセットに表示されます タイムスパンの配列(または開始日と終了日のペア)を指定すると、合計範囲内のすべての日について、1日をカバーするタイムスパンの数を出力します。 例えば: # Start End 1 2001-01-01 2001-01-01 2 2001-01-01 2001-01-03 3 2001-01-01 2001-01-02 4 2001-01-03 2001-01-03 5 2001-01-05 2001-01-05 上記のデータを考えると、結果は次のようになります。 2001-01-01: 3 (Records 1,2,3) 2001-01-02: 2 (Records 2,3) 2001-01-03: 2 (Records 2,4) 2001-01-04: 0 2001-01-05: 1 (Record 5) 各日のカウントのみを出力する必要があります(順番に古いものから新しいものへソートされます)。どのレコードに表示されるかではありません。 各タイムスパンには、時刻ではなく日付のみが含まれると想定できます。したがって、丸1日は常に表されます。 I / O 入力は、タイムスパンのセットを表す任意の形式です。つまり、時間のペアのセット、または開始日と終了日を含む(ビルトイン)オブジェクトのコレクションのいずれかです。PPCGチャレンジでは通常のように、日時は1901〜2099に制限されています。 入力は好きなように事前にソートされていると仮定できます(答えを指定してください)。入力日付は包括的です(したがって、範囲には開始日と終了日全体が含まれます)。 また、特定の範囲内の2つの日付のうち、最初の日付が2番目の日付よりも古いか等しいと見なすこともできます(つまり、負の日付範囲はありません)。 …
17 code-golf  date 

24
シーケンスステップを取得する
チャレンジ 一連の数字が与えられたら、一連のステップを返す関数を作成します。 シーケンスは次のようになります N >= 3 シーケンスは少なくとも1回ステップを繰り返します シーケンスには自然数のみが含まれます 関数またはプログラムは、可能な限り短い手順のシーケンスを返す必要があります 例: 入力: [1, 2, 3, 5, 6, 7, 9, 10, 11, 13, 14, 15, 17] 出力: [1, 1, 2] 説明:初期シーケンスはから始まります1 => 2 (1 step), 2 => 3 (1 step), 3 => 5 (2 steps)。その後、繰り返します。出力は[1 step, 1 step, 2 steps] => [1, …

12
一般化されたCantorセットのセグメント長
問題 単一の連続した間隔から開始して、まだ削除されていないすべての間隔の中間から合理的な長さのセグメントを繰り返し削除することにより、一般化されたCantorセットを定義しましょう。 削除するかどうかのセグメントの相対的な長さ、および実行する反復回数を考えると、問題は、反復後に削除された、またはされていないセグメントの相対的な長さを出力するプログラムまたは関数を作成することnです。 例:4番目と6番目の8番目を繰り返し削除する 入力: n – 0または1から始まるインデックス付きの反復回数 l-セグメントの長さのリストは、正の整数gcd(l)=1と奇数の長さで、削除されないセグメントから始まる、そのままの状態または削除される部分の相対的な長さを表します。リストの長さが奇数であるため、最初と最後のセグメントは削除されません。たとえば、通常のCantorセットの場合、これは3分の1が[1,1,1]になり、3分の1が削除され、3分の1が削除されます。 出力: 前の反復で削除されなかったセグメントがリストの縮小されたコピーで置き換えられるとき、th反復における相対セグメント長の整数リストo、。最初の反復はちょうどです。単項式であっても、明確な出力方法を使用できます。gcd(o)=1nl[1] 例 n=0, l=[3,1,1,1,2] → [1] n=1, l=[3,1,1,1,2] → [3, 1, 1, 1, 2] n=2, l=[3,1,1,1,2] → [9,3,3,3,6,8,3,1,1,1,2,8,6,2,2,2,4] n=3, l=[5,2,3] → [125,50,75,100,75,30,45,200,75,30,45,60,45,18,27] n=3, l=[1,1,1] → [1,1,1,3,1,1,1,9,1,1,1,3,1,1,1] 入力が有効であると想定できます。これはcode-golfであるため、バイト単位で測定される最短のプログラムが優先されます。

16
行列列の進行
無限行列を考えます: 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 0 2 3 0 0 2 3 0 0 2 3 0 0 2 3 0 0 0 4 5 6 0 0 0 4 5 6 0 0 0 4 ... …
17 code-golf  matrix 

12
関数クリップボード:コピー
この課題は、2018年5月の「Language of the Month」イベントの一環として、MATL言語の機能の一部に関連しています。 関連する課題:関数クリップボード:貼り付け。 前書き MATLには、値を保存(コピー)して後で取得(貼り付け)できるクリップボードがいくつかあります。一部のクリップボードは自動です。つまり、特定のイベントによってコピーが自動的にトリガーされます。この課題は、関数入力クリップボードまたは単に関数クリップボードと呼ばれる自動クリップバーの1つに焦点を当てています。 このクリップボードは、通常の入力取得機能への4つの最新の呼び出しへの入力を保存します。通常の関数は、MATLで最も一般的なタイプの関数です。入力取得は、関数が少なくとも1つの入力を取得することを意味します(入力を取得しない関数は、関数クリップボードによって考慮されません)。 これは、2つの通常の関数を使用する次の例で最もよく説明されます。 +、スタックから2つの数値をポップし、それらの合計をプッシュします。 U、1つの数字をポップし、その正方形をプッシュします。 例1: 3 2 + 6 + 12 4 U + + 結果を生成し39ます。コードは次のように解釈されます。 3または12スタックにプッシュされるなどの数値リテラル +入力をポップし、出力をスタックにプッシュするなどの関数。 関数呼び出しは、時系列で次のとおりです。 3 2 + 与える 5 5 6 + 与える 11 4 U 与える 16 12 16 + 28 11 28 +与える39。 クリップボードは、4つのリストのリストとして表示できます。各内部リストには、関数呼び出しへの入力が含まれ、最新の呼び出しが最初にあります。各内部リスト内では、入力は元の順序になっています。 そのため、コードを実行した後のクリップボードの内容は次のとおりです(Python表記): [[11, …
17 code-golf  number 

7
ニム乗算
バックグラウンド 多くのコードゴルフを行う場合は、ビット単位のXOR操作を知っている可能性があります。2つの整数が与えられると1、2つの入力が異なるビットにsを持つ別の整数が与えられます。したがって、たとえば、1010 XOR 0011 = 1001。 それはゲーム理論で非常に有用であることが判明し、「nim sum」として知られています。2つのゲームの合計がある場合(つまり、一度に1つのゲームで移動している場合)、位置の値は、個々のゲームの位置の値のnim合計です。 しかし、これをさらに一歩進めることができます。nimの追加とnimの乗算の適切な定義により、非負の整数からフィールドを形成できます。したがって、課題はゴルフニムの増殖です。 定義 Nim乗算は次の規則に従います 。Fermat 2乗n =(2 ^(2 ^ k))と任意の小さい数のnim積は通常の積です。 Fermat 2乗nとそれ自体のnim積は3n / 2です。 Nim乗算は、nim加算を介して分散します。 Nim乗算は可換および結合的です(nim加算と同様)。 乗法恒等式は1です(および加法恒等式は0です)。 非負の整数は、2の異なるべき乗のnimの合計として記述でき、2のべき乗は、異なるフェルマー数の積として記述できます。したがって、これは、すべての非負の整数のnim乗算を定義するのに十分です。 例 それはすべてかなり抽象的だったので、例を見ていきましょう。私が使用します+NIM加算(XOR)を表すとする*NIM乗算に。 6 * 13 = (4 + 2) * (8 + 4 + 1) = (4 + 2) * ((4 * 2) + 4 …
17 code-golf  math 

26
Elixir Array構文糖
Elixirでは、(リンクされた)リストは、headは何でもよく、tailはリストの残りのリストの形式[head | tail]であり、空のリストはこの唯一の例外です。[] リストは次のようにも書くことができる[1, 2, 3]と同等です[1 | [2 | [3 | []]]] あなたの仕事は、説明されているようにリストを変換することです。入力は常に、正規表現に一致する数字のみを含む有効なリスト(Elixir内)になり\[(\d+(, ?\d+)*)?\]ます。(各コンマの後にスペースが1つ)またはスペースなしで入力を行うことができます。出力は、(それぞれの前後にスペースが1つ|)あり、またはスペースなしです。 先行ゼロのある入力の場合、ゼロなしで出力することも、出力することもできます。 入力は、出力と同様、文字列として取得する必要があります(関数を記述する場合)。 例 [] -> [] [5] -> [5 | []] [1, 7] -> [1 | [7 | []]] [4, 4, 4] -> [4 | [4 | [4 | []]]] [10, 333] -> [10 | [333 …

19
順序文字列チェック
説明: 入力として文字列を指定し、それが英語の有効な序数かどうかを確認します。有効な場合は真理値を返し、そうでない場合は偽の値を返します。(@Arnauldによる提案。ありがとう。また@JoKingによる) 序数について知りたいユーザーの場合は、ここにアクセスしてください: https://www.mathsisfun.com/numbers/cardinal-ordinal-chart.html(提案:qwr) 可能な入力: 21st ---> true 12nd ---> false 1nd ---> false .... これはコードゴルフチャレンジであるため、各言語の最短コードが勝者となります。 例: console.log('12th' , true) // This evaluates to true console.log('1st' , true) // also evaluates to true console.log('21nd' , false) // returns false console.log('11st' , false) // returns false console.log('111199231923819238198231923213123909808th' , true) // true …

23
綴られたシリアル番号を並べ替える
2つ以上の等しい長さの2つ以上のスペルアウトされたシリアル番号のリストがある場合、たとえば [[ "three" , "one" , "four" ], [ "one" , "five" , "nine" ], [ "two" , "six" , "five" ], [ "three" , "five" , "eight" ]] 単語が表す数字でリストをソートします。 [[ "one" , "five" , "nine" ], [ "two" , "six" , "five" ], [ "three" , "one" , "four" …

4
クロスアルファベット文字
バックグラウンド ウィキペディアでこの非常に興味深いベン図を見ました:https ://simple.wikipedia.org/wiki/Alphabet#/media/File: Venn_diagram_gr_la_ru.svg ロシア語、ギリシャ語、ラテン語のアルファベットに共通するさまざまなアルファベットの文字(物理的形状)を示しています。 チャレンジ 表示されている3つのスクリプトのいずれかからの入力文字列(大文字のギリシャ文字、キリル文字、またはラテン文字)を指定すると、各言語に一致する文字列の割合を出力します。繰り返される文字は毎回カウントされます。 たとえば、FFLURSはすべてラテン語のみの文字であるため、出力はFFLURS is 100% Latin, 0% Cyrillic and 0% Greekです。 対照的に、TOX BEAM PHPは3つの言語すべてに現れる文字で完全に形成されるため、出力はTOX BEAM PHP is 100% Cyrillic, 100% Greek and 100% Latinです。 ルックアップテーブル ベン図は、以下の文字のソースです。 ラテン語のみ: J,G,S,D,Q,U,V,W,F,L,R ラテン語およびキリル文字: C, С ラテン語およびギリシャ語: I,Ι, N,Ν, Z,Ζ ギリシャ語とキリル文字 Φ,Ф, Π,П, Γ,Г, Λ,Л 3つすべて: A,B,E,O,M,K,T,X,Y,H,P (and equivalents in …

19
エルミート行列?
この課題では、複素数の処理や理解が必要ないことに注意してください。 すべての要素が2要素(Re、Im)整数リストである空でない正方行列が与えられた場合、これがエルミート行列を表すかどうかを決定(真理値/偽値または2つの一貫した値を与える)します。 入力は整数の3D配列であることに注意してください。複素数の2D配列ではありません。言語で3D配列を直接取得できない場合は、フラットリストを使用できます(それが役立つ場合は、n×nまたはn×n×2の形状)。 行列は、それ自身の共役転置に等しい場合、エルミート行列です。言い換えると、左上から右下の対角線上でそれを反転し、すべての2要素リーフリストの2番目の要素を無効にすると、入力行列と同じになります。反転と否定の順序は無関係であることに注意してください。したがって、最初に否定し、その後反転することができます。 ウォークスルーの例 この例では、読みやすくするために、余分な空白を含むJSONを使用しています。 [[ [2, 0] , [2, 1] , [4, 0] ], [ [2,-1] , [3, 0] , [0, 1] ], [ [4, 0] , [0,-1] , [1, 0] ]] 転置(NWを越えて反転-SE対角線): [[ [2, 0] , [2,-1] , [4, 0] ], [ [2, 1] , [3, 0] …

27
リストをすばやく再グループ化する
グループ化はリストを取り、それを等しい隣接要素の新しいリストに分割します。例えば [1,1,2,1,1] -> [[1,1],[2],[1,1]] これらのグループの長さを取得すると、整数の新しいリストが取得されます [1,1,2,1,1] -> [2,1,2] あなたの仕事は、正の整数のリストを受け取るプログラムを作成し、結果のリストに単一の要素が含まれる前にグループ化および長さ化できる回数を見つけることです。たとえば、リスト[1,2,3,3,2,1]を4回再グループ化できます [1,2,3,3,2,1] [1,1,2,1,1] [2,1,2] [1,1,1] [3] これはコードゴルフであるため、回答はバイト単位でスコアリングされ、バイト数は少ない方が良いでしょう。 テストケース [1,2,3,3,2,1] -> 4 [1,2,3,4,5,6,7] -> 2 [1,1,1,1,1,1] -> 1 [2] -> 0 [1,2,4] -> 2 [1,2,2,1,1,2] -> 4 [1,2,2,1,1,2,1,2,2] -> 5 [1] -> 0

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