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

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

6
クインを反転させる!
私たちは皆、クインが何であるかを知っています。反転 QUINEは、そのソースコードを読み取ることなく、そのソースコードの逆数を出力し、空でないプログラムであり、印刷可能なASCII文字(貫通空間を単独で構成します~)。 ここでは、「ソースコードの逆」とは、以下のことを意味します。あなたのプログラムの出力は、各印刷可能なASCII文字含まれている必要があります(M - C)回、cは回数が文字コード内で発生した、と言っているmが最大ですコード内で文字が繰り返される回数。 (言い換えれば、コード + 出力 = m回の印刷可能ASCIIの順列です。) たとえば、プログラムがの12345場合、m = 1であり、この文字列の順列を出力する必要があります。 !"#$%&'()*+,-./06789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ プログラムがのAAB場合、m = 2であり、次の順列を出力する必要があります。 !!""##$$%%&&''(())**++,,--..//00112233445566778899::;;<<==>>??@@BCCDDEEFFGHHIIJJKKLLMMNNOOPPQQRRSSTTUUVVWWXXYYZZ[[\\]]^^__``aabbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~ 2つの欠損Asと1 つの欠損があることに注意してくださいB。 すべての印刷可能なASCII文字を含み、何も出力しないプログラムは有効な逆クイン(m = 1を満たす)ではありませんが、そのような答えはその長さを考えるとそれほど競争的ではありません。 上記のパラグラフで説明されているように、逆クインであるプログラムを作成します。これはcode-golfなので、バイト単位の最短プログラムが勝ちます。幸運を!

8
包含-除外の視覚化
包含-除外を使用すると、他の値のいくつかを知っているセット間のいくつかの結合および交差のサイズを計算できます。私はそれを正確に説明しませんが、あなたの課題は、ベン図で包含/除外を視覚化することです。 私はいいから、円ではなく長方形を使うことになります。 任意の妥当な形式(4タプルのリスト、ペアのペアのリスト、ペアのリストなど)で、左上隅と右下隅の座標で示される長方形のリストが表示されます。すべての座標が負ではなく、言語の(合理的な)数値範囲内であると想定できます(128未満の場合はそれを指定してください)。左を含むか左を排他的にするか、右を含むか右を含むかを選択できます。選択した形式に関係なく、すべての長方形が少なくとも1x1であると想定できます。 次に、k選択する空白文字以外の単一の文字を使用して、画面上の各長方形(ASCIIキャンバス)を描画します。 ただし、2つの長方形が重複する場合は常に、重複する領域が別の非空白文字l != kで描画され、選択する必要があります。 3つの長方形が重なるときはいつでも、重なり合う領域はで描画されk、奇数の長方形をカバーする場合、、kおよび偶数の場合、が必要lです。 背景は単一の空白(0x20)でなければなりません。 テストケース(k = "#", l = ".") 0 0 9 9 1 1 10 10 2 2 11 11 ######### #........# #.#######.# #.#######.# #.#######.# #.#######.# #.#######.# #.#######.# #.#######.# #........# ######### 1 1 3 3 2 2 4 4 ## #.# ## 1 …

2
ビット大陸を作る
ビットのマトリックス(少なくとも1つを含む1)があると想像してください。 0 1 0 1 1 0 1 0 0 1 0 0 1 0 1 0 0 1 0 1 1 0 0 0 1 0 1 1 0 1 0 1 0 1 1 0 0 1 0 0 1 1 0 1 0 0 0 1 0 …

15
文字列を逆っぽくします!
あなたのタスク:ASCII文字のみを含む文字列が与えられたときに、逆方向に文字列を出力/返すプログラム/関数を作成します。 例: 1)入力 Hello, World! 2)入力で一意の文字に番号を付けます。(|読みやすいようにパイプ()で区切られた入力文字列) H|e|l|l|o|,| |W|o|r|l|d|! 1 2 3 4 5 6 7 8 9 10 3)重複する文字の場合、その文字の最初の出現箇所を見つけ、最初の文字と同じ番号で重複文字に番号を付けます。 H|e|l|l|o|,| |W|o|r|l|d|! 1 2 3 3 4 5 6 7 4 8 3 9 10 4)文字列を逆にしますが、数字は逆にしません。 !|d|l|r|o|W| |,|o|l|l|e|H 1 2 3 3 4 5 6 7 4 8 3 9 10 …
11 code-golf  string 

7
シンプルなDTMFデコード:電話キーを見つけてください!
これは単純な挑戦であり、うまくいけば創造的な答えが得られるかもしれません。 Wikipediaの引用:「デュアルトーン多重周波数信号(DTMF)は、電話機器と他の通信デバイスおよび交換センターとの間の電話回線で音声周波数帯域を使用する帯域内通信信号システムです。」 仕事 次の表の列と行の頻度を表す2つの整数が与えられた場合、タスクは対応するキーを出力することです。 | 1209 Hz | 1336 Hz | 1477 Hz -------+---------+---------+--------- 697 Hz | 1 | 2 | 3 770 Hz | 4 | 5 | 6 852 Hz | 7 | 8 | 9 941 Hz | * | 0 | # 例 入力がの[ 1209, 852 …

18
空白を埋めてください!
(いいえ、これもこれらのいずれでもありません) 文字列と文字列のリストを指定して、入力文字列のすべての空白を対応する文字列で埋めます。 入出力 入力文字列には、アルファベット文字、スペース、およびアンダースコアのみが含まれます。空ではなく、アンダースコアで始まりません。つまり、入力文字列は正規表現と一致します^[a-z A-Z]([a-z A-Z_]*[a-z A-Z])?$ 入力リストのすべての文字列は空ではなく、英数字とスペースのみが含まれています。つまり、正規表現に一致し^[a-z A-Z]+$ます。 ブランクとは、アンダースコアが前後に連続しない連続したアンダースコア(_)シーケンスです。 入力文字列にはn正の整数の空白がn含まれ、文字列のリストには文字列が正確に含まれnます。 出力はk、入力文字列の各-th空白をk文字列の入力リストの-th文字列で置き換えることにより取得されます。 例 入力文字列"I like _____ because _______ _____ing"と文字列のリストを指定すると、["ice cream", "it is", "satisfy"]次のように出力を見つけることができます。 最初の空白はの直後にあり"like "ます。を"ice cream"取得するにはを入力します"I like ice cream because ______ _____ing"。 2番目の空白はの直後にあり"because "ます。を"it is"取得するにはを入力します"I like ice cream because it is _____ing"。 3番目の空白はの直後にあり"is "ます。を"satisfy"取得するにはを入力します"I like ice cream because it is …

14
ASCII飛行機バナー
二つの入力を考える-そのうちの一つ(改行を除く、スペースを含む)が非空で印刷可能なASCII文字列、あなたの選択(2つの異なる、一貫した値の他のビーイングの1 1 / 0、l / r、left / right、など) - ASCIIアート飛行機出力左または右を指す文字列のバナー。一貫性を保つためleft、rightこのチャレンジの説明全体で使用します。 平面は|-DI>-/(left)または\-<ID-|(right)のいずれかです。バナーはクリアなので、左から右(left)または右から左(right)のいずれかのスペースで区切られた入力文字列の文字で構成され、形状のボックスで囲まれています /--/ ---< < \--\ または \--\ > >--- /--/ 注メッセージの先頭/末尾との間に1つのスペースがなければならない>、<文字。 たとえば、メッセージHAPPY BIRTHDAY!と方向はleft次のとおりです。 /-------------------------------/ |-DI>-/---< H A P P Y B I R T H D A Y ! < \-------------------------------\ これがメッセージPPCGと方向rightです。バナーのこちら側から見ると、文字は「後方」に表示されることに注意してください。 \---------\ > G C P P >---\-<ID-| /---------/ …

1
スタッキンボード
できるだけ小さなスペースにスタックする必要があるボードがたくさんあります。残念ながら、10枚以上積み重ねるとボードは倒れます。ボードを積み重ねる方法を教えてくれるプログラムが必要です。10枚以上のボードを積み重ねたり、ボードを空のスペースにぶら下げたりせずに、できるだけ水平方向のスペースを少なくしてください。 あなたのタスク: ボードの長さを含む配列が与えられたときに、ボードを積み重ねる方法をASCIIアートとして出力するプログラムまたは関数を作成します。空のスペースにぶら下がっているボード。ASCIIアートには、ボードの構成が表示され、それぞれ異なる文字を使用して表示されます。最大20のボードがあります。たとえば、入力が[2,2,4,2,2,4,4,4]の場合、可能な出力は次のとおりです。 dhh dgg dff dee abc abc abc abc これは安定した構成です(ただし、これは実際には0.1秒以内に落ちます)。 入力: ボードの長さを示す、最大20個の整数を含む配列。 出力: 上記のように、ボードの構成を示すASCIIアート。 テストケース: テストケースには他のソリューションがあり、各ボードに表示される文字が異なる場合があることに注意してください。 [12,2,2,2,3,4,4,8,8] -> ffgghhiii ddddeeeeeeee bbbbbbbbcccc aaaaaaaaaaaa [4,4,4,4,4,4,4,4,4,4,4,4] -> llll aaaa cfghk cfghk cfghk cfghk debij debij debij debij [4,4,4,4,4,4,3,3,3,2,2,2,1] -> jjml iiil hhhk gggk ffff eeee dddd cccc bbbb aaaa 得点: これはcode-golfで、バイト単位の最低スコアが勝ちです

1
フロアプランニング!
免責事項:この質問の中で語られたストーリーは完全に架空のものであり、イントロを提供する目的でのみ発明されました。 私には建築家の友人がいて、コードゴルフの概念とこのサイトを彼に説明した後、彼は実際に変更に役立つものをコーディングすべきだと言った。私は彼に何が役に立つと思うかを尋ねました、そして、建築家である彼は、彼が特定のサイズの家の中で特定のサイズの部屋のためのすべての可能な配置を彼に与えたフロアプランナーを持つことを楽しむと答えました。code-golfは結局役に立たないということを証明し、このプログラムを可能な限り最小のバイト数で提供すると思った。 あなたのタスク: 家全体の大きさを含む配列Dと、室内の部屋の大きさを含む2番目の配列Rが与えられたときに、ASCIIアートとして、家の中の部屋のすべての可能な構成を出力するプログラムまたは関数を記述します。 すべての部屋と家の外壁は、標準のASCIIボックスとして形成する必要があります。垂直壁の場合はシンボル、水平壁の場合は-シンボル、角の場合は+シンボル。たとえば、寸法が[4,4]の家は次のようになります。 +----+ | | | | | | | | +----+ ご覧のとおり、角は一連の寸法の一部としてカウントされません。-または|の数 辺を形成する文字は、寸法で指定された数と等しくなければなりません。部屋は壁を共有したり、家と壁を共有したりできます。部屋には小さな部屋を含めることはできません。 たとえば、構成 +--+---+-+ | | | | | | | | +--+---+ | | | | | +--------+ D = [5,8]およびR = [[2,2]、[2,3]]に有効です。 入力: 2つの配列。1つには家の寸法である2つの整数が含まれ、もう1つには部屋の寸法を含む一連の配列が含まれます。 出力: 文字列として可能なすべての家の配列、または一貫した方法で区切られたすべての可能な家を含む文字列。まったく同じ構成のローテーションは1回しかカウントされないことに注意してください。 テストケース: D R -> Output [4,3] [[2,1],[4,1]] …

9
奇妙なオートマトンを実装する
私はセルオートマトンで遊んでいて、いくつかの興味深い動作をしているものを見つけました。仕組みは次のとおりです。 バイナリ文字列を左から右に読み取ります。1その後に2他の値が続く場合0、結果にa を追加して読み取りを続けます。に遭遇した場合0(または、残っている値が3つ未満の場合)、現在の値とaを追加して1読み取りを続行します。文字列の最後1に、結果にシングルを追加します。 これは、1世代の解決例です 01011111 ^ 最初に遭遇する0ので01、結果に追加します 01011111 ^ 01 ここでa 1が発生したため、ゼロを追加して次の2つの値をスキップします 01011111 ^ 010 私たちは別の1ものに遭遇するので、同じことをします 01011111 ^ 0100 現在1、ジャンプするのに十分ではない別のスペースがあるので、現在のセルと1(この場合は11)を追加します 01011111 ^ 010011 最後にいるので、単一を追加して1この世代を終了します 01011111 ^ 0100111 仕事 任意の妥当な形式の入力を指定すると、オートマトンの1世代を計算する関数またはプログラムを作成する必要があります。 これはコードゴルフの質問なので、回答はバイト単位で記録され、バイト数は少ない方が良いでしょう。 サンプル実装 Haskellのサンプル実装を次に示します(関数を定義しますdが、プログラムは無限に繰り返しを出力します)。 d('1':_:_:x) = "0" ++ d x d(a:x) = a:'1':d x d x = "1" r x = x:map …

4
これは……要塞です!
Fortressは、Sun Programming Language Research Group(RIP Fortress)によって開発された言語であり、独自の特性があり、プログラムをさまざまなフォントスタイル(太字、太字、斜体など)でレンダリング(「強化」)することができました。ローマなど)。目標は、HTMLマークアップで1文字のFortress変数を表すことです。 1文字の変数の強化がどのように機能したかを以下に示します(コードゴルフの目的でドキュメントを簡略化/変更)。 変数が繰り返し大文字(つまりZZ)の場合、黒板の太字(𝔸𝔹ℂ𝔻𝔼𝔽𝔾ℍ𝕀𝕁𝕂𝕃𝕄ℕ𝕆ℙℚℝ𝕊𝕋𝕌𝕍𝕎𝕏𝕐ℤ)でフォーマットされます。 変数の前に下線が付いている場合、変数はローマ字フォントでレンダリングされます(そのまま) 変数の後に下線が続く場合、変数は太字フォント(<b>v </b>)でレンダリングされます 変数の前にも下線も付いていない場合、変数は斜体フォント(<i>v </i>)でレンダリングされます 黒板の太字のコードポイントは、𝔸:1D538、𝔹:1D539、 ℂ:2102、𝔻:1D53B、𝔼:1D53C、𝔽:1D53D、𝔾:1D53E、ℍ:210D、𝕀:1D540、𝕁:1D541、𝕂:1D542、𝕃:1D543、𝕄:1D544、ℕ:2115、𝕆:1D546、ℙ:2119、ℚ:211A、ℝ:211D、𝕊:1D54A、𝕋:1D54B、𝕌:1D54C、𝕍:1D54D、𝕎:1D54E、𝕏:1D54F、𝕐:1D550、ℤ:2124。これらはプログラム内でそれぞれ1バイトとしてカウントされます(選択した言語がこれらの文字をまったく処理できる場合) 入力は、繰り返されるASCII大文字、またはアンダースコアなし、先頭アンダースコア、末尾アンダースコア付きの単一ASCII文字のいずれかです(AKA _a_は入力されません)。これはコードゴルフですので、バイト数が最も少なくなります! テストケース: a => <i>a</i> BB => 𝔹 c_ => <b>c</b> _d => d E => <i>E</i> G_ => <b>G</b> _H => H ZZ => ℤ リンク:仕様、バージョン0.1 alphaの直接ダウンロード。 参照実装(これはFortressにありますが、Fortressはほとんどの二重文字を好まないため、この実装はDにあります): dstring fortify(string arg) { import …
11 code-golf 

7
周期の配列を数える
period文字列は、任意の部品そのオーバーハングを無視し、自身と一致するように文字列の最短非ゼロのシフトです。そのため、たとえばabcabcabperiodがあり3ます。慣例により、このようなシフトがない場合、文字列の長さはピリオドに等しいと言います。期間だから、abcdeIS 5との期間aです1。 より正式な用語では、文字列の期間はS最小であるi > 0ためS[1,n-i] == S[i+1,n](からインデックス付け1)。 2の長さの累乗の特定の文字列Sについて、2の長さの累乗のすべてのプレフィックスの周期を計算します。たとえば、検討してくださいS = abcabcab。計算する期間は次のとおりです。 'a', 1 'ab', 2 'abca', 3 'abcabcab', 3 実際には、ピリオドの配列、つまりを出力するだけです[1, 2, 3, 3]。 2の与えられた正のべきのために、nすべての可能なバイナリストリングを考えてくださいS。バイナリ文字列は単に1sと0sの文字列であるため、まさに2^nそのような文字列が存在することを思い出してください(つまり2、べきですn)。それぞれについて、この周期の配列を計算できます。 課題はn、入力として(2のべき乗)を受け取り、そのような配列がいくつあるかを計算するコードを記述することです。 答えn = 1, 2, 4, 8, 16, 32, 64, 128は: 1, 2, 6, 32, 320, 6025, 216854, 15128807 の個別の周期配列の完全なセットn = 4は次のとおりです。 1, 1, 1 1, 1, …

30
"こんにちは世界!" (強盗のスレッド)
これが強盗のスレッドです。警官のスレッドはこちらです。 あなたの課題は、警官のスレッドからひびのない提出物を取得し、どの入力または入力に対してプログラムが印刷Hello, World!するか、改行を見つけることです。大文字、スペース、句読点は正確でなければなりません。 コードを解読したら、警官の提出についてコメントしてください。

3
要求された天気に合わせて部族のトーテムをセットアップする
スー族の村があります。トーテムがあります: __ ___| |___ \/ \ / \/ /\ ``| |`` /\ /^^\ | | /^^\ / /\ \ | | / /\ \ '''''''''''''''''''''''''''' トーテムにより、スーはさまざまなタスクを支援するために天気をマスターできます。村人が適切な天気を呼び起こすためにトーテムを適切に装飾するのを助けてください。トーテムにはいくつかの部分があります。 __ ___|AA|___ \/ \BBBBBBBB/ \/ /\ ``|CC|`` /\ /^^\ |DD| /^^\ / /\ \ 13 |EE| 42 / /\ \ '''''''''''''''''''''''''''' A以下のためにある日 ()や雲 ww …

1
サイクリックポリグロットチャレンジ(警官)
サイクリックポリグロットチャレンジ これは警官のスレッドです。ここで強盗スレッドを見つけることができます。 サイクリックポリグロット N要素の巡回ポリグロットは、N個の異なる言語で実行できる完全なプログラムです。各言語で、プログラムが入力なしで実行される場合(この例外の影響を受ける可能性があります)、言語の名前をSTDOUTに出力する必要があります。具体的には、プログラムがK番目の言語で実行される場合、(K + 1)番目の言語の名前を出力する必要があります。プログラムがN番目の言語(つまり、N要素サイクルの最終言語)で実行される場合、最初の言語の名前を出力する必要があります。 例が役に立つかもしれません。 a = [[ v = 7, puts('Befunge') ]] __END__ = print("Ruby") -->*+:292*++,,@ --3 9 --7 * --^,:-5< Luaでこのプログラムを実行すると、文字列「Ruby」が出力されます。このプログラムをRubyで実行すると、文字列「Befunge」が出力されます。このプログラムをBefungeで実行すると、文字列「Lua」が出力され、サイクルが完了します。このプログラムは、Lua、Ruby、およびBefungeで構成される3サイクルを構成します。 同じ言語をサイクルで2回使用することはできません。また、同じ言語の異なるバージョン(Python 2とPython 3など)を同じサイクルで使用することはできません。 警官 課題は、Nが少なくとも2であるNサイクリックポリグロットを作成することです。その後、プログラムにいくつかの文字を追加、置換、削除して、Mサイクリックポリグロットを作成する必要があります。次に、短いNサイクリックポリグロット(およびそれが実行される言語)、および長いポリグロットを生成するために変更した文字数を投稿する必要があります。スコアはN(短いサイクルの言語の数)です。 強盗はあなたの長いサイクルを特定しようとします。7日後、誰もあなたのソリューションを正常にクラックできなかった場合、あなたはそれが安全であると宣言して答えを編集する必要があります。この時点で、より長いMサイクリックポリグロットも投稿する必要があります。 強盗 警官のNサイクリックポリグロットと、ポリグロットサイクルを大きくするために追加された文字数を考えると、目標はその大きなサイクルを作ることです。あなたは多くの文字を追加、削除、またはとして置き換えることにより、長いサイクルを作り出すことができる場合は警官が行ったように文字以下、あなたは警官のポリグロットを割っています。スコアは、作成した新しいサイクルの長さです。新しいポリグロットは、警官の秘密のポリグロットと同じである必要はありません。既存のものよりも大きくする必要があるだけです。 ソリューションもクラックされる可能性があります。別の強盗がやって来て、同じ警官のポリグロットから始まって、あなたよりも厳密に長いサイクルを生成すると、彼らはあなたのポイントを盗んだ。 有効なプログラミング言語 この課題は、他の参加者が使用するプログラミング言語を推測することを間接的に伴うため、この課題のためのプログラミング言語の定義は、通常の定義よりも少し厳密になります。この課題で使用されるプログラミング言語は、次のすべての条件を満たす必要があります。 言語はプログラミング言語に必要な通常のPPCGを満たさなければなりません。 言語には、このチャレンジが投稿された時点で、Wikipediaの記事、Esolangsの記事、またはRosetta Codeの記事が必要です。 言語には、自由に利用できるインタプリタまたはコンパイラが必要です。 最終ノート 記述するコードは、実行するすべての言語のスタンドアロンプ​​ログラムである必要があります。関数またはコードスニペットは許可されていません。 プログラムには、STDINからの入力はありません。同様に、プログラムはSTDERRに何も出力しません。 警官のスコアは、彼らが投稿した多言語のサイクル内の言語の数です。警官は、投稿されたポリグロットが正しく実行される言語と、より長いポリグロットを生成するために追加された文字数を投稿する必要があります。彼らは、答えが安全になるまで、長い隠れた多言語が実行されるたびに言語を投稿する責任を負いません。 強盗のスコアは、変更されたポリグロットが実行される言語の数です。警官と同様に、強盗はポリグロットが正しく実行される言語のリストを投稿する必要があります。 変更された文字の数は、レーベンシュタイン距離で計算する必要があります。

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