コードゴルフがコードをゴルフできれば、コードゴルフはどれくらいのコードになるでしょうか?


55

2つの単語を入力として使用し、人気のある英語の舌ねじれの変形を出力する関数またはプログラムを作成します。

出力は最初の単語を4回使用します

  • どのくらいwoodでしょうwoodチャックチャックがあればwood、チャックは、チャック可能性がwood

そして2番目の単語は4回

  • chuck chuck木材chuckchuck木材にできる場合、木材はどれくらいの量になるでしょうか?

残りの出力はどの入力でも同じです。

  • How muchウッドwould aチャックチャックif aウッドcouldチャックチャック木材?

入力と出力は、言語がテキストの文字列を処理していると合理的に認識する任意の形式にすることができます。出力は、大文字、スペース、その欠如、および疑問符の終了を含む、指定された形式で正確に指定する必要があります。オプションの末尾の改行も使用できます。

理想的には、コードは印刷可能なASCII文字を含む入力を処理します。ただし、入力を印刷可能なASCIIの妥当なサブセットに制限することは許可されています。答えでこれを示してください。もちろん、より大きな文字セットの処理は問題ありません。

入出力ペアの例:

"wood", "chuck"
"How much wood would a woodchuck chuck if a woodchuck could chuck wood?"

"ground", "hog"
"How much ground would a groundhog hog if a groundhog could hog ground?"

"bar", "keep"
"How much bar would a barkeep keep if a barkeep could keep bar?"

"money", "belt"
"How much money would a moneybelt belt if a moneybelt could belt money?"

"rain", "fall"
"How much rain would a rainfall fall if a rainfall could fall rain?"

"hair", "cut"
"How much hair would a haircut cut if a haircut could cut hair?"

"green", "house"
"How much green would a greenhouse house if a greenhouse could house green?"

"jabber", "wock"
"How much jabber would a jabberwock wock if a jabberwock could wock jabber?"

"pine", "apple"
"How much pine would a pineapple apple if a pineapple could apple pine?"

"Rob", "Lowe"
"How much Rob would a RobLowe Lowe if a RobLowe could Lowe Rob?"

"code", "golf"
"How much code would a codegolf golf if a codegolf could golf code?"

"fish", ""
"How much fish would a fish  if a fish could  fish?"

"", "fish"
"How much  would a fish fish if a fish could fish ?"

"", ""
"How much  would a   if a  could  ?"

"  ", "     "
"How much    would a               if a         could         ?"

"would a", "how much"
"How much would a would a would ahow much how much if a would ahow much could how much would a?"

これはであるため、最小バイトが勝ちます。他の言語がより少ないバイトでそれを行うことができるとしても、答えはすべての言語で歓迎されています。

このミームに触発され、この剛体パターンよりも1つの入力ペアを使用します。...)


2
2つの単語が2つの異なる単語になると仮定できますか?
ジョナサンアラン

4
... "", ""いいえ:p
ジョナサンアラン

1
私は....あなたが失望見て我慢できない@Chronocidal
グレッグ・マーティン

6
二。それはゴルフ2つのコードになります。
user2357112

1
ああ、私はこれが他のコードでいくつかの簡単なゴルフ変換を行うことができる短いプログラムであることを望んでいました。
アシェプラー

回答:


40

Pythonの370の 67バイト

"How much {0} would a {0}{1} {1} if a {0}{1} could {1} {0}?".format

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

靴が収まるなら

タイプミスをキャッチしてくれたマナトワークに感謝

優れた-3バイトのアイデアを提供してくれたRemco Haszingに感謝

私はこれがまだ有効な提出であるという仮定から逃げています(男だから、試してはいけないのでクールです)。OPがこれが許容できるかどうかを明確にできたら(私は書いていないのでそれ自体は関数をし)、それは高く評価されるでしょう。

更新:祝福を受けました、すべてが良いです:)


前のバージョン:

lambda a,b:f"How much {a} would a {a+b} {b} if a {a+b} could {b} {a}?"

2
無関係かもしれませんが、自動フォーマット文字列は3.6より前のpythonバージョンでは容易に利用できません
M.Herzkamp

3
@ M.Herzkampだから?
ルオホラ

16
@ruohola M.Herzkampは、この答えのタイトルを「Python 3」ではなく「Python 3.6」にしようとしていると思います。
ミスターリスター

8
2互換(67バイト)であっても短いとPython: "How much {0} would a {0}{1} {1} if a {1}{0} could {1} {0}?".format。これは、書式なし文字列にバインドされた関数を返します。
Remco Haszing

1
私はPythonの専門家ではありませんがprint("How much {0} would a {0}{1} {1} if a {0}{1} could {1} {0}?".format("wood","chuck"))、目的の出力を生成するため、それを受け入れない理由はありません:)
グレッグマーティン

25

T-SQL、82バイト

SELECT'How much '+w+' would a '+w+c+' '+c+' if a '+w+c+' could '+c+' '+w+'?'FROM t

IOルールに従って、列wcを持つ既存のテーブルtから入力が取得されますwc

1バイト長くなりますが、何らかの理由で少しだけ快適です。

SELECT REPLACE(REPLACE('How much 1 would a 12 2 if a 12 could 2 1?',1,w),2,c)FROM t

このバージョンは、最初の単語wに数字を含まない入力のサブセットで動作します2wます。

私はSQLを使用しているため、すべての例をテーブルにプリロードし、それらを一度に実行できます。

enter image description here


2
メガトレインの仮想列車+1000000
グレッグマーティン

5
P:私は「W」と「c」は、それぞれ「木」と「チャック」のために立つことを想定
user253751

:SQL * Plusの(そういないテーブル)から呼び出されるように、これは、Oracleで67バイト単位で行うことができますselect'How much &1 would a &1&2 &2 if a &1&2 could &2 &1?'from dual
ベン

16

Bash、50バイト

echo How much $2 {would,$1\ if}\ a\ $2$1 could $@?

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

以下のコメントの助けにより、-5バイト。




1
ナウエルのゴルフを適応させるときに、不必要なバックスラッシュを追加しました。53です(実際には50であるべきですが、最初の単語を2ドル、2番目の単語を1ドルとすることを妨げるものは何もありません。)
Grimmy

2
@Grimy:元のポスターからのチャレンジに関するコメントを見て、パラメーターを逆にすることができます。50バイトという優れた回答の回答を更新しています。ありがとう!
spuck

1
@roblogic:バックスラッシュはスペースでの単語の分割を避けるためにスペースを引用し、中括弧は2つの単語を形成するために2回展開されます。1つの文字列は中括弧内に、文字は中括弧に続きます(ただし単語の一部)各文字列の末尾に追加されます。単語の分割を視覚化するために角括弧を追加すると、「[a {bc、de} f]」は「[abcf] [adef]」という2つの単語になります。だから、「[{$ 1 \場合でしょう} \ A \ $ 2 $ 1]」になり、「[\う\ $ 2 $ 1] [$ 1 \あれば\ $ 2 $ 1 \]」
spuckを

15

スタックス33 31 30 29 バイト

-1 再帰のおかげで!

¢èO∩sP↑å♥|1╧ì}ò♂xb■δå«█Γ╨╦►Q²

staxlang.xyzで実行してデバッグしてください!

各コンポーネントを逆の順序でスタックにプッシュしてから、すべてをスペースで結合します。

解凍(35バイト)および説明:

X'?+;`IM'`x;+Y`~^$`,y`75\`x`Q)("`LJ
X                                      Set register X to the first word
                                       "wood"
 '?+                                   Append a question mark, popping from the input stack
                                       "wood?"
    ;                                  Peek from input stack and push to main stack
                                       "chuck" "wood?"
     `IM'`                             Literal "could"
                                       "could" "chuck" "wood?"
          x;+Y                         Peek register x. Peek input. Concatenate. Set register Y.
                                       "woodchuck" "could" "chuck" "wood?"
              et cetera, ad nauseam
                                  LJ   Listify the stack and join with spaces
                                       Implicit print

``の間はすべて圧縮された文字列リテラルです。そのコンマは重要です。入力スタックから最後に読み取ったとき、出力の最後に余分な「チャック」が入らないように、ピークではなくポップする必要があります。

いくつかのテストケースでは、両方の入力を同じ行に配置し、逆の順序になっていることに気付くでしょう。これは、入力として空の文字列またはスペースの文字列を取得するために必要です。

27 26バイト、入力に制限あり

å▓Zf╢7)╪♪²p╞8ó╪l▼]<¡REïSèΣ

staxlang.xyzで実行してデバッグしてください!

@dzaimaのSOGLと同じように、最初の入力に小文字の 'y'が含まれていると失敗します。文字列「a byがybである場合、a by yはいくらですか?」をプッシュし、置換のペアを作成します。


「いくつかのテストケースでは、両方の入力を同じ行に配置し、順序が逆になっていることに気付くでしょう。これは、入力として空の文字列またはスペースの文字列を取得するために必要です。」入力区切り文字を使用しない場合、入力はそのままで、空の文字列とすべてになります。複数のテストケースを表示するのはちょっと厄介です。
再帰的

1
さらに、,31バイトソリューションの先頭部分を削除できるようです。以下+は入力スタックから暗黙的にポップされるため、動作は同じです。
再帰的

13

JavaScript、70バイト

退屈な!

a=>b=>`How much ${a} would a ${a+b} ${b} if a ${a+b} could ${b} ${a}?`

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

少し退屈です!

a=>"How much 0 would a 01 1 if a 01 could 1 0?".replace(/\d/g,x=>a[x])

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


その最初の例のようにカリー化された関数を出力できますか?
フェザークラウン

@Feathercrown、関数を出力するのではなく、TIOでわかるように両方(たとえば、f(a)(b))を呼び出しています。しかし、はい、カリー化された関数を許可するというコンセンサスと、関数が実際に返されることを許可することについてのコンセンサスに近いと思います。
シャギー

出力では、評価時にコードが関数を返すことを意味しました。バイトをカウントする特定のコードには呼び出しはありません。カリー化されていない関数が返されるのを見たことがあるので、カリー化が正常であることを確認するためにチェックしていました。
フェザークラウン

6

SOGL32 30 バイト

^.](9V;⅜‛°@Ε¬tπs%.½Ω‘⁽ b,ŗ y,ŗ

ここで試してみてください!

最初の入力に文字を含めることはできません y。これにはASCII(およびUnicode)の妥当なサブセットが残っているようです。

½ouiīZģ9Ο|ΧyΚ⅞ō÷Jeq(‚7‘は圧縮された文字列で"how much b would a by y if a by could y b?"(必要な単語がすべて圧縮率の高い辞書の上位512ワードにあるように選択された文字)、b1番目の入力とy2番目の入力に置き換えられます。


私が覚えている最もランダムな制限の1つ(短いソリューションで)のインターネットポイント2つ
グレッグマーティン

未@GregMartin そのランダム。私はSOGLを話せませんが、2つの置換y -> woodとをシーケンスするときに 'n'に同じ制限がありましたn -> chuck。Dignity Pointの10分の1は、これも同様です。
Khuldraeseth na'Barya

この質問の主な精神は解決策を許可することについて開かれていることだと思います...余談ですが、入力に実際の文字を許可しないことは少し大雑把だと思うかもしれません。とにかく、なぜb最初の入力でeは許可されていないのに、2番目の入力では許可されているのですか?
グレッグマーティン

@GregMartinおっと、1番目の入力にを含めることはできません。eそうしないと、2番目の置換で2番目の入力に置き換えられます
dzaima

入力からアルファを禁止する必要を回避するために、置換ターゲットを非アルファにすることはできませんか?
WGroleau

5

R90 77 76バイト

-13 Sumner18に
感謝-1ジュゼッペに感謝

function(x,y,`[`=gsub)2[y,1[x,"How much 1 would a 12 2 if a 12 could 2 1?"]]

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


2
gsub代わりに、-13バイトに対してdouble を実行できます。tio.run/...
Sumner18

@ Sumner18ありがとう。ええ、gsub間違いなくもっと理にかなっています。
ロバートS.

あなたが使用してのように感じる場合はpryrあなたは73にそれを得ることができます
Khuldraeseth na'Barya

4
入力xに文字が含まれないと仮定するように指定する必要があります2。この場合は失敗します(TIO)。
ロビンライダー



4

JavaScript(V8)、72バイト

(a,b)=>['How much',a,'would a',c=a+b,b,'if a',c,'could',b,a+'?'].join` `

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

変数の割り当ては実際には0バイトを節約しますが、これをわずかに一意にするためだけに保持すると考えました。


ただし、1つの大きなテンプレート文字列は1文字短くなります。オンラインで試してください!
マナトワーク

@manatwork私はこれを試してみましたが、誤って余分なスペースを含めました:Pありがとう!
IronFlare

4

ZX Spectrum Basic、87バイト

完全を期すため、簡単な実装:

INPUT a$,b$: PRINT "How much ";a$;" would a ";a$;b$;"  ";b$;" if a ";a$;b$;" could ";b$;" ";a$;"?"

を使用して IFキーワード(1バイト) 3バイト削減されますが、「大文字と同じ」条件は破られます。

INPUT a$,b$: PRINT "How much ";a$;" would a ";a$;b$;"  ";b$;" IF a ";a$;b$;" could ";b$;" ";a$;"?"

少しチートなバージョンも表示できてうれしいです:)
Greg Martin

2
ああ、Speccy!再び若くなるために...
chx


4

05AB1E37 35 31 30 バイト

“Howƒ×1€Þ a ÿ0€¬ a ÿƒˆ01?“T$ú‡

@Grimyのおかげで-5バイト。

2つの項目のリストを取ります。wood最初の値chuckとして、2番目の値として。

オンラインそれを試してみたり、すべてのテストケースを確認してください

説明:

Howƒ×1€Þ a ÿ0€¬ a ÿƒˆ01?“
      # Push dictionary string "How much1 would a ÿ0 if a ÿ could01?",
      # where the `ÿ` are automatically filled with the (implicit) input-list,
      # implicitly joined together to a single string
      #  i.e. ["wood","chuck"] → "How much1 would a woodchuck0 if a woodchuck could01?"
T     # Push 10
 $    # Push the input-list and 1
  ù   # Pad the strings in the input-list with this 1 amount of leading spaces
      #  ["wood","chuck"] → [" wood"," chuck"]
     # Transliterate the 10 ([1,0]) to these strings in the sentence
      #  → "How much wood would a woodchuck chuck if a woodchuck could chuck wood?"
      # (after which the result is output implicitly)

(セクション鉱山のこの05AB1Eチップを参照してください。辞書を使用する方法?理由を理解すること“Howƒ×1€Þ a ÿ0€¬ a ÿƒˆ01?“です"How much1 would a ÿ0 if a ÿ could01?"




1
@Grimyとても素敵です!私はそれらの両方が本当に好きです。そのようなものを使用して追加のバイトを保存する独創的なアイデア、ありがとう。
ケビンクルーッセン

1
代替30。私は29を見つけていないので、あなたの説明は今のところ安全です;)
Grimmy

4

Applesoft BASIC、 77 76バイト

1INPUTA$,B$:?"How much "A$" would a "A$B$" "B$" if a "A$B$" could "B$" "A$"?

上記は適切なBASICのようには見えませんが、ApplesoftはPRINTステートメントを使用する際にいくつかのショートカットを許可しています。

  • ステートメントを入力するときの?代わりの使用PRINT
  • 連結文字(;または+)は省略できます
  • ステートメントが引用符付き文字列で終わる場合、最後の引用符は省略できますThanks、Mark

行番号が必要です。そうでない場合、INPUTステートメントにより?ILLEGAL DIRECT ERROR


1
末尾の引用符を省略できますか?Applesoft BasicはMicrosoft Basicの派生物であり、Microsoft Basicの多くのバージョンでは、文字列が行を終了する場合、文字列の閉じ引用符を省略できます。
マーク

@マーク、ヒントをありがとう!
リー

4

33、78のバイト

"How much "p1btpt" would a "ptpz2btp" "ptbtp" if a "ptpbtp" could "ptbtp" "ptp

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

入力をコマンドライン引数として受け取ります。

ボーナス:91バイト

"How much "p1bztp" would a "p1bztp2bztp" "p2bztp" if a "p1bztp2bztp" could "p2bztp" "p1bztp

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

入力が与えられたときに自分自身に似た出力を与え1bztp2bztp


これを大声で言って、今私は私のモニターからすべての唾をきれいにする必要があります。
BradC



3

VBA、107バイト

Function q(a,b)
b=b&" "
c="ould "
q="How much "&a&" w"&c&"a "&a&b&b&"if a "&a&b&"c"&c&b&a&"?"
End Function

VBScriptとしても実行する必要があるため、2つのショートカットを使用しました。「ould」は繰り返され、「chuck」は追加のスペースなしでは表示されません。


としてイミディエイトウィンドウ関数に変換することにより、これを75バイトまで減らすことができますa=[A1]:b=[B1&" "]:o="ould ":?"How much "a" w"o"a "a b b"if a "a b"c"o b a"?[A1]とから入力を受け取ります[B1]。我々は持っているVBAでのゴルフのためのヒントあなたがにご覧になることを検討してください。
テイラースコット

そして、あなたが入力名前付き範囲を取ることができる[A]し、[B]入力は73にそれをダウンさせて、私は非常にあなたがが経由する方法を理解していない、あなた自身の答えを追加して自由に感じます。
user3819867

1
残念ながら、Excel VBAのSTDINとSTDOUTの定義方法に反します。アクティブシートで名前のない範囲を使用できますが、コミュニティによる以前の決定ごとに名前付き範囲を使用することは許可されません
Taylor Scott

3

C位165の 148 133バイト

class P{static void Main(string[]a){System.Console.Write("How much {0} would a {0}{1} {1} if a {0}{1} could {1} {0}?\n",a[0],a[1]);}}

補間された文字列について教えてくれたAndrew Baumherに感謝します!!
編集:フルクラスが追加されました
編集:ケネスKに短縮のヒントを提供してくれて
ありがとう編集:補間された文字列の使用が実際にこのシナリオで長いことを教えてくれたアンドリューに再び感謝


最新のC#の「$」(補間された文字列)を使用すると、{0}を{a [0]}に置き換えることで数バイトを節約できます。だから私は、C#の異なるバージョンとして、それを追加します、いわば、あなたの雷を盗むしないために
アンドリュー・Baumher

うわー、それを知りませんでした!情報をありがとう
canttalkjustcode

2
@canttalkjustcode一般的に、関数は受け入れられます。C#の場合、これは、ラムダが含まれていますa=>System.Console.WriteLine($"How much {a[0]} would a {a[0]}{a[1]} {a[1]} if a {a[0]}{a[1]} could {a[1]} {a[0]}?")
JAD

これは事実ですが、このようなラムダ式を使用できるのはC#Interactiveのみです。完全なC#では、完全なlamdaステートメントが必要です。:次のコードに示すように、単純な空の文が速くなります
canttalkjustcode

void M(string[]a){System.Console.WriteLine($"How much {a[0]} would a {a[0]}{a[1]} {a[1]} if a {a[0]}{a[1]} could {a[1]} {a[0]}?");} System.Func<string>M=a=>System.Console.WriteLine($"How much {a[0]} would a {a[0]}{a[1]} {a[1]} if a {a[0]}{a[1]} could {a[1]} {a[0]}?"); System.Action<string>M=a=>System.Console.WriteLine($"How much {a[0]} would a {a[0]}{a[1]} {a[1]} if a {a[0]}{a[1]} could {a[1]} {a[0]}?");
canttalkjustcode



2

Python 3、80バイト

lambda n:'How much {0} would a {0}{1} {1} if a {0}{1} could {1} {0}?'.format(*n)

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

ローマの場合は、str形式を使用します。

squidのトリックを使用して編集


3
これは無効ではないでしょうか?それはスニペットです-関数やプログラムではありませんよね?
モニカを

うん。そのlambda n:前にが必要で、をドロップできますprint()
wizzwizz4

コードのHow much ...代わりに印刷するように変更する必要がありますhow much ...
ルオホラ

3
無名関数をとして定義するだけで十分です'how much {0} would a {0}{1} {1} if a {0}{1} could {1} {0}?'.format
18:03のxnor

@xnorまだかなり新しいですが、その場合、TIOはどのように見えますか?なんらかの方法で引数を渡さなければ実行可能だと思います。
トライアー

2

C#(Visual C#Interactive Compiler)66 65バイト

x=>y=>$"How much {x} would a {x+y} {y} if a {x+y} could {y} {x}?"

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

C#を除き、他の全員と同じです。(a、b)=> cの代わりにカリー化ストラトa => b => cを使用して-1バイト


関数のシグネチャを変更Func<string,string,string>するFunc<string,Func<string,string>>と、変更(x,y)x=>y=>
無知の実施例

安価な戦術のように思えますが、メタディスカッションでは、それは公正なゲームであると言われています。ありがとう。
アンドリュー・ボーマー

2

R、95バイト

function(a,b)cat("How much ",a," would a ",a,b," ",b," if a ",a,b," could ",b," ",a,"?",sep='')

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


2
サイトへようこそ!TIOリンクが間違ったコードにリンクしているようです?さらに、私が知る限り、入力は変数内にaあり、bにある。これは、デフォルトの入力/出力ルールで
caird coinheringaahing

コメントをありがとう@cairdcoinheringaahing。関数形式で書き直しました。今はルールに準拠していることを願っています。
minhsphuc12


1

APL(Dyalog Unicode)56 59バイト

{∊'How much '' would a '⍺⍵' '' if a '⍺⍵' could '' ''?'}

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

かなり簡単なdfn。カットしてバイトを保存します単一の文字列ではなく文字列の配列を返すことが許可場合は。

疑問符を追加するのを忘れていたため、3バイトが追加されました。


ギリシャ文字を1バイトとして数えましたか?
トマーシュ・

@TomášZatoはい。Dyalog APLのグリフは、ここでAPLの回答の標準であるAdámのシングルバイト文字シートを使用して、シングルバイトで表すことができます。
J.サレ


1

ゼリー41 37バイト

⁾be,y“Ø[gœıJ9°m.OṚuHlh3Ƥ⁾$ɲ0øḲʂṇHẎṆȥ»

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

引数として文字列のペアを取り、処理された文字列を出力する完全なプログラム。モナFドリンクは、末尾にa を追加することで形成できます(これを指摘してくれた@JonathanAllanに感謝します)。

@dzaimaのSOGL回答に触発されて、プレースホルダーとして「b」と「e」を使用するようになりましたので、必ずそれも支持してください!つまり、最初の単語に文字eを含めることはできません。


@JonathanAllanまったく正しい!ありがとう。
ニックケネディ


1

Forth(gforth)、116バイト

: x 2over type ; : y 2dup type ; : f ." How much "x ."  would a "x y ."  "y ."  if a "x y ."  could "y ."  "x ." ?";

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

コードの説明

\ x = output the first word
: x               \ start a new word definition
  2over type      \ copy the "first" word to the top of the stack and print it
;                 \ end word definition

\ y = output the second word
: y               \ start a new word definition
  2dup type       \ copy the "second" word to the top of the stack and print it
;                 \ end word definition

: f               \ start a new word definition
  ." How much "x  \ print "How much " followed by the first word   
  ."  would a "x  \ print " would a " followed by the first word
  y ."  if a "x   \ print the second word followed by " if a " and then the first word
  y ."  could "y  \ print the second word, then " could " then the second word again
  ."  "x ." ?"    \ print a space followed by the first word, followed by "?"
;                 \ end word definition

1

Lua、82バイト

a,b=...print((('How much x would a xy y if a xy could y x?'):gsub('.',{x=a,y=b})))

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

完全なプログラム。入力を引数として受け取ります。

ここでは特別なことは何もありません。短いバージョンがあることを願っていますが、一見するとこれを短くする明らかな方法はありません。


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