プログラミングパズルからコードゴルフまで


74

あなたの仕事は、正確な文字列を出力するプログラムを書くことProgramming Puzzlesです(末尾の改行はオプションです)が、すべてのスペース、タブ、改行が削除されると、出力しますCode Golf(末尾の改行はオプションです)。

バイトカウントは、最初のプログラムのカウントであり、そこにはまだスペースがあります。

ノート

  • のスペースはCode Golf Programming Puzzles削除の一部として削除されるため、それに応じて計画してください。

  • 0x09、0x0A、および0x20がそれぞれタブ、改行、またはスペースではないエンコーディングでは、これらの文字は削除されます。

  • あなたのコードが

    42  $@ rw$
    @42
    

    その後、それは出力する必要がありますProgramming Puzzles。また、同じ言語で、

    42$@rw$@42
    

    出力する必要がありますCode Golf

これはなので、バイト単位の最短コードが勝ちです!幸運を!


3
のスペースCode Golfも削除されProgramming Puzzlesます。
colsw

2
これは少なくともWhirlWhitespaceでは不可能です。
エンジニアトースト

13
賛成票は何ですか?
OldBunny2800

12
@ OldBunny2800良い質問です。私はそれを尋ね続けますが、コメントは削除されます
Programmer5000

12
賛成票は、入力と出力の不足、および入力と出力のフォーマットの制限に対するものです。「ルール」とラベル付けされたセクションに、あなたが0票を投じるチャレンジについて明白だと思う項目の箇条書きのリストがある場合、100%。CompSciの人々とのプレゼンテーションがすべてです。一見馬鹿げた質問を考えて、バイトを節約するか、その愚かさに対抗しようとするなら、あなたは素晴らしい質問ライターになります。
魔法のタコUr

回答:


65

Python 2、50バイト

print["Code\40Golf","Programming Puzzles"][" ">""]

オンラインでお試しください!

すべてのスペースを削除した場合:

print["Code\40Golf","ProgrammingPuzzles"]["">""]

オンラインで試してみてください!

Stephen Sに3バイト、Erik the Outgolferに1を感謝します。


2
くそ、忍者![回答を投稿]をクリックしようとしていました。+1
HyperNeutrino

1
あなたは私の友人の脳を壊しただけだと思います。これはどのように機能しますか?
-Stevoisiak

11
@StevenVascellaroそれは本当に簡単です。最初のケースで" ">""True、辞書順でスペースが空の文字列よりも大きいため、を返します。2番目の場合、それよりも大きくなることはできないため、を"">""返しますFalseTrueそしてFalseちょうど実際にある10ばかりに、それぞれboolのデータ型の代わりに、intまたはlong。最初のケースでは、スペースが保持されるため、インデックス1のアイテム"Programming Puzzles"はそのまま返されます。2番目のケースでは、スペースがなくなっているため、スペースを保持するため\x20にインデックス0のアイテムにあります"Code\x20Golf"
エリックアウトゴルファー

9
@StephenSいいえ、JavaScriptとは異なり、Pythonは暗黙的なキャストに執着していません。
メゴ

1
Pythonの強迫観念の欠如が気になる場合。
ジョンドヴォルザーク


22

05AB1E、15 バイト

”ƒËŠˆ”" "v”–±ÇÀ

オンラインでお試しください!

説明

”ƒËŠˆ”           # push "Code Golf"
      " "v       # for each character in the string " " do
          ”–±ÇÀ  # push "Programming Puzzles"
                 # implicitly output top of stack

...わかりません。これは辞書圧縮などを使用しますか?
LegionMammal978

@ LegionMammal978確かにそうです。
-NoOneIsHere

@ LegionMammal978:実際に辞書圧縮を使用します。
エミグナ

5
@Emignaさて、最後にチェックしたので、これらの文字列のいずれも4バイトに収まらない可能性があります
。p– LegionMammal978

1
@ Draco18s:Kevinは、使用方法のより良いアイデアを得るために使用できるヒントページで素晴らしいチュートリアルを書いています。
エミグナ


16

CJam、38バイト

" ""Programming Puzzles""Dpef!Hpmg":(?

オンラインでお試しください!またはスペースを削除して

説明

" "                    e# Push this string.
"Programming Puzzles"  e# Push "Programming Puzzles".
"Dpef!Hpmg":(          e# Push "Dpef!Hpmg" and decrement each char, giving "Code Golf".
?                      e# If the first string is true (non-empty) return the second string,
                       e#   else return the third.

プログラムにスペースが含まれているかどうかによって、最初の文字列が真実か偽かが決まります。


27
あなたのコードは悲しいです:(
ローマングレーフ

14
印刷できないものを使用したい場合"Bncd\x19Fnke":)は、代わりに幸せなコードです(置き換えます\x19)。
エリックアウトゴルファー

15

ゼリー、18バイト

“½ċṭ6Ỵ»ḷ
“Ñ1ɦ+£)G»

オンラインでお試しください!

説明

書かれているプログラムでは、最初の行は決して実行されないヘルパー関数です。2行目(プログラムの最後の行)はメインプログラムであり、文字列の圧縮表現です"Programming Puzzles"(その後、暗黙的に印刷されます)。

改行を削除すると、全体が1つの大きなプログラムになります。“½ċṭ6Ỵ»は、文字列の圧縮表現です"Code Golf"右側の引数を評価しますが無視し、実行前と同じ値を残します。関数の副作用(これまでに行ったこと)を評価するために使用できますが、ここにあるように、コードを効果的にコメントアウトするためにも使用できます。

興味深いことに、ここの実際のロジックは05AB1Eエントリよりも短くなっていますが、文字列コンプレッサーはこれらの特定の文字列を圧縮するのが苦手なので、コード全体が長くなります。


これは有効であることがわかりました。
エリックアウトゴルファー

私の知る限り、これらの文字の一部は、よく知られているエンコードを想定して、1バイトを使用して保存できます。UTF-8では36バイトになります...間違っていますか?
ステフェン

@steffen:Jellyは独自の文字エンコーディングを使用します。このエンコーディングでは、使用する256種類の文字すべてを1バイトに格納できます。(既存のエンコーディングを使用するのではなくこれを行う唯一の理由は、読みやすさのためです!読みにくい。)

13

ゼリー、17バイト

“Ñ1ɦ+£)G“½ċṭ6 Ỵ»Ṃ

オンラインでお試しください!

使い方

他のゼリーの回答のように、文字列Programming PuzzlesCode GolfÑ1ɦ+£)G½ċṭ6Ỵエンコードします。文字列リテラルを開始し、1つの文字列を別の文字列から分離しますが、リテラルの種類(辞書ベースの圧縮)を選択します。»

["Programming Puzzles", "Code Golf"]

次に最小値を取り、Code Golfを生成します

ただし、½ċṭ6との間にスペースを追加すると、まったく異なる2番目の文字列が取得され、リテラルは次のように評価されます

["Programming Puzzles", "caird coinheringaahing"]

以来cairdのcoinheringaahingがより辞書大きいパズルプログラミング代わりに最初の文字列を選択します。


ちょうど同じこと“½ċṭ6Ỵ“Ñ1ɦ +£)G»Ṁ
ジョナサンアラン

私の知る限り、これらの文字はいずれも、よく知られているエンコーディングを想定して1バイトを使用して保存することはできません。UTF-8では34バイトになります...間違っていますか?
ステフェン

@steffen Jellyは、1バイトとして認識される256文字のそれぞれをエンコードするカスタムコードページを使用します。
デニス

@デニスは明確にしてくれてありがとう。
ステフェン

13

Javascript、46 43 42バイト

x=>" "?"Programming Puzzles":"Code\40Golf"

console.log((x=>" "?"Programming Puzzles":"Code\40Golf")())
console.log((x=>""?"ProgrammingPuzzles":"Code\40Golf")())


5
\x20最初の文字列のをスペースに置き換えることができます。
シャギー

うまくやった。これには末尾が必要;ですか?
-ricdesi

@ricdesiいいえ、ありません。

3
@ricdesiこれはcodegolfであるため、プログラムが実行されると機能します。;sは、JavaScriptでは必要ない場合があります。
スティーブン

2
に置き換え\x20\40バイトを保存できます:
ETHproductions

10

Wolfram言語、62バイト

"Programming Puzzles"[ToExpression@"\"Code\\.20Golf\""][[0 1]]

のスペース[[0 1]]は暗黙的な乗算であるため、これはと同等[[0]]です。スペースなしで、01ただ1です。この式の0番目と1番目の部分は、必要な文字列です。

疑わしい有効性の別の解決策(44バイト、2つはKelly Lowderによって保存されました):

"Programming Puzzles"["Code\.20Golf"][[0 1]]

\.20Mathematicaの環境に入力されたとき、すぐにスペースに置き換え、それは他の空間と一緒に削除されるかどうかは明確ではありませんます...


1
これをMathematicaに貼り付ける(または入力する)とすぐに(クラウドベースかどうかにかかわらず)エスケープシーケンス\:0020がスペースになり、削除されるため、これが適切かどうかわかりません。また、\.202文字短くなります。 "Programming Puzzles"["Code"<>FromCharacterCode@32<>"Golf"][[01]]動作します。
ケリーロウダー

1
@KellyLowder、うーん、それは良い点です。この問題を回避する別のソリューションを追加しました。(\.20提案をありがとう—どのようにそれを見つけましたか?私はドキュメント全体を精練したと思いました…)
木ではありません

1
\.20タイプミスをして見つけました。2桁の文字コードでのみ動作するようです。私はそれがドキュメントにあるとは思わない。
ケリーロウダー

8

Excel-56バイト

=IF(""=" ","Code"&CHAR(32)&"Golf","Programming Puzzles")

他のほとんどの回答と非常によく似ています...ここで特に素晴らしいことはありません。


8

Haskell、48バイト

a _="Programming Puzzles";a4="Code\32Golf";f=a 4
a_="ProgrammingPuzzles";a4="Code\32Golf";f=a4

f対応する文字列を返す関数を定義します。

参考までに、古いバージョンは次のとおりです。

Haskell、49/47バイト

f""="Code\32Golf";f(_)="Programming Puzzles";f" "

スペースを削除して

f""="Code\32Golf";f(_)="ProgrammingPuzzles";f""

2つの単純なパターンマッチ。(_)すべてのパターンに一致します。2番目のパターンをf" "=/ として定義することにより、スペースなしバージョンを1バイト改善できますがf""=、これにより「パターン一致は冗長です」という警告が表示されます。

同じバイト数の代替ソリューション:

last$"Code\32Golf":["Programming Puzzles"|" ">""]
last$"Code\32Golf":["ProgrammingPuzzles"|"">""]

7

オーム33 32バイト

CP437エンコードを使用します。

▀Bn¬i≈╣Ü╝Rb╡°╧S½uÇ▀
▀4>~H├MS░l╬δ

オンラインでお試しください!または空白なしで試してください

説明

空白あり:

▀Bn¬i≈╣Ü╝Rb╡°╧S½uÇ▀    Main wire

▀Bn¬i≈╣Ü╝Rb╡°╧S½uÇ▀    Push "Programming Puzzles" (compressed string)
                       Implicitly output the top stack element


▀4>~H├MS░l╬δ           Helper wire (never called)

空白なし:

▀Bn¬i≈╣Ü╝Rb╡°╧S½uÇ▀▀4>~H├MS░l╬δ    Main wire

▀Bn¬i≈╣Ü╝Rb╡°╧S½uÇ▀                Push "Programming Puzzles" (compressed string)
                   ▀4>~H├MS░l╬δ    Push "Code Golf" (compressed string)
                                   Implicitly output top stack element

文字列の圧縮がようやく終了したことを嬉しく思います!
ニッククリフォード

1
@NickClifford気付いたのはCode Golf、圧縮すると長くなるということです。首都のせいでしょうか?いずれにせよ、ここでリテラルスペースを使用することはできないため、通常の書き込みよりも短いです。
ビジネスキャット

ええ、Smazはそのような奇妙なものです。
ニッククリフォード

ご参考までに、オームに関するご質問や機能のリクエストがありましたら、チャットでお気軽にお問い合わせください。
ニッククリフォード

7

Japt、29バイト

スペースあり:

`Co¸{S}Golf`r `PžgŸmÚÁ Puzz¤s

オンラインでお試しください!

スペースなし:

`Co¸{S}Golf`r`PžgŸmÚÁPuzz¤s

オンラインでお試しください!


これは、Japtではスペースがメソッド呼び出しを閉じるという事実を利用しています。スペースがある場合、コードはこのJavaScriptコードとほぼ同等です。

("Code"+(S)+"Golf").r(),"Programming Puzzles"

これはJavaScriptとして評価され、結果はSTDOUTに送信されます。最後の式は"Programming Puzzles"なので、その文字列が出力されます。

スペースがない場合、コードはおおよそ次と同等です。

("Code"+(S)+"Golf").r("ProgrammingPuzzles")

(これまでに理解していない場合、S変数は単一のスペースです。).r()文字列のメソッドは、1つの引数が与えられた場合、その引数のすべてのインスタンスを文字列から削除します。を"Code Golf"含まないため、変更せず"ProgrammingPuzzles"に戻り"Code Golf"、STDOUTに送信されます。


置換の使用も考えていませんでした。良いですね!
トム

私の知る限り、これらの文字の一部は、よく知られているエンコードを想定して、1バイトを使用して保存できます。UTF-8では36バイトになります...間違っていますか?
ステフェン

@steffen Japtは、各文字が1バイトを表すISO-8859-1エンコーディングを使用します。ただし、このプログラムでは一部の文字が印刷できないため、ここでWindows-1252エンコードを使用しました(実際にはTIOによって自動生成されました)
-ETHproductions

6

Brachylog、44バイト

" "Ṣ∧"Programming Puzzles"w|"Code"wṢw"Golf"w

オンラインでお試しください!

説明

" "Ṣ                                           If " " = Ṣ (which is itself " ")
    ∧"Programming Puzzles"w                    Write "Programming Puzzles"
                           |                   Else
                            "Code"w            Write "Code"
                                   Ṣw          Write " "
                                     "Golf"w   Write "Golf"

1
&nbsp;
取り消し線

@HyperNeutrino取り消し線はありません。44はスペースを含む長さで、42はなしです。
致命的

ああ。おっと。まあ、それはあまりにも似ているので、編集に入ることによってマークダウンを見ずに伝えることができませんでした。気にしない:P
HyperNeutrino

5

アリス、44バイト

/"floG!"t"edoC"#
 /"selzzuP gnimmargorP"d&o@

オンラインでお試しください!

空白なし:

/"floG!"t"edoC"#/"selzzuPgnimmargorP"d&o@

オンラインでお試しください!

説明

最初のプログラムでは、2つのミラー/が命令ポインターを2行目にリダイレクトします。"selzzuP gnimmargorP"必要なコードポイントをdプッシュし、スタックの深さをプッシュし、&oそのバイト数を出力します。@プログラムを終了します。

空白がないと、プログラムはすべて1行になります。その場合、命令ポインターは順序モードでは移動できないため、/事実上ノーオペレーションになります(技術的には、IPは1ステップだけ移動せず、同じこと/が再度実行され、IPはカーディナルモードに反映されます)。したがって、これらをプログラムから削除すると、次のようになります。

"floG!"t"edoC"#"selzzuPgnimmargorP"d&o@

スペースを含めるには、Code Golf代わりに感嘆符を使用し、でデクリメントしtます。スタック上のすべてのコードポイントを取得したら#、2番目の文字列全体である次のコマンドをスキップします。d&oその後、スタックを再度印刷し@、プログラムを終了します。


あなたはこれをゴルフしなければなりません(44は44です)
MilkyWay90

5

PHP、44バイト

三項演算子

<?=" "?"Programming Puzzles":"Code\x20Golf";

PHP、51バイト

コメント

<?=/** /"Code\x20Golf"/*/"Programming Puzzles"/**/;

PHP、57バイト

アレイスイッチ

<?=["Code\x20Golf","Programming Puzzles"][(ord("
")/10)];


4

C#88 81 70 63バイト

Func<string>@a=()=>" "==""?"Code\x20Golf":"Programming Puzzles";

空白を削除した場合:

Func<string>@a=()=>""==""?"Code\x20Golf":"ProgrammingPuzzles";

メソッドの戻り値の型とメソッド名の間にスペースを入れない方法を教えてくれたBrianJ、7バイトを節約してくれたPeterTaylor、7バイトを節約してくれたPatrick Huizinga に感謝します。

実際には、メソッドはメソッドの戻り値の型を指定しないため技術的にはこれは無効とみなされますが、戻り値の型とメソッド名の間には空白必要です。


1
関数名の前にを付けることができる@のでvoid@a...、「戻り値なし」のコンパイルエラーが発生し、回避されます(ただし、バイトも追加されます:()
ブライアンJ

.Length<11バイトを節約します。\u0020正しくカウントした場合、6を節約します。そして、トップレベル関数の代わりにラムダを送信することにより、有効な回答を作成できます(同時に数バイトを節約できます)。Func<string>a=()=>...
ピーターテイラー

@BrianJうーん、それを知らなかったので、なぜコンパイラーの観点から機能するのか疑問に思います。とにかく、バイトを失う可能性がありますが、技術的にはこの回答が競合しないわけではないため、価値があります。ありがとう!
Skidsdev

@Mayubeは、@主に予約語を変数名として使用する必要がある場合に使用されます([]VB.NET(およびMS SQL Server)では同等のものが使用されています)。
ブライアンJ

1
はい、文字列を返す必要があります。ただし、=>代わりに使用するreturn場合、スペースは必要ありません。(そしてを使用する場合でもreturn、できますreturn(...))。
ピーターテイラー

4

Common Lisp(SBCL)、52バイト

(format`,t"~[Programming Puzzles~;Code~@TGolf~]"0 1)

プリント Programming Puzzles

(format`,t"~[ProgrammingPuzzles~;Code~@TGolf~]"01)

プリント Code Golf

ゴルフをしていない:

(format t "~[Programming Puzzles~;Code Golf~]" 0 1)

説明:

基本的には#'format、Common Lispでどのように機能するのかというトリックに基づいています。

CLでは、トークンの開始位置または終了位置に曖昧さがなければ、ほとんどの空白を省略できます。最初のトリックはformattシンボルとシンボルを分離することでした。解釈のformat仕方を変えずに、シンボルを明確に終了する必要tがありました。幸いなことに、 `CLに、それが処理される前に先行するトークンを終了し、,(`の効果を打ち消す'接頭辞が「引用」されますの次の式が、任意の部分式は、テンプレート、実装するために使用されて,評価されると結果はテンプレートに含まれるので、 `、はほとんど何もしません)。

の3番目の引数formatはテンプレート文字列です。formatCのprintfに似ていますが、はるかに強力なフォーマットディレクティブがあり、%の代わりに〜を使用してそれらを示します。〜[および〜]を使用すると、〜を使用して、印刷の複数のオプションを選択できます。それらを分離します。追加の引数がformat-に提供され、印刷する数値インデックスを指定します。Code Golfの「」が確実に存続するようにするために、空白を挿入するために使用される集計ディレクティブ〜Tを使用しました。これは、一般的にテキストを列に揃えるために使用されます。〜@ Tは、指定された数のスペースを挿入するバリエーションで、デフォルトは1です。

最後に、format- 0および1には2つの引数があります。空白が削除される前に、0が〜[〜;〜]によって使用されて「プログラミングパズル」が選択され、余分なformat引数(1)が削除されます(私は余分なフォーマット引数をどのように標準でドロップするかはわかりませんが、これはSteel Bank Common Lispで機能します)。空白が削除されると、代わりに「Code Golf」を選択する引数が1つ(01)だけになります。


1
+1、1つだけ:「ただし、a ,が前に付いた部分式はすべて評価され、スプライスされます」スプライシングには,@必要ありませんか?

「スプライスされた」というのは、確かにそれに対する貧弱な用語です。技術的には,、次,@の式を評価し、結果をテンプレートに含めますが、式はリストに対して評価し、そのリストの内容をテンプレートに直接含めます。Lispコミュニティで,@は伝統的に「スプライシング」と呼ばれていますが、それが最も明白な選択かどうかはわかりません。少し言い直してみます。
-djeis

4

Java 8、74 50 48バイト

()=>" "==""?"Code\040Golf":"Programming Puzzles"

@NonlinearFruitあなたは正しいです、私はそれを非能力者に
-Khaled.K

1
印刷は必須ではないと思うので、文字列を返すだけで済みます。私はそれをテストしていませんが、==また、オペレータは、動作するはずです()=>""==""?"Code\u00A0Golf":"Programming Puzzles"
NonlinearFruit

1
\u00A0-> \0402バイトの節約。
ポケ





3

dc、50

[pq]sm[Programming Puzzles]dZ19=m[Code]n32P[Golf]p

オンラインでお試しください

[ ]文字列を定義します- Zその長さを測定します。長さが19の場合、スペースが含まれ、mレジスタに格納されているマクロが呼び出され、印刷されProgramming Puzzlesて終了します。それ以外の場合Code Golfは印刷されます。


DCインタープリター/ docs / githubにリンクできますか?
Programmer5000

@ programmer5000 TIOでdcを選択し、言語名をクリックします。
デニス

@Dennisありがとう、TIOがそれをしていることすら知りませんでした!
Programmer5000


3

T-SQL、96 82 81 67バイト

print+iif(len(' x')=2,'Programming Puzzles','Code'+char(32)+'Golf')

オンラインで試す | スペースなし

古いバージョン(96バイト):

select(case'x'when(replace(' ',' ','x'))then'Programming Puzzles'else'Code'+nchar(32)+'Golf'end)

ニースの仕事、あなたは外側の括弧を失い、に条件を変更して67に取得することができますiif(len(' x')=2
BradC

@BradC閉じますが、外側の括弧はの後にスペースを必要としませんprint+代わりにaを使用しましたが、うまくいきました。
mbomb007

間違ったものを貼り付けて数えたに違いありません。そして、私も知りませんでしたが、プラスは私が試した最初のキャラクターであり、うまくいきました。
mbomb007

3

Perl 5の43の 41バイト

say" "?"Programming Puzzles":Code.$".Golf

オンラインでお試しください!

' 'perlではtrueであり、''false であるという事実を使用します。$"変数は、デフォルトではスペースに設定されています。

2バイトを削除してくれた@NahuelFouilleulに感謝します。


多分後半が、"Code$\"Golf"短いとされCode.$".Golf、あまりにも
ナウエルFouilleul

@NahuelFouilleulええ、この答えを書いたとき、私はかなり新しい人でした。でもありがとう!
クリス


2

Befunge、76バイト

" "0`#v_"floG"84*"edoC",,,,,,,,,@
,,,,,@>"selzzuP gnimmargorP",,,,,,,,,,,,,,

オンラインでお試しください!

最もコンパクトなソリューションではありませんが、空白なしでBefungeコードを書くのは非常に困難です。

最初にスペース文字と0を比較します。大きい場合は、一番下の行に移動します。そうでない場合は、スペースを何も置き換えないときに何が起こるかは、最初の行にとどまります。


,sは何をしますか?
Programmer5000

@ programmer5000それぞれが1文字を印刷します。
マーティンエンダー

0に達するまで大量の文字を印刷するためのヒントは>:#,_、多くのバイトを節約できることです
-MildlyMilquetoast
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.