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

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

9
Bracksを埋める
通常のブラケット(()、[]、<>とは{})しかし、誰かがそれを括弧のような非括弧文字を使用することをお勧めだろうと思った、素晴らしく、明確なです。これらの文字|と"があいまいです。たとえば """" 対応する (()) または ()() 言うことは不可能です。 曖昧な括弧の種類を混ぜると、物事が面白くなり始めます。たとえば、 "|""||""|" 次のいずれかです ([(([]))]),([()[]()]),([()][()]) 仕事 あなたの仕事は、あいまいな文字で作られた文字列を取得し、作成者が意図した可能性のあるすべてのバランスの取れた文字列を出力することです。 交換行うことができ、より具体的にあなたの出力のすべてのバランスの文字列|のいずれかと[か]と"どちらかと(か)。バランスの取れた文字列を2回出力しないでください。 IO 入力として、|とで構成される文字列を使用する必要があります"。あなたは以外に二つの異なる文字を選択したい場合|や"、あなたがそうすることができる代替品として機能します。バランスの取れた文字列のコンテナを出力する必要があります。あなたは置き換えることを選択すること[]と、()(他の2ブラケットのペアを使用して出力して()、[]、<>または{}あなたが望みます)。出力形式は実行間で一貫している必要があります。 得点 これはコードゴルフですため、回答はバイト単位でスコアリングされ、バイト数は少ない方が良いでしょう。 テストケース "" -> ["()"] "|"| -> [] ||| -> [] """" -> ["(())","()()"] ""|| -> ["()[]"] "|"||"|" -> ["([([])])"] "|""||""|" -> ["([(([]))])","([()[]()])","([()][()])"]

2
シャッフルの数
リフルシャッフルはシャッフルの一種で、デッキが2つのパーティションに分割された後、パーティションがスプライスされて新しいシャッフルデッキが作成されます。 カードは、カードがメンバーであるパー​​ティション内で相対的な順序を維持するように接続されます。たとえば、カードAがデッキのカードBの前にあり、カードAとBが同じパーティションにある場合、カードAが最終結果のカードBの前にある必要があります。場合はAとBが異なるパーティションにある、彼らは最終的な結果に関係なく、自分の順番の、任意の順序にすることができます。 各リフルシャッフルは、カードの元のデッキの順列として見ることができます。たとえば、順列 1,2,3 -> 1,3,2 リフルシャッフルです。このようにデッキを分割すると 1, 2 | 3 のすべてのカード1,3,2は、パーティション内の他のすべてのカードと同じ相対的な順序を持っていることがわかります。 2まだ後1です。 一方、次の順列はリフルシャッフルではありません。 1,2,3 -> 3,2,1 これは、2つの(重要な)パーティションすべてに対して 1, 2 | 3 1 | 2, 3 相対的な順序を維持しないカードのペアがあります。最初のパーティション1で2順序を変更し、2番目のパーティション2で3順序を変更します。 ただし3, 2, 1、2つのリッフルシャッフルを作成することで作成できることがわかります。 1, 3, 2 + 2, 3, 1 = 3, 2, 1 実際、証明すべき非常に単純な事実は、いくつかのリフルシャッフル順列を組み合わせて、順列を作成できることです。 仕事 あなたの仕事は、入力として(サイズNの)順列を取り、入力順列を形成するために組み合わせることができる(サイズNの)最小数のリフルシャッフル順列を出力するプログラムまたは関数を作成することです。リッフルシャッフル自体を出力する必要はありません。 これはコードゴルフであるため、回答はバイト単位でスコアリングされ、バイト数は少ない方が良いでしょう。 恒等置換の場合、1または0を出力できます。 テストケース 1,3,2 -> 1 …

23
幾何学的シーケンスを推測する
Haskellには、この3つの数字を与えることができ、それらから算術シーケンスを推測できるこのすっきりした(-見える)機能があります。たとえば、[1, 3..27]はと同等[1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27]です。 それはクールで、算術シーケンス以外はすべてかなり制限されています。また、pfft。乗算はどこにあるのか [1, 3..27]戻るような幾何学的なシーケンスを実行した方がクールではないでしょう[1, 3, 9, 27]か? チャレンジ 書き込みプログラム/機能 3つの正の整数かかり、B、及びCと出力xは最大整数≤であるCとして表すことができるここでnは正の整数です。[a, b, b × (b ÷ a), b × (b ÷ a)2, ..., x]b × (b ÷ a)n つまり、出力はrである必要があります。 r0 = a r1 = b rn = …

2
Goodsteinシーケンスを出力する
(これはかなり古典的かもしれませんが、これはここでの私の最初の投稿なので、私はまだ派手なものの準備ができていません) グッドスタイン配列は、以下のように、入力数に対して定義されます。 開始番号を選択N、聞かせてB = 2と繰り返し: 基数bの表記でnを書く nのすべての(b)を(b +1)に置き換え、1を減算します nの新しい小数評価を出力します インクリメントb 遺伝基数表記は、基数が出現するより大きな数である場合の数の分解です。例: 83 HB3で: 3^(3+1)+2 226 HB2で: 2^(2^(2+1))+2^(2+1)+2 グッドスタインシーケンスは常に0になりますが、最初は非常に速く非常に大きくなる傾向があるため、完全なシーケンスを出力する必要はありません。 仕事: 適切な形式の入力番号が与えられた場合、あなたの仕事は、少なくとも10 ^ 25または0に達するまで、この番号のGoodsteinシーケンスを出力することです 例: Input: 3 Output: 3, 3, 3, 2, 1, 0 Input: 13 Output: 13, 108, 1279, 16092, 280711, 5765998, 134219479, 3486786855, 100000003325, 3138428381103, 106993205384715, 3937376385706415, 155568095557821073, 6568408355712901455, 295147905179352838943, …

12
オリンピックリングシーケンス
チャレンジ: インデックス整数を指定するとn、nこのシーケンスの 'th番目のアイテムを出力するか、index までのシーケンスを出力しますn: 25,25,7,28,29,20,21,22,23,14,35,26,7,28,29,20,16,29,12,15,28,21,14,17,30,13,16,29,12,15,28,21,10,6,12,18,15,11,7,13,19,17,13,9,15,21,18,14,10,16,22,19,15,11,17,23,20,16,12,18,24,21,17,13,19,25,23,19,15,21,27,24,20,16,22,28,25,21,17,23,29,16,13,9,15,21,18,14,10,16,22,20,16,12,18,24,21,17,13,19 このシーケンスはどのように機能しますか? 注:この説明でnは、インデックスは1から始まります。長さの2行に 数字1を入力xしますn*6 - 1。ここxで、現在の反復と使用する数字の長さに依存し、nそれら2行の'右/右端のオリンピックリングの数字を合計します。 シーケンスの最初の数は次のように計算されます。 The length of the lines are 5 (because 1*6 - 1 = 5): 12345 67891(0) Then leave the digits in an Olympic Rings pattern: 1 3 5 7 9 And sum them: 1+3+5+7+9 = 25 だから、n=1その結果25。 シーケンスの2番目の数は、次のように計算されます。 The length …

1
アドベントチャレンジ1:サンタが現在の金庫をアンロックできるように助けてください!
次へ>> 記述キーワード(検索用):2つの行列を同等にする、重複、配列、検索 チャレンジ サンタは過去にエルフがボールトからプレゼントを盗んだという歴史があったため、今年は非常に割れにくいロックを設計し、今年はエルフを締め出したようです。残念ながら、彼は組み合わせを失い、それを開く方法もわかりません!幸いなことに、彼はあなたにその組み合わせを見つけるプログラムを書くように依頼しました。それは最短のものである必要はありませんが、できるだけ早く見つける必要があります! 彼には非常に厳しいスケジュールがあり、非常に長い間待つ余裕はありません。スコアは、プログラムの合計ランタイムに、スコアリング入力に対してプログラムが出力するステップ数を掛けたものになります。最低スコアが勝ちます。 仕様書 ロックは1と0の正方行列です。1と0のランダムな配置に設定され、指定されたコードに設定する必要があります。幸いなことに、サンタは必要なコードを覚えています。 彼が実行できるいくつかのステップがあります。各ステップは任意の連続したサブマトリックスで実行できます(つまり、左上隅と右下隅で完全に囲まれているサブマトリックスを選択する必要があります)(非正方形のサブマトリックスにすることができます): 右に90度回転* 左に90度回転* 180度回転 各行n要素を右または左に循環(ラップ) 各列m要素を上下に循環(ラップ) 水平に反転 垂直に反転 主対角線で反転* メインの対角線を反転* *サブマトリックスが正方形の場合のみ もちろん、彼はマトリックス全体でこれらのステップを実行することもできます。1と0はマトリックス上でのみ交換できますが、正方形の値は直接変更できないため、1と0の数は開始構成と終了構成で同じです。 フォーマット仕様とルール 入力は、必要な妥当な形式の2つの正方行列(開始位置と終了位置)として与えられます。出力は、読み取り可能な形式のこれらの手順のシーケンスである必要があります。これはコードゴルフではないので、簡単に検証可能な形式にしてください。しかし、それは厳密な要件ではありません。必要に応じて、入力の行列の辺の長さを選択できます。 あなたのプログラムは私のコンピューターで実行され(Linux Mint、誰かが気にするならリクエストに応じて正確なバージョンの詳細が利用可能です:P)、コマンドラインで「Enter」を押してからコマンドが終了します。 テストケース 1 0 0 1 0 0 0 0 0 1 1 0 -> 0 0 0 0 0 1 1 0 -> 1 1 1 1 …

7
ヒルベルトのバイナリーホテル
この課題では、2つの特性を満たす機能(または完全なプログラム)を実装するよう求められます。これらのプロパティは次のとおりです。 関数は、非負の整数に対する非負の整数係数を持つ多項式からの単射(可逆)関数でなければなりません。これは、2つの等しくない入力が等しい出力にマップできないことを意味します。 関数は、入力から出力までの「オンビット」の総数を保持する必要があります。つまり、多項式の各係数の1ビットをカウントする場合、それらの合計は出力のバイナリ表現の1ビットの数と同じでなければなりません。例えば9ある1001ことが2つの持つようにバイナリ1ビット。 IO 非負の整数多項式は、特定のポイントの後、すべての整数がゼロになるような非負の整数の無限リストと同じです。したがって、多項式は、無限リスト(おそらく望ましくありませんが)またはリストの末尾の後に暗黙のゼロを持つ有限リストのいずれかで表されます。 多項式と有限リストの主な違いは、リストの末尾にゼロを追加するとリストが変更されることです。 多項式の最後にゼロを追加しても、その値は変わりません: したがって、関数が入力として多項式を表す有限リストをとる場合、ゼロを追加しても結果が変わらないようにする必要があります。 多項式をリストとして表す場合、定数項を表す最初または最後のエントリでそれらを表すことができます。たとえば、次のいずれかの可能性があります。 最初のケースでは、リストの最後にゼロを追加しても結果は変わりません。2番目の場合、リストの先頭にゼロを追加しても結果は変わりません。 もちろん、言語が多項式をサポートしている場合、それらを入力として使用できます。 出力は、任意の標準的な方法による非負の整数出力でなければなりません。 これはコードゴルフであるため、回答はバイト単位でスコアリングされ、バイト数は少ない方が良いでしょう。

13
パスカルプライムですか?
奇数の素数がパスカルの三角形に正確に2回現れることはよく知られています。ただし、パスカルの三角形に正確に2回現れるすべての数値が素数であるとは限りません。これらの数字をパスカル素数と呼びます。 パスカル素数は、パスカルの三角形に正確に2回現れる複合数です。最初のいくつかのパスカル素数は 4, 8, 9, 12, 14, 16, 18, ... あなたの挑戦は、nがパスカル素数であるかどうかに応じて、正の整数nを入力および出力としてtrueまたはfalseにすることです。これはコードゴルフなので、最短のプログラムが勝ちです!

2
シールドウォール
歴史的背景 遮蔽壁は、日付がバックにいることを戦術的な戦争の形成である少なくとも 2500 BC。それは、「壁」を形成するために、彼らの盾と仲間の盾を重ねる戦士で構成されていました。戦術の魅力は、最も熟練していない戦士でさえ、盾と武器を持っていれば壁で戦うことができるという事実に由来しています。壁が近接しているため、動き回るスペースがほとんどなく、戦闘は通常、鋭い武器で戦う必殺の試合になりました。 チャレンジ あなたのタスクは、入力として戦士の2つの配列/リスト/ベクトルを与えられ、戦いの結果を決定するプログラムまたは関数を作成することです。リストはシールドの単一行の壁を表し、特定の表記法に従います。 バイキング: 北欧の戦士たちは激しい戦いを繰り広げました。8世紀後半から11世紀半ばにかけて、デンマークのバイキングが英国王国に侵入し、富と農地を探しました。この挑戦のために、これらはバイキングの戦士です: Jarl:通常、壁の中央から部下を率いているのが見つかりました。ジャールはバイキングの大群のリーダーでした。死ぬために15ダメージを受け、ラウンドごとに2ダメージを与えます。 The Berserker:ファンタジーはバーサーカーのイメージを大きく変えましたが、これらの戦士は盾以外の保護なしでトランスのような怒りで戦うことが知られていました。死ぬために6ダメージを受け、ラウンドごとに3ダメージを与えます。 Chieftain:ザ・チーフタンズが彼らのサービスで無料の男性が持っていた金持ちの男性でした。彼らは通常、戦いで大きな栄光と富を獲得していたでしょう。死ぬまでに10ダメージを受け、ラウンドごとに2ダメージを与えます。 フリーMen:族長に仕えた戦士。彼らは死ぬまで領主のために戦うと誓った。死ぬために8ダメージを受け、ラウンドごとに1ダメージを与えます。 Skald:Skalds、通常バードとして翻訳は、北欧の戦士たちの偉業についての詩、物語や歌を書くために雇われた自由人の男性でした。死亡するのに8ダメージを受け、隣接する各戦士に1ボーナスダメージを与えます。スカルドはダメージを与えません。戦士はこの方法で1つ以上のボーナスダメージを得ることができません。 サクソン: 5世紀にローマ帝国が崩壊した後、サクソン人はヨーロッパ大陸からイギリスに定住するようになりました。この挑戦のために、サクソン人の戦士がいます: EARL:Ealdormen、一般アールズと呼ばれるが、高い貴族のメンバーでした。彼らは通常、大規模な土地を持ち、何百人または何千人もの宣誓者がいました。死ぬまでに20ダメージを受け、1ラウンドにつき1ダメージを与えます。 K夜:より良い用語の欠如のために、騎士は、いくつかの土地を所有していたマイナーな貴族でした。ほとんどの場合、騎士は伯爵の宣誓奉公人でした。死ぬまでに10ダメージを受け、ラウンドごとに2ダメージを与えます。 Warrior:一般的な男性、通常はマイナーな貴族の土地や騎士を務めた農民なし。騎士または伯爵に隣接している場合、戦士には+1のダメージボーナスがあります。死ぬまでに8ダメージを受け、ラウンドごとに2ダメージを与えます。 FYRD:Fyrdは、彼らが壁に戦うために持っていた武器(あるいは武器のような実装農業を)持って来るだろうと自由人のグループのような民兵-、通常は貧しい農民でした。死ぬために5ダメージを受け、ラウンドごとに1ダメージを与えます。 P司祭:司祭は神の言葉の先駆者であり、初期のサクソン文化で高く評価されていました。司祭は死ぬために15ダメージを受け、隣接する各戦士に与えられる最大1ダメージを防ぎます。司祭はダメージを与えません。司祭は戦士への1つ以上のダメージを防ぐことはできません。 壁 壁はそれぞれのセンターで出会う。各ラウンドでは、各戦士はその前にいる戦士にダメージを割り当てます。前に生きている戦士がいない場合、残りのヘルスが最も少ない斜めに隣接する生きている戦士に割り当てます。同点の場合は、壁の端に近い戦士を選択します。 例: Vikings [M,M,M,B,B,C,J,C,B,B,M,M,M] [F,F,F,W,W,K,E,K,W,W,F,F,F] Saxons To make matters easier, let's convert these walls into numbers: Round 0: M M M B B C J C B B …

2
正規表現:平等主義シリーズに一致
前書き 私はここで多くの正規表現の挑戦を見ていませんので、いくつかの正規表現のフレーバーを使用していくつかの方法で行うことができるこの一見単純なものを提供したいと思います。正規表現愛好家にちょっとしたゴルフの時間を提供してくれることを願っています。 チャレンジ 挑戦は、私が「平等主義」シリーズと非常に大まかに言ったものと一致させることです:異なるキャラクターの等しい数のシリーズ。これについては、例を挙げて説明するのが最適です。 一致: aaabbbccc xyz iillppddff ggggggoooooollllllffffff abc banana 一致しない: aabc xxxyyzzz iilllpppddff ggggggoooooollllllfff aaaaaabbbccc aaabbbc abbaa aabbbc 一般化するために、我々は、(フォームの件名を一致させたい任意の文字のリストについては、に、すべてのためにc1)n(c2)n(c3)n...(ck)nc1ckci != ci+1i, k > 1, and n > 0. 明確化: 入力は空になりません。 文字は文字列の後半で繰り返される場合があります(例: "banana") k > 1、したがって、文字列には常に少なくとも2つの異なる文字があります。 ASCII文字のみが入力として渡され、文字が行末記号になることはないと想定できます。 ルール (この非常に明快な規則のブロックについてMartin Enderに感謝します) 答えは、追加のコードを含まない単一の正規表現で構成する必要があります(オプションで、ソリューションを機能させるために必要な正規表現修飾子のリストを除く)。ホスティング言語でコードを呼び出すことができる言語の正規表現フレーバーの機能(Perlのe修飾子など)を使用しないでください。 このチャレンジの前に存在していた正規表現フレーバーを使用できますが、フレーバーを指定してください。 たとえば、Pythonを使用している場合、正規表現がre.matchではなくre.searchで使用されていると想定してください。正規表現は、有効な平等主義の文字列の文字列全体と一致し、無効な文字列の一致を生成しない必要があります。必要な数のキャプチャグループを使用できます。 入力は常に、ラインターミネータを含まない2つ以上のASCII文字の文字列であると想定できます。 これは正規表現のゴルフであるため、バイト単位の最短正規表現が優先されます。言語で/.../正規表現を表すために区切り文字(通常は)が必要な場合は、区切り文字自体をカウントしないでください。ソリューションで修飾子が必要な場合は、修飾子ごとに1バイトを追加します。 基準 これは昔ながらのゴルフですから、効率を忘れて、正規表現をできるだけ小さくしてください。 使用した正規表現フレーバーに言及し、可能であれば、実際の表現のオンラインデモを示すリンクを含めてください。

30
合計がnになる個別の整数の最大数を見つける
タスク 入力の正の整数n(1から使用言語の制限まで)が与えられると、合計がである個別の正の整数の最大数を返すか出力しnます。 テストケース fタスクに従って有効な関数を定義しましょう。 f1から始まるのシーケンス 1, 1, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, ... より大きなテストケースとして: >>> f(1000000000) // Might not be feasible with brute-forcers 44720 テストコード 明示的に指定されていないテストケースの場合、コードの出力は次の結果と一致する必要があります。 public class Main { public static void …

8
ソースを一度に1ビットずつ出力する
空ではないプログラムまたは関数を作成し、呼び出されると単一の値1または0を出力し、複数回呼び出されると、出力番号はプログラムのソースコードのバイナリ表現を生成します(コードのコンパイル元と同じコードページで) / interpreted)。 たとえば、ソースコードがabc(ASCII)の場合、出力は次のようになります。 1st call: 0 // ASCII letter 'a' 2nd call: 1 3rd call: 1 4th call: 0 5th call: 0 6th call: 0 7th call: 0 8th call: 1 9th call: 0 // ASCII letter 'b' 10th call: 1 11th call: 1 12th call: 0 13th call: …

7
最長のハイパーキューブパス
チャレンジ 同じ長さの2つの異なるビット文字列が与えられます。(たとえば、000および111。)あなたの目標は、次のような一方から他方へのパスを見つけることです。 各ステップで、あなたは(あなたがから行くことができる唯一の1ビットを変更する000のいずれかに001、010、100)。 同じビット文字列に2回アクセスすることはできません。 これらの制約の下で、パスは可能な限り長くなります。 たとえば、から000に進むと111、次のパスを取ることができます 000, 001, 011, 010, 110, 100, 101, 111 これは、長さ3の8ビット文字列すべてにアクセスするため、可能な限り長くする必要があります。 ルール 標準の抜け穴が適用されます。 入力は、ゼロと1の2つの文字列、またはゼロと1の2つの配列、またはブール値の2つの配列として受け取ることができます。 入力を正しいバイナリ表現を持つ2つの整数(書き込みおよびas および無効)として受け取ることはできません。00011107 必要に応じて、ビット文字列の長さを入力として使用できます。 プログラムは、一度に1つずつアクセスしたビット文字列を出力するか、アクセスしたビット文字列の配列を返すことにより(それぞれ入力と同じ形式で)パスを出力できます。 出力には、パスの開始と終了(入力)が含まれている必要があります。 これはcode-golfで、バイト単位の最短コードが勝ちです。 例 0 1 -> 0, 1 10 01 -> 10, 00, 01 or 10, 11, 01 000 111 -> any of the following: 000, 100, 110, …

9
投票率に対する回答
この質問は、投票数と回答数が等しい質問を見るのが好きだという事実に触発されています... そこで、y'allの簡単なstack-exchange-apiチャレンジを以下に示します。 チャレンジ: 与えられたcodegolf.stackexchange問題の票と回答の数(例えば間の比出力、質問ID votes/answers)。 詳細: インターネットにアクセスできますが、アクセスできるのはstackexchange.comそのサブドメインのみです。URL短縮サービスは使用できません。 任意の標準形式で入力および出力を行うことができます。 比率は、10進数で10進数として出力する必要があり、10進数の後に少なくとも4つの{正確な}桁があります(ゼロは切り捨てられる場合があります)。 質問に回答がない場合、プログラムは未定義の動作を引き起こす可能性があります。 score質問のを投票数として使用する必要があります。こちらを参照してください。 これはcode-golfで、各言語の最小バイトがその言語で勝ち、全体で最小バイトが勝ちます。 以下にサンプルプログラムを示しPython 3 + requestsます。 import requests import json id = input("id> ") url = "https://api.stackexchange.com/2.2/questions/" + id + "?site=codegolf" content = requests.get(url).text question = json.loads(content)["items"][0] print(float(question["score"]) / question["answer_count"])

20
庭の建築-ASCIIスタイル
家の外に10x10メートルの正方形の庭があります。草を植えてテラスを作りたいです。我々は決定しているどのように庭を分割するために、私たちは、テラスVS草の量との比率を決めていません。 それを視覚化するのに助けが必要であり、ASCIIアートは明らかにそれを行うための最良の方法です。 チャレンジ: 庭の何パーセントがテラスになるべきかを表す包括的範囲[ 0、100 ](またはオプションで10進数[0、1])の整数を取ります。 1平方メートルのテラスはダッシュ-またはバーで表示されます|。1平方メートルの草はハッシュマークで表され#ます。 テラスの量が50%以下の場合、庭は左下隅からバーで覆われ、垂直方向、次に水平方向に埋められます。 テラスの量が50%を超える場合は、デッキを別の方法(バーではなくダッシュ)にして、左下隅から開始し、水平に、次に垂直に塗りつぶします。 例: N = 25% ||######## ||######## ||######## ||######## ||######## |||####### |||####### |||####### |||####### |||####### N = 75% ########## ########## -----##### ---------- ---------- ---------- ---------- ---------- ---------- ---------- N = 47% ||||###### ||||###### ||||###### |||||##### |||||##### |||||##### |||||##### |||||##### |||||##### |||||##### N …

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