如果一个代码高尔夫球可以打高尔夫球,一个代码高尔夫球可以打多少代码?


55

编写一个函数或程序,以两个单词作为输入并输出流行的英语舌扭曲的变体“如果土拨鼠可以夹木头,那么土拨鼠可以夹多少木头?”。

输出将使用第一个单词四次

  • 多少wood将一wood盘盘如果一个wood吸盘可以扔掉wood

第二个单词四次

  • 多少木头木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?"

这是,因此最少的字节获胜。即使所有其他语言都可以用更少的字节数来回答,也可以使用所有语言来回答。

(受此模因的启发,该模因比该刚性模式更好地使用一对输入对。)


2
我们可以假设这两个词将是两个不同的词吗?
乔纳森·艾伦

4
...我想"", ""是没有的:p
乔纳森·艾伦

1
@Chronocidal我无法忍受看到你失望....
格雷格·马丁

6
二。它会打两个代码。
user2357112

1
w,我希望这是一个简短的程序,可以对其他代码进行一些简单的高尔夫球转换。
aschepler

Answers:


40

Python 3中70 67个字节

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

在线尝试!

我的意思是,如果鞋子合适。

感谢manatwork捕捉错字

感谢Remco Haszing出色的-3字节构想

我以这样的假设为前提,那就是这仍然是有效的提交内容(因为男人,不要尝试它太酷了)。如果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那么?
ruohola

16
@ruohola我认为M.Herzkamp试图说出这个答案的标题应该是“ Python 3.6”而不是“ Python 3”。
李斯特先生

8
甚至更短和Python 2兼容(67个字节): "How much {0} would a {0}{1} {1} if a {1}{0} could {1} {0}?".format。这将返回绑定到未格式化字符串的函数。
雷科·哈辛

1
我不是Python专家,但是由于print("How much {0} would a {0}{1} {1} if a {0}{1} could {1} {0}?".format("wood","chuck"))生成了所需的输出,所以我没有理由不接受它:)
Greg Martin

25

T-SQL,82字节

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

根据我们的IO规则,输入来自具有和列的现有表。twc

再增加一个字节,但由于某种原因会更加令人满意:

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

此版本适用于在第一个单词包含数字的输入子集。2w

因为我使用SQL,所以可以将所有示例预加载到表中,然后一次运行它们:

在此处输入图片说明


2
+1000000虚拟火车为巨型火车
格雷格·马丁

5
我假设“ w”和“ c”分别代表“ wood”和“ chuck”:P
user253751,

从SQL * Plus调用,这可以在Oracle中以67个字节完成(因此没有表):select'How much &1 would a &1&2 &2 if a &1&2 could &2 &1?'from dual
Ben

16

Bash,50个字节

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

在线尝试!

-5个字节,来自以下注释的帮助。




1
在适应Nahuel的高尔夫时,您添加了不必要的反斜杠。这是53。(尽管实际上应该是50,但没有什么可以阻止您将第一个单词作为$ 2,将第二个单词作为$ 1。)
Grimmy

2
@Grimy:我看到来自原始海报的挑战的评论,它允许反转参数。我正在将答案更新为50字节的出色答案。谢谢!

1
@roblogic:反斜杠在空格处加引号,以避免单词在空格上分裂,花括号被扩展两次以形成两个单词,一次包含在括号内的每个字符串,以及尾随括号的字符(但单词的一部分)被添加到每个字符串的末尾。添加方括号以帮助可视化单词拆分:“ [a {bc,de} f]”变成两个单词:“ [abcf] [adef]”。因此,“ [[{would,$ 1 \ if} \ a \ $ 2 $ 1]”变成“ [would \ a \ $ 2 $ 1] [$ 1 \ if \ a \ $ 2 $ 1]”

15

Stax33 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会占用多少b?”,然后进行一对替换。


“您会注意到,对于一些测试用例,我将两个输入都放在同一行上,并且它们的顺序相反。这对于将空字符串或空格字符串作为输入是必需的。” 如果不使用输入分隔符,则输入将不受干扰,为空字符串和全部。展示多个测试用例有点尴尬。
递归

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

@Feathercrown,我不是输出的功能,我打电话两者(例如,f(a)(b)),你可以在TIO看到。但是,是的,我们对允许使用咖喱函数的共识,我认为在允许实际返回函数方面我们已经接近共识。
毛茸茸的

输出是指代码在求值时返回一个函数。给定的字节计数代码中没有调用。我只是在检查以确保可以正常进行,因为我只见过返回非咖喱函数。
Feathercrown

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个单词中,并且压缩效果更好),然后b用第一个输入和y第二个输入替换。


+2互联网积分是我能记住的最随机的限制之一(在您较短的解决方案中)
格雷格·马丁

@GregMartin不是那么随机。我不会说SOGL,但是在对两个替换y -> wood和进行排序时,我对'n'的限制相同n -> chuck。十分之一的尊严点也是如此。
Khuldraeseth na'Barya

我认为这个问题的主要精神是开放式允许解决方案……我只是顺便说一句,我认为不允许输入中的实际字母有点粗略。无论如何:为什么b在第一个输入中不允许但e在第二个输入中还可以?
格雷格·马丁

@GregMartin糟糕,我的意思是说第一个输入不能包含e,否则它将在第二个替换中被第二个输入替换
dzaima

替换目标是否可能是非字母,以避免不得不从输入中禁止字母?
WGroleau

5

R90 77 76字节

-13感谢Sumner18
-1感谢Giuseppe

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

在线尝试!


2
可以gsub代替-13个字节。tio.run/...
Sumner18

@ Sumner18谢谢。是的,gsub绝对更有意义。
罗伯特S.

如果您想使用pryr可以将其降低到73
Khuldraeseth na'Barya

4
您应该指定您假设输入x中不包含字符2;它在这种情况下(TIO)失败。
罗宾·赖德


4

PHP,72字节

[,$a,$b]=$argv;echo"How much $a would a $a$b $b if a $a$b could $b $a?";

在线尝试!

要么:

PHP,72字节

How much <?=![,$a,$b]=$argv,"$a would a $a$b $b if a $a$b could $b $a?";

在线尝试!

从命令行输入,输出到STDOUT


4

JavaScript(V8),72字节

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

在线尝试!

变量赋值实际上节省了0个字节,但我认为我会保留它,只是为了使其略微唯一。


但是,一个大的模板字符串要短1个字符:在线尝试!
manatwork

@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

,75字节

|a,b|print!("How much {} would a {0}{} {1} if a {0}{1} could {1} {0}?",a,b)

在线尝试!

使用此技巧,您可以跳过每个要格式化的项目的格式化索引一次。

还使用print!(),因为它比使用format!()并返回一个字符串短一个字节。


4

05AB1E37 35 31 30 字节

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

-5个字节,感谢@Grimy

包含两个项目的列表:wood作为第一个值和chuck第二个值。

在线尝试验证所有测试用例

说明:

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
  • 可以省略串联字符(;+
  • 如果语句以带引号的字符串结尾,则可以省略最终引号。谢谢,马克

行号是必填项,否则该INPUT语句将导致?ILLEGAL DIRECT ERROR


1
您可以省略尾引号吗?Applesoft Basic是Microsoft Basic的派生产品,许多版本的Microsoft Basic允许您在字符串结束时省略字符串的右引号。
标记

@Mark,谢谢提示!

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

在线尝试!

给定输入时1bztp,输出类似于自身2bztp


大声地说,现在我需要清理显示器上的所有吐水。
BradC


3

PowerShell,65字节

param($a,$b)"How much $a would a $a$b $b if a $a$b could $b $a`?"

在线尝试!

唯一需要注意的是,您必须转义问号,因为这些可能是PowerShell标识符的有效部分


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运行,我使用了两个快捷方式:“ 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告诉我有关插值字符串的信息!!
编辑:现在增加了全班
编辑:感谢Kenneth K.给我一些缩短它的提示
编辑:再次感谢Andrew告诉我在这种情况下使用内插字符串实际上更长。


使用现代C#的'$'(内插字符串),您可以通过将{0}替换为{a [0]}来节省一些字节,或者更好的是,使用两个变量而不是数组,因此可以只使用a和b。为了避免窃取您的雷声,可以这么说,我将其添加为c#的其他版本
Andrew Baumher

哇不知道!感谢您提供的信息
canttalkjustcode

2
@canttalkjustcode通常,接受函数。对于C#,其中包括lambda: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中,您才能使用lambda表达式。在完整的C#中,您需要完整的lamda语句。如以下代码段所示,一个简单的void语句会更快:
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

3

Haskell,76个字节

a?b=a++" "++b
a!b="How much"?a?"would a"?a++b?b?"if a"?a++b?"could"?b?a++"?"

在线尝试!

首先尝试,所以我希望我没有违反任何规则。


2

果冻,39 个字节

ŒPKŒP“µkþ¿µ‘ị“þ>Æƈ)taJṖ;ạʂ\4S%dñl»Ỵ¤ż”?

接受两个字符串列表的完整程序。

在线尝试!

...或者(也是一个完整的程序,接受两个字符串的列表)

⁽4ṀDBịs€2ṭ€€⁶“þ>Æƈ)taJṖ;ạʂ\4S%dñl»Ỵ¤ż”?

在线尝试!


2

Python 3,80个字节

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

在线尝试!

在罗马时,请使用str格式。

使用鱿鱼的把戏编辑


3
这会无效吗?这是一个代码段-不是函数或程序,对吧?
恢复莫妮卡

是的 需要一个lambda n:,然后才能删除print()
wizzwizz4

您应该将代码更改为打印How much ...而不是how much ...
ruohola

3
只需将匿名函数定义为即可'how much {0} would a {0}{1} {1} if a {0}{1} could {1} {0}?'.format
xnor

@xnor还是很新的,那么TIO会是什么样子?我认为如果没有某种方法可以通过arg,那么它将是可运行的。
特纳

2

C#(Visual C#交互式编译器)66 65字节

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

在线尝试!

和其他所有人一样,除了C#。-1字节通过使用curring stra a => b => c代替(a,b)=> c


从更改函数签名Func<string,string,string>Func<string,Func<string,string>>,改变(x,y)x=>y=>
无知的方式

似乎是一种廉价的策略,但元数据讨论表明这是公平的游戏,因此也可能如此。谢谢。
Andrew Baumher

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链接似乎链接到错误的代码?另外,据我所知,您已假设输入位于变量aand中b,这在我们的默认输入/输出规则中
caird coinheringaahing

感谢@cairdcoinheringaahing的评论。我以函数形式重写了它,希望它现在符合规则。
minhsphuc12


1

APL(Dyalog Unicode)56 59字节

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

在线尝试!

相当简单的dfn。如果允许返回字符串数组而不是单个字符串,则通过剪切来节省字节。

添加了3个字节,因为我忘记添加问号。


您是否将希腊字母算作一个字节?
托马什Zato

@TomášZato是的。Dyalog APL的字形可以使用Adám的单字节字符表以单字节表示,这是APL答案的标准配置。
J.Sallé


1

果冻41 37字节

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

在线尝试!

一个完整的程序,以一对字符串为参数并打印处理后的字符串。通过F在末尾添加a可以形成单子链接(感谢@JonathanAllan指出了这一点)。

我现在已切换到使用“ b”和“ e”作为占位符,这受@dzaima的SOGL答案的启发,因此请确保也支持该占位符!这确实意味着第一个单词不能包含字母e。


@JonathanAllan完全正确!谢谢。
尼克·肯尼迪


1

第四(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})))

在线尝试!

完整程序,将输入作为参数。

这里没什么特别的。希望有较短的版本,但乍一看没有明显的方法可以缩短版本。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.