爸爸笑话很有趣


49

我们都知道经典的父亲笑话是这样的:

  1. 有人说了一句话来形容自己(例如I'm tiredI'm confused)。

  2. 爸爸玩笑的狂热爱好者来了并回答Hi <adjective>, I'm Dad!,因为介绍采用相同的格式(I'm Peter与相同的格式I'm hungry)。

您的工作是采用自描述词的形式输入,并输出适当的爸爸笑话形式,但是您将使用所编程语言的名称,而不是使用“ Dad”一词。在。

测试用例(假设它们正在由Python解析):

I'm amazing                  Hi amazing, I'm Python!
I'm tired                    Hi tired, I'm Python!
I'm hungry                   Hi hungry, I'm Python!
I'm fat                      Hi fat, I'm Python!

现在,假设这些测试用例是由Golfscript解析的:

I'm a programmer             Hi a programmer, I'm Golfscript!
I'm a question-writer        Hi a question-writer, I'm Golfscript!
I'm a Stack-Overflow-er      Hi a Stack-Overflow-er, I'm Golfscript!

确切的挑战:

  1. 使用标准输入或通过函数以自描述符格式(I'm <adjective>I'm a(n) <noun>)接收字符串。

    • 假设没有结尾标点。

    • 假设使用该词I'm,而不使用I am

  2. 将其转换为爸爸玩笑的格式-请参阅上面的示例以确切了解外观。

其他的东西:


排行榜

您可以通过展开下面的小部件/片段来查看此帖子的页首横幅。为了使您的帖子包含在排名中,您需要一个# header text带有以下信息的标题():

  • 语言名称(以逗号,或破折号结尾-),后跟...。

  • 字节数,作为出现在标题中的最后一个数字。

例如,JavaScript (ES6), 72 bytes有效但Fortran, 143 bytes (8-bit)无效,因为字节数不是标头中的最后一个数字(您的答案将被识别为8个字节-请勿利用此字节)。

<iframe src="https://ozewski.github.io/ppcg-leaderboard/?id=185872" width="100%" height="100%" style="border: none;">Oops, your browser is too old to view this content! Please upgrade to a newer version of your browser that supports HTML5.</iframe><style>html,body{margin:0;padding:0;height:100%;overflow:hidden}</style>


39
我考虑告诉家人我妻子期望的一种方式是,尽可能多地讲爸爸的笑话,看看谁跟上了!
朱塞佩

7
一些示例输出以感叹号结尾,而另一些则没有。有什么意义?
递归

9
通常的做法是,在您完全接受答案之前,先给它更长的时间:codegolf.meta.stackexchange.com/q/2035/66252
user2390246,

7
决胜局不是选票,而是第一名达到最低分数的人。
毛茸茸的

4
现在等待名称的下一个高尔夫语言是一个空字符串。
640KB,

Answers:


26

V,13个字节

cEHi<esc>A, <C-r>" V!

在线尝试!

tsh答案的启发

这利用了以下事实:I'm从头开始删除文本时,该字符串从字符串的开头被拉出,并<C-r>"在插入模式下将其粘贴到末尾。


我只是编辑I'm<C-O>p,然后注意到您的答案……
tsh

2
使用Vim的高尔夫语言,escape需要5个字符???
mowwwalker

4
@mowwwalker没有。它确实是字节0x1B,但是如果将其写为,则更简单,更明显<esc>。相同<C-r>,这实际上是0x12
DJMcMayhem

@DJMcMayhem,啊,这更有意义
mowwwalker

18

C(gcc)59 42 33字节

@Conor O'Brien注意到不必导入,因此为-17个字节

-9个字节,感谢@tsh指出了一种较短的UB方法编写函数

a(x){printf("Hi%s, I'm C!",x+3);}

在线尝试!

砍掉输入的前3个字符(除去I'm),并用所需的文本将其括起来。


该程序无需导入即可编译,因此可以将其删除42个字节。
科纳·奥布莱恩

@ ConorO'Brien不错!
尼尔·A。

3
并且int 也是可选的。
tsh

2
(?)还有char*,也许...; 所以a(x){printf("Hi%s, I'm C!",x+3);}应该工作
tsh

2
@tsh:是的,尽管行为不确定,实际上可以在大多数32位C实现中使用(其中a int可以容纳a char*而不截断它)。在Linux的x86-64 gcc上,它总是会在PIE可执行文件中失败(通常在虚拟地址空间的低32位中没有指针,并且gcc在通过x+3函数arg in 计算时不会碰到高32位)RDI寄存器)。但是,在非PIE可执行文件中,静态地址位于虚拟地址空间的低31位中,因此,如果调用者传递了字符串文字或静态缓冲区,它将恰好起作用。
彼得·科德斯

16

V,13个字节

cEHi<Esc>A, <C-O>p V!

在线尝试!

不熟悉V。大约30分钟前才知道。无论如何,选择该语言只是因为其名称仅花费1个字节。我不确定如何<End>在V中发送密钥。在此示例<End><Esc>A,大多数vim环境都可以接受。但是,您知道,V比vim短2个字符。:)

感谢@Candy Gumdrop,节省了1个字节。


1
更改c3l为可以节省一个字节cE
Candy Gumdrop

@CandyGumdrop哇,我以前不知道大写E
tsh

您也可以这样做cW(这似乎有所不同,但实际上与相同cE)或3s。不错的工作!当我看到已经有2 V答案时,我正要发布几乎这个确切的答案,这真是一个惊喜。我尝试了几种不同的方法,但是不确定是否可以获取<13个字节。
DJMcMayhem

11

Stax,13 个字节

â∞¿φ‼0▲(─ƒSqÄ

运行并调试

拆开包装,松开包装并进行评论,看起来像这样。

.Hip        print "Hi" with no newline
3tp         trim 3 characters from start of input and print with no newline
            final line is to print the unterminated compressed literal ", I'm stax!"
`dYgAwg_

我将最后一条注释上移了一行,因为没有任何内容可以跟随未终止的字符串文字。

运行这个


我将宣布您为获胜者,因为您的帖子获得了更多选票,但从技术上讲,您与另一个人并列。恭喜你!
connectyourcharger

10

脑干,164

,-.+>,>,----.++++>,.>,[.,]<<<+++++.----->>.[<]>[.>]<[->+++<]>++.[--->+<]>----.+++[->+++<]>++.++++++++.+++++.--------.-[--->+<]>--.+[->+++<]>+.++++++++.+[++>---<]>-.

在线尝试!

“笨蛋!” 一部分弦是使用工具生成的,可以用手进一步打高尔夫球。


2
尝试BF Crunch
Jo King

10

Excel,36 33字节

-3个字节感谢Johan du Toit。

输入进入A1。

="Hi "&MID(A1,4,99)&", I'm Excel"

第一次尝试:

=REPLACE(A1,1,3,"Hi")&", I'm Excel!"

="Hi "&MID(B13,4,99)&", I'm Excel"34个字节
Johan du Toit

谢谢@JohanduToit。 A1而不是B13实际的33个字节
韦尔尼施

8

Python 3中35个 34字节

lambda s:"Hi%s, I'm Python!"%s[3:]

在线尝试!

-1字节归功于无知的体现

多亏了GáborFekete,使用更新格式的字符串也获得了34个字节:

lambda s:f"Hi{s[3:]}, I'm Python!"

在线尝试!



失去lambda s:并替换%s[3:]%input()[3:]什么呢?(-4字节)
妮可

@niko如果我理解您的意思,那将不会打印任何内容。该站点上的默认规则是打印输出的完整程序或返回输出的函数。通常,您建议的内容称为代码段,但这并不是一个完整的解决方案,它需要再包装print()7个字节,这就是Python答案通常使用lambda的原因。
史蒂芬

但是,这与您(实际上是大多数)的答案有何不同?我的意思是两个人都不打印任何内容,并且都返回相同的输出,对吗?(在这里是全新产品-仍要习惯于CG)
妮可

2
@niko没关系!使用lambda s,我定义了一个(匿名)函数。如果您查看TIO链接中的页眉和页脚,则将其命名为f,然后使用进行调用f("I'm whatever")。然后,该函数返回预期的输出。使用代码段,您既不会打印也不会从函数中返回-您只有一小段代码可以评估出正确的结果,但对它却无能为力。您可以多次运行程序,可以多次调用函数,但是代码片段只是一个代码片段。
史蒂芬

6

R 45 44 39字节

@Giuseppe编辑

sub("I'm(.*)","Hi\\1, I'm R",scan(,""))

@AaronHayman编辑

function(s)sub("I'm (.*)","Hi \\1, I'm R",s)

在线尝试!


可以节省一个字节,替换"(I'm )"(.* )
亚伦·海曼

1
@AaronHayman,I'm a programmer由于贪婪而无法在(很多空格)工作
Nahuel Fouilleul

@NahuelFouilleul对,我不确定是否要考虑第一个或最后一个空格。
妮可

1
好的,我保存了一个字节,我认为这个字节可以正常运行
亚伦·海曼

2
通过将subto 更改为2个字节,"I'm(.*)" and "Hi\\1, I'm R"并使用scan以下命令从stdin中获取输入,从而获得3个字节:在线尝试
Giuseppe,

6

PHP34 32字节

Hi<?=substr($argn,3)?>, I'm PHP!

在线尝试!

通过输入STDIN,用-F调用。

$ echo I'm a Stack-Overflow-er|php -F dad.php
Hi a Stack-Overflow-er, I'm PHP!

$ echo I'm hungry|php -F dad.php
Hi hungry, I'm PHP!

6

8637 36个字节

$ xxd DAD.COM
00000000: d1ee ac8a d8c6 0024 adc7 0448 698b d6b4  .......$...Hi...
00000010: 09cd 21ba 1901 cd21 c32c 2049 276d 2078  ..!....!., I'm x
00000020: 3836 2124                                86!$

未组装:

D1 EE       SHR  SI, 1                  ; point SI to DOS PSP (080H)
AC          LODSB                       ; load string length into AL, advance SI
8A D8       MOV  BL, AL                 ; put string length into BL
C6 40 24    MOV  BYTE PTR[BX][SI], '$'  ; add string terminator to end of string
AD          LODSW                       ; advance SI two chars
C7 04 6948  MOV  WORD PTR[SI], 'iH'     ; replace second and third char with 'Hi'
8B D6       MOV  DX, SI                 ; load string address for INT 21H string function
B4 09       MOV  AH, 9                  ; display a '$' terminated string function
CD 21       INT  21H                    ; call DOS API
BA 0119     MOV  DX, OFFSET S           ; load address for second part of string
CD 21       INT  21H                    ; call DOS API
C3          RET                         ; return to DOS
S  DB ", I'm x86!$"  

一个独立的可执行DOS程序。从命令行输入,输出到屏幕。

在此处输入图片说明

下载并测试DAD.COM

*这里的确切“语言”名称有点模棱两可,因为从正式意义上讲,CPU机器代码实际上并不是一种语言。使用“ x86”作为目标平台的普遍理解和接受的名称。


[从主线程中删除注释]我会说“ x86”是该体系结构,而“ MA SM”将是该体系结构上可用的语言之一(请注意,尽管其中确实有一个空格)。
乔纳森·艾伦

5
我认为“ x86”可能真的很好,毕竟它是高尔夫:)
乔纳森·艾伦


5

空格,267字节

[S S S T    S S T   S S S N
_Push_72_H][T   N
S S _Print_as_character][S S S T    T   S T S S T   N
_Push_105_i][T  N
S S _Print_as_character][S S S N
_Push_0][S N
S _Duplicate_0][S N
S _Duplicate_0][T   N
T   S _Read_STDIN_as_character][T   N
T   S _Read_STDIN_as_character][T   N
T   S _Read_STDIN_as_character][N
S S N
_Create_Label_INPUT_LOOP][S S S N
_Push_0][S N
S _Duplicate_0][T   N
T   S _Read_STDIN_as_character][T   T   T   _Retrieve][S N
S _Duplicate_input][S S S T S T S N
_Push_10][T S S T   _Subtract][N
T   S S N
_If_0_Jump_to_Label_TRAILING][T N
S S _Print_as_character][N
S N
N
_Jump_to_Label_INPUT_LOOP][N
S S S N
_Create_Label_TRAILING][S N
N
_Discard_top][S S T T   S S S T S T N
_Push_-69_!][S S T  T   N
_Push_-1_e][S S T   T   T   N
_Push_-3_c][S S T   T   S T N
_Push_-5_a][S S S T S T S N
_Push_10_p][S S S T T   S T N
_Push_13_s][S S T   T   N
_Push_-1_e][S S S T T   T   S N
_Push_14_t][S S S T T   N
_Push_3_i][S S S T  S N
_Push_2_h][S S T    T   T   T   T   N
_Push_-15_W][S S T  T   S S S T T   S N
_Push_-70_space][S S S T    T   T   N
_Push_7_m][S S T    T   T   T   T   T   T   N
_Push_-63_'][S S T  T   T   T   S T N
_Push_-29_I][S T    S S T   T   N
_Copy_0-based_3rd_-70_space][S S T  T   T   T   S T S N
_Push_-58_,][N
S S T   N
_Create_Label_PRINT_TRAILING_LOOP][S S S T  T   S S T   T   S N
_Push_102][T    S S S _Add][T   N
S S _Print_as_character][N
S N
T   N
_Jump_to_Label_PRINT_TRAILING_LOOP]

字母S(空格),T(制表符)和N(换行符)仅作为突出显示而添加。
[..._some_action]仅作为说明添加。

由于空白一次只能输入一个字符,因此输入应包含尾随换行符,以便它知道何时停止读取字符并完成输入。

在线尝试(仅使用空格,制表符和换行符)。

伪代码中的解释:

Print "Hi"
Read three characters from STDIN, and do nothing with them
Start INPUT_LOOP:
  Character c = STDIN as character
  If(c == '\n'):
    Call function PRINT_TRAILING
  Print c as character
  Go to next iteration of INPUT_LOOP

function PRINT_TRAILING:
  Discard the top of the stack (the c='\n' that was still on the stack)
  Push "!ecapsetihW m'I ," one character at a time
  Start PRINT_TRAILING_LOOP:
    Print as character
    Go to next iteration of PRINT_TRAILING_LOOP

的字符", I'm Whitespace!"以相反的顺序推入,然后循环打印。这些字符的所有值也都降低102,在打印之前将其添加到循环中以节省字节。用此Java程序生成用于降低每个字符的常量102 。同样,不是将-70两个空格的值都推送两次,而是"!ecapsetihW m'I ,"使用内置的Copy从第一个空格复制第二个空格以节省一些字节。


5

IBM / Lotus Notes公式语言,61 62字节

+1,因为我!在输出末尾没有注意到。

"Hi"+@Right(i;"I'm")+", I'm IBM/Lotus Notes Formula Language!"

从可编辑字段输入的计算字段公式i。它会因为“我是我”而失败,但是由于这根本没有任何意义,因此我假设它不会发生。

令人遗憾的是,语言名称只有32个字节,超过了公式总长度的一半!

下面的屏幕快照显示了示例输入和输出:

在此处输入图片说明


5
如果名称不那么长,似乎您的语言会很不错:)
connectyourcharger

如果我是认真的人,我可能会称之为FormulaNotes / Domino开发人员社区中提到的方式:-)
ElPedro

1
@PeterCordes-可能,但是Lotus Notes / Domino也将LotusScript作为内置语言,因此我们可能需要更具体一些;-)
ElPedro

1
实际上可以做得更好,因为IBM将其重新命名为IBM Notes,但是随后他们又重新命名为IBM Domino,所以我想严格来说应该是“嗨@PeterCordes,我是IBM Domino公式” :)
ElPedro

1
@PeterCordes仅需要语言名称的基本部分-我接受PerlPerl 5或代替Perl 5 -p
connectyourcharger


5

Japt,18个字节

`Hi{s3}, I'm Japt!

当Japt的字符串压缩库达到0%的压缩率时...

试试吧

另一个18字节的替代方法:

`Hi{Ť}, {¯4}Japt!

1
...但仍然击败了Jelly和05AB1E :)
毛茸茸的

5

八度,35字节

@(s)["Hi" s(4:end) ", I'm Octave!"]

在线尝试!

@(s)                                 % Anonymous function taking a string input
    [                             ]  % Concatenate everything inside the brackets
     "Hi"          ", I'm Octave!"]  % The fixed parts of the output string
          s(4:end)                   % The input, except "I'm"

                                     % Returns the concatenated string

42个字节:

我尝试以某种方式检索“八度”,而没有写出来,因为与这里的其他一些语言名称相比,6个字符相当多。不幸的是,我只能找到ver,它输出带有逗号分隔字段的结构。占用6个以上的字节。:(

@(s)["Hi" s(4:end) ", I'm " {ver.Name}{1}]

在线尝试!


5

红宝石 -p32 27 26字节

利用Nick Kennedy的Jelly答案 -5个字节。

-1个字节,从字符串的不同点开始分割。还意识到我以前的字节数是错误的。

~/m/;$_="Hi#$', I'm Ruby!"

说明

                            # -p gets line of input and saves to $_
~/m/;                       # Find first 'm' in $_ using regex
     $_="Hi#$', I'm Ruby!"  # Save modified string to $_
                            # ($' is the string AFTER the most recent regex match)
                            # -p outputs $_ to screen

在线尝试!


凉!您的输入在哪里?
connectyourcharger

@connectyourcharger添加了说明。输入为STDIN。
价值墨水

知道了 好答案!
connectyourcharger


4

批处理,22 + 3 = 25字节

@echo Hi %*, %0 Batch!

用于命名该文件的+3个字节I'm.bat批处理文件具有所需的扩展名)。调用为I'm hungry,何时会回显Hi hungry, I'm Batch!


程序应该收到,I'm但是这里的脚本名称不知道它是否有效,或者除非它是当前路径中脚本的解释器
Nahuel Fouilleul

1
@NahuelFouilleul解释器是CMD,那么这实际上会为我节省2个字节吗?
尼尔


4

Perl 5中 -p31 24个字节

根据OP的说明和@NahuelFouilleul的建议,将其减少。

/ /;$_="Hi $', $` Perl!"

在线尝试!



1
也可以使用$^X $]特殊变量,但是5比5短$]
Nahuel Fouilleul

需要为包括5语言的名称作为一部分?也就是说,您能否辩称Perl 5将“自己思考”为“ Perl”?在Perl 6出现之前就是这种情况,而codegolf答案仅需要对至少一种语言实现进行研究,因此选择旧的吗?
彼得·科德斯

OP确认Perl是足够的。而且,-p不必将选项的使用视为语言名称的一部分。
Peter Cordes

4

果冻 16  15 字节

Ḋa⁾Hi“'ṫṗḶ/÷!Ṗ»

一个完整的程序,该程序接受(Python格式的)字符串参数,该参数将打印结果。

在线尝试!

怎么样?

Ḋa⁾Hi“'ṫṗḶ/÷!Ṗ» - Link: list of characters    e.g. "I'm a programmer"
Ḋ               - dequeue                          "'m a programmer"
  ⁾Hi           - pair of characters               "Hi"
 a              - logical AND (vectorises)         "Hi a programmer"
     “'ṫṗḶ/÷!Ṗ» - list of characters               ", I'm Jelly!"
                -  - since this is a new leading constant chain the previous result
                -    is implicitly printed (with no trailing newline)
                - program result is implicitly printed (again with no trailing newline)

注意:Ḋ⁾Hio...也可以。


4

果冻20 17字节

ṫ4;“'ṫṗḶ/÷!Ṗ»⁾Hi;

在线尝试!

以输入为参数并返回Jelly字符串的单子链接。

说明

ṫ4                | everything from 4th character on
  ;“'ṫṗḶ/÷!Ṗ»     | concatenate ", I’m Jelly!" to the end
             ⁾Hi; | concatenate "Hi" to the beginning

1
等等,Jelly有内置的单词“ Jelly”吗?
connectyourcharger

3
@connectyourcharger,这是一个压缩的词典单词
Nick Kennedy,

嗯,这很有道理
connectyourcharger

4

VBA(Excel),27岁 28字节

?"Hi"Mid([A1],4)", I'm VBA!

输入在Excel中的活动工作表的单元格A1中输入,在立即窗口中运行代码

利用以下事实 "SomeString"SomeValueSomeValue"SomeString"会隐式连接并且从MID函数中省略第三个参数将占用输入末尾的所有字符-将其变成“转储初始字符”函数

(感谢Shaggy,-1字节,但OP确认所有答案应以感叹号结尾时为+1)
(感谢Taylor Scott提醒我最后的双引号是可选的,因此为-1字节)


1
您能否删除之后的空格Hi并替换54
毛茸茸的

@Shaggy ...是的,是的,我可以。不知道我是怎么想念的,谢谢你
Chronocidal

1
您可以删除"此解决方案中的最后一个字节,并在使用评估表示法(方括号)时将其标记为Excel VBA,因为该表示法仅适用于Excel
Taylor Scott


3

05AB1E23 21字节

感谢Kevin Cruijssen节省了2个字节

',«#À„Hiš"05AB1E!"ªðý

在线尝试!

说明

',«                    # append ","
   #                   # split on spaces
    À                  # rotate left
     „Hiš              # prepend "Hi"
         "05AB1E!"ª    # append the language name
                   ðý  # join on spaces

21个字节。太可惜了,感叹号在那里。由于•äƵí•hR比短1个字节"05AB1E"。:)
凯文·克鲁伊森

@KevinCruijssen:哇!我没有以“,”开头而感到愚蠢。是的,我也尝试•äƵí•hR过,但是正如您所说,很遗憾,这里没有保存任何内容。
Emigna

3

QuadR,22字节

^...
$
Hi
, I'm QuadR!

在线尝试!

它代替:

^... 三个初始字符

$ 行尾

Hi

,I'm QuadR
分别


因此,您可以交换中间的两行并将语言更改为视网膜,而仍然击败@KevinCruijssen的答案?
尼尔

@Neil,我想是的,但是你的还短。Tbf,QuadR只是对于意想不到的高尔夫⎕RAPL运营商的精简版。
阿达姆(Adám)

嗯,但是我的答案仅适用于Retina 1,但不适用于Retina 0.8.2。
尼尔

3

视网膜22 21字节

3L$`
Hi$', $` Retina!

在线尝试!链接包括测试用例。在Retina 0.8.2中不起作用,因此改用@Adám的QuadR答案。说明:模式为空,因此它在输入字符串的每个位置都匹配。但是,我们只需要第三个(或第四个将起作用)匹配。然后将替换应用于该匹配。在该替换中,$'引用字符串的其余部分,并$`引用字符串的开头。


3

视网膜0.8.226个 25 23字节

^...
Hi
$
, I'm Retina!

-1字节感谢@attinat
通过移植@Adám的QuadR答案 -2个字节,因此请确保对他进行投票!!

PS:@Neil在新版本中发布了一个较短的Retina答案,因此我已将该答案明确更改为Retina 0.8.2。

在线尝试。

说明:

用“ Hi”替换前三个字符:

^...
Hi

然后在结尾加上“我是视网膜!” (通过替换字符串的结尾):

$
, I'm Retina!

1
它不应该像这样呢?
attinat

2
或更高,25个字节
attinat

@attinat Ah,当然,甚至都没有注意到错误的输出。>>>感谢-1!
凯文·克鲁伊森

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.