พ่อตลกเป็นเรื่องสนุก


49

เราทุกคนรู้เรื่องตลกของพ่อแบบคลาสสิคที่จะทำสิ่งนี้:

  1. บางคนพูดประโยคเพื่ออธิบายตนเอง (เช่นI'm tiredหรือI'm confused)

  2. ผู้ที่คลั่งไคล้เรื่องตลกมาพร้อมและตอบHi <adjective>, I'm Dad!เนื่องจากการแนะนำตามรูปแบบเดียวกัน ( I'm PeterตามรูปแบบเดียวกับI'm hungry)

งานของคุณคือการป้อนข้อมูลในรูปแบบของตัวอธิบายและส่งแบบฟอร์ม dad-joke ที่เหมาะสม แต่แทนที่จะใช้คำว่า "พ่อ" คุณจะใช้ชื่อของภาษาโปรแกรมที่คุณกำลังเขียนโปรแกรม ใน.

กรณีทดสอบ (สมมติว่าพวกเขากำลังถูกวิเคราะห์โดย 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'mI am

  2. แปลงเป็นรูปแบบ dad-joke - ดูตัวอย่างด้านบนเพื่อดูว่าควรมีลักษณะอย่างไร

อย่างอื่น:


ลีดเดอร์บอร์ด

คุณสามารถดูกระดานแต้มนำสำหรับโพสต์นี้โดยขยายวิดเจ็ต / ตัวอย่างด้านล่าง เพื่อให้โพสต์ของคุณรวมอยู่ในการจัดอันดับคุณต้องมีส่วนหัว ( # 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
อีกวิธีหนึ่งที่ฉันคิดว่าจะบอกครอบครัวของฉันว่าภรรยาของฉันกำลังคาดหวังจากการเล่าเรื่องตลกให้พ่อฟังมากที่สุดเท่าที่จะทำได้และดูว่าใครเป็นใคร!
Giuseppe

7
ตัวอย่างผลลัพธ์บางตัวลงท้ายด้วยอัศเจรีย์และบางอันไม่มี ความสำคัญคืออะไร?
เรียกซ้ำ

9
การปฏิบัติตามปกติคือให้เวลานานกว่านี้ก่อนที่จะยอมรับคำตอบถ้าคุณทำเช่นนั้น: codegolf.meta.stackexchange.com/q/2035/66252
2390246

7
และไทเบรกเกอร์ไม่ใช่การลงคะแนน แต่ใครกันที่ทำคะแนนได้ต่ำที่สุดก่อน
Shaggy

4
ตอนนี้กำลังรอภาษาการเล่นกอล์ฟต่อไปที่ชื่อนั้นเป็นสตริงว่าง
640KB

คำตอบ:


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 Nope มันจริงๆไบต์แต่มันเป็นเรื่องง่ายและชัดเจนมากขึ้นว่ามันหมายความว่าถ้าคุณเขียนเป็น0x1B <esc>เช่นเดียวกันกับ<C-r>ที่เป็นจริง0x12
DJMcMayhem

@DJMcMayhem, อาที่ทำให้รู้สึกมากขึ้น
mowwwalker

18

C (gcc) , 59 42 33 ไบต์

-17 ไบต์ขอบคุณ @Conor O'Brien สังเกตเห็นว่าการนำเข้าไม่จำเป็น

-9 ไบต์ขอบคุณ @tsh ชี้ให้สั้นลงวิธีการเขียนฟังก์ชั่น UB

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

ลองออนไลน์!

ตัดออก 3 อักขระแรกของอินพุต (ลบI'm) และล้อมรอบด้วยข้อความที่ต้องการ


โปรแกรมคอมไพล์โดยไม่มีการนำเข้าดังนั้นคุณจึงสามารถวางได้ 42 ไบต์
Conor O'Brien

@ ConorO'Brien จับดี!
Neil A.

3
และint ยังเป็นตัวเลือก
TSH

2
(?) และยังchar*อาจ ... ; ดังนั้นa(x){printf("Hi%s, I'm C!",x+3);}ควรทำงาน
tsh

2
@tsh: ใช่ในทางปฏิบัติที่จะทำงานกับการใช้งาน C 32 บิตส่วนใหญ่ (ที่intสามารถถือ a char*โดยไม่ตัดทอน) แม้จะมีพฤติกรรมที่ไม่ได้กำหนด บน x86-64 gcc บน Linux มันจะล้มเหลวเสมอในการปฏิบัติการ PIE (โดยทั่วไปไม่มีตัวชี้อยู่ในพื้นที่ที่อยู่เสมือน 32 บิตที่ต่ำและ gcc จะไม่เกิดขึ้นเพื่อคัดลอก 32 บิตสูงในขณะที่คำนวณx+3จากฟังก์ชัน arg ใน การลงทะเบียน RDI) แต่ในการปฏิบัติการที่ไม่ใช่ PIE ที่อยู่แบบคงที่อยู่ในพื้นที่ที่อยู่เสมือนต่ำ 31 บิตดังนั้นถ้าผู้เรียกผ่านสตริงตัวอักษรหรือบัฟเฟอร์คงที่มันจะเกิดขึ้นในการทำงาน
Peter Cordes

16

V , 13 ไบต์

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

ลองออนไลน์!

Vใหม่ไป เพิ่งรู้เมื่อประมาณ 30 นาทีก่อน อย่างไรก็ตามภาษานี้ถูกเลือกเนื่องจากชื่อมีราคาเพียง 1 ไบต์ ฉันไม่แน่ใจว่าจะส่ง<End>คีย์ใน V. สภาพแวดล้อมที่เป็นกลุ่มส่วนใหญ่จะยอมรับ<End>การแทนที่<Esc>Aในตัวอย่างนี้ แต่คุณรู้ไหมว่า V นั้นสั้นกว่าตัวอักษร 2 ตัว :)

ขอบคุณ@Candy Gumdropช่วยให้ประหยัด 1 ไบต์


1
สามารถบันทึกหนึ่งไบต์โดยการเปลี่ยนไปc3l cE
Candy Gumdrop

@ CandyGumdrop ว้าวฉันไม่เคยรู้จักตัวพิมพ์ใหญ่ตอนEก่อน
TSH

นอกจากนี้คุณยังสามารถทำcW(ซึ่งดูเหมือนว่าแตกต่างกัน แต่จริง ๆ แล้วเหมือนกันcE) 3sหรือ งานที่ดี! ฉันเพิ่งจะโพสต์คำตอบที่ถูกต้องเกือบนี้เมื่อฉันเห็นว่ามีคำตอบ 2 V อยู่แล้วซึ่งเป็นเรื่องที่น่าแปลกใจ ฉันได้ลองวิธีการหลายวิธีแล้ว แต่ฉันไม่แน่ใจว่าจะเป็นไปได้หรือไม่ที่จะได้ <13 ไบต์
DJMcMayhem

11

Stax , 13 ไบต์

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

เรียกใช้และแก้ไขข้อบกพร่อง

คลายกล่อง ungolfed และแสดงความคิดเห็นมันมีลักษณะเช่นนี้

.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

brainfuck, 164

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

ลองออนไลน์!

"brainfuck!" ส่วนหนึ่งของสตริงที่ถูกสร้างขึ้นด้วยเครื่องมือนี้อาจจะสามารถ golfed เพิ่มเติมด้วยมือ


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 ไบต์ขอบคุณศูนย์รวมแห่งความไม่รู้

34 ไบต์เช่นกันโดยใช้สตริงที่จัดรูปแบบใหม่กว่าด้วยGábor Fekete:

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

ลองออนไลน์!



สิ่งที่เกี่ยวกับการสูญเสียlambda s:และแทนที่%s[3:]ด้วย%input()[3:]? (-4 ไบต์)
niko

@niko ถ้าฉันเข้าใจสิ่งที่คุณกำลังพูดจะไม่พิมพ์อะไรเลย กฎเริ่มต้นบนไซต์นี้เป็นโปรแกรมเต็มรูปแบบที่พิมพ์เอาต์พุตหรือฟังก์ชันที่ส่งคืนเอาต์พุต โดยปกติสิ่งที่คุณแนะนำจะเรียกว่า snippet และจะไม่เป็นคำตอบที่สมบูรณ์มันจะต้องถูกห่อด้วยprint()อีก 7 ไบต์ซึ่งเป็นสาเหตุที่ Python ตอบว่าใช้ lambdas
Stephen

แต่นั่นแตกต่างจากคำตอบ (และส่วนใหญ่) ที่นี่หรือไม่ ฉันหมายความว่าทั้งสองอย่างไม่ได้พิมพ์อะไรเลยและทั้งคู่ก็คืนค่าเอาต์พุตเดียวกันใช่ไหม (ค่อนข้างใหม่ที่นี่ - ยังคงคุ้นเคยกับ CG)
niko

2
@niko ไม่เป็นไร! ด้วยlambda sฉันได้กำหนดฟังก์ชั่น (ไม่ระบุชื่อ) ถ้าคุณดูที่ส่วนหัวและท้ายในการเชื่อมโยง TIO ผมชื่อฟังก์ชั่นที่แล้วเรียกมันว่าด้วยf f("I'm whatever")จากนั้นฟังก์ชันจะคืนค่าเอาต์พุตที่คาดหวัง ด้วยตัวอย่างของคุณคุณไม่พิมพ์หรือกลับจากฟังก์ชั่น - คุณมีรหัสเล็กน้อยที่ประเมินผลที่ถูกต้อง แต่ไม่ได้ทำอะไรกับมัน คุณสามารถเรียกใช้โปรแกรมได้หลายครั้งคุณสามารถเรียกใช้ฟังก์ชันได้หลายครั้ง แต่ข้อมูลโค้ดเป็นเพียงตัวอย่างข้อมูล
Stephen

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 )ด้วย"(.* )
Aaron Hayman

1
@AaronHayman ไม่ทำงานI'm a programmer(มีหลายที่) เพราะความ
โลภ

@NahuelFouilleul ใช่ฉันไม่แน่ใจว่าจะพิจารณาพื้นที่สีขาวก่อนหรือหลัง
niko

1
โอเคฉันบันทึกไบต์แล้วและฉันคิดว่าอันนี้ใช้งานได้ลองออนไลน์!
Aaron Hayman

2
2 ไบต์โดยการเปลี่ยนsubไป"I'm(.*)" and "Hi\\1, I'm R"และ 3 ไบต์โดยการป้อนข้อมูลจาก stdin ใช้scan: ลองออนไลน์
จูเซปเป้


6

x86 ,37 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" จะเป็นหนึ่งในภาษาที่มีอยู่ในสถาปัตยกรรมนั้น (โปรดสังเกตว่ามันมีช่องว่างอยู่ในนั้น)
Jonathan Allan

5
ฉันคิดว่า "x86" น่าจะดีจริง ๆ มันเป็นสนามกอล์ฟทุกหลัง :)
Jonathan Allan


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 ซึ่งจะถูกเพิ่มในวงก่อนที่จะพิมพ์เพื่อบันทึกไบต์ ค่าคงที่นี้ 102 ตัวที่ต่ำกว่าแต่ละอักขระที่ถูกสร้างด้วยโปรแกรม Javaนี้ นอกจากนี้แทนที่จะผลักดันค่า-70สำหรับช่องว่างทั้งสองครั้งช่องว่างที่สองใน"!ecapsetihW m'I ,"นั้นจะถูกคัดลอกจากช่องแรกด้วย Copy builtin เพื่อบันทึกสองสามไบต์


5

ภาษาสูตร IBM / Lotus Notes, 61 62 ไบต์

+1 เพราะฉันไม่ได้สังเกตเห็น!ในตอนท้ายของผลลัพธ์

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

iสูตรคำนวณข้อมูลที่จะนำมันของการป้อนข้อมูลจากฟิลด์ที่สามารถแก้ไขได้ มันจะล้มเหลวสำหรับ "ฉันเป็นฉัน" แต่เนื่องจากมันไม่มีเหตุผลใด ๆ เลยฉันจึงคิดว่ามันจะไม่เกิดขึ้น

น่าละอายที่ขนาด 32 ไบต์ชื่อของภาษานั้นมีความยาวมากกว่าครึ่งของสูตรทั้งหมด!

ภาพหน้าจอด้านล่างแสดงตัวอย่างอินพุตและเอาต์พุต:

ป้อนคำอธิบายรูปภาพที่นี่


5
ดูเหมือนว่าภาษาของคุณจะดีสำหรับงานถ้าชื่อไม่นาน :)
connectyourcharger

ถ้าผมเป็นร้ายแรงฉันจะอาจจะเพียงแค่เรียกมันFormulaซึ่งเป็นวิธีการที่จะกล่าวถึงใน Notes / Domino :-) นักพัฒนาชุมชน
ElPedro

1
@PeterCordes - เป็นไปได้ แต่ Lotus Notes / Domino ยังมี LotusScript เป็นภาษา inbuilt ดังนั้นเราอาจจะต้องเจาะจง ;-) อีกนิดหน่อย
ElPedro

1
จริง ๆ แล้วอาจจะดีไปกว่านั้นอีกเล็กน้อยเนื่องจาก IBM ได้แบรนไปยัง IBM Notes แต่จากนั้นพวกเขาแบรนกับ IBM Domino อีกครั้งดังนั้นฉันเดาว่าการแก้ไขอย่างเคร่งครัดควรเป็น "Hi @PeterCordes ฉันสูตร IBM Domino" :)
ElPedro

1
@PeterCordes เฉพาะชิ้นส่วนที่สำคัญของชื่อภาษาที่จะต้อง - ฉันยอมรับPerlทดแทนสำหรับหรือPerl 5 Perl 5 -p
connectyourcharger

5

sed ( -r), 31 28 25 ไบต์

-3 ไบต์ต้องขอบคุณ Shaggy -3 ไบต์เนื่องจาก-rไม่จำเป็นในเอาต์พุต

s/I'm(.*)/Hi\1, I'm sed!/

TIO



อืม ... วิธีการของเราในการนับธงคือการประกาศให้เป็นภาษาต่าง ๆ ดังนั้นฉันคิดว่าคุณอาจต้องการ-rแต่มันก็คุ้มค่าที่จะให้ Meta ทำการชั่งน้ำหนัก
Shaggy

ฉันลบเพราะ perl 5 คำตอบและความคิดเห็น
Nahuel Fouilleul


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

Ruby -p , 32 27 26 ไบต์

ไบต์ -5 โดยใช้ประโยชน์จากนิคเคนเนดีคำตอบวุ้น

-1 ไบต์จากการแยกจุดที่แตกต่างในสตริง และตระหนักว่า bytecount เก่าของฉันนั้นผิดด้วย

~/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
หมึกมูลค่า

Gotcha คำตอบที่ดี!
connectyourcharger


4

รุ่นที่ 22 + 3 = 25 ไบต์

@echo Hi %*, %0 Batch!

+3 ไบต์สำหรับการตั้งชื่อไฟล์นี้I'm(ด้วย.batนามสกุลที่จำเป็นสำหรับไฟล์แบทช์) เรียกว่าเป็นเมื่อมันจะสะท้อนI'm hungryHi hungry, I'm Batch!


โปรแกรมควรได้รับI'mแต่ที่นี่เป็นชื่อของสคริปต์ที่ไม่ทราบว่ามันถูกต้องหรือเว้นแต่ว่ามันเป็นล่ามที่มีสคริปต์ในเส้นทางปัจจุบัน
Nahuel Fouilleul

1
@NahuelFouilleul ล่ามเป็นCMDเช่นนั้นจริง ๆ แล้วช่วยฉัน 2 ไบต์?
Neil


4

Perl 5 -p , 31 24 ไบต์

ลดตามคำชี้แจงจาก OP และข้อเสนอแนะจาก @NahuelFouilleul

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

ลองออนไลน์!



1
อาจ$^X $]เป็นตัวแปรพิเศษที่สามารถใช้ได้ แต่ 5 ตัวจะสั้นกว่า$]
Nahuel Fouilleul

คุณต้องการรวมชื่อ5เป็นส่วนหนึ่งของชื่อภาษาหรือไม่? เช่นคุณสามารถยืนยันว่า Perl 5 "คิดว่าตัวเอง" เป็น "Perl" นั่นคือกรณีก่อนที่ Perl 6 จะมีอยู่และ codegolf ตอบเพียงแค่ต้องการที่จะใช้ภาษาอย่างน้อยหนึ่งภาษาดังนั้นเลือกภาษาเก่า
Peter Cordes

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;

ลองออนไลน์!

ลิงก์ monadic ที่รับอินพุตเป็นอาร์กิวเมนต์และส่งคืนสตริง Jelly

คำอธิบาย

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

1
Hang on, Jelly มีในตัวสำหรับคำว่า "Jelly" หรือเปล่า?
connectyourcharger

3
@connectyourcharger เป็นคำในพจนานุกรมที่บีบอัด
Nick Kennedy

Ah, นั่นสมเหตุสมผล
connectyourcharger

4

VBA (Excel) 27 28ไบต์

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

ข้อมูลเข้าในเซลล์ A1 ของแผ่นงานที่ใช้งานอยู่ใน Excel เรียกใช้รหัสในหน้าต่างทันที

ใช้ประโยชน์จากความจริงที่ว่า"SomeString"SomeValueและSomeValue"SomeString"จะเชื่อมโยงโดยปริยายและการละเว้นอาร์กิวเมนต์ที่สามจากMIDฟังก์ชันจะใช้อักขระทั้งหมดจากจุดสิ้นสุดของอินพุต - เปลี่ยนเป็นฟังก์ชัน "dump initial characters"

(-1 ไบต์ขอบคุณ Shaggy แต่ +1 เมื่อ OP ยืนยันว่าคำตอบทั้งหมดควรลงท้ายด้วยเครื่องหมายอัศเจรีย์)
(-1 ไบต์ขอบคุณ Taylor Scott เตือนให้ฉันทราบว่าการเสนอราคาสองเท่าสุดท้ายเป็นทางเลือก)


1
คุณสามารถลบที่ว่างหลังจากHiและแทนที่5ด้วย4?
Shaggy

@Shaggy ... ใช่ใช่ฉันทำได้ ไม่ทราบว่าฉันพลาดไปได้อย่างไรขอบคุณ
Chronocidal

1
คุณสามารถวางไบต์ด้วยการลบล่าสุด"จากโซลูชันนี้และในขณะที่คุณใช้การประเมินสัญกรณ์ (วงเล็บเหลี่ยม) คุณควรทำเครื่องหมายโซลูชันนี้ว่าเป็น Excel VBA เนื่องจากเครื่องหมายนั้นมีเฉพาะใน Excel
Taylor Scott


3

05AB1E , 23 21 ไบต์

บันทึก 2 ไบต์ขอบคุณKevin Cruijssen

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

ลองออนไลน์!

คำอธิบาย

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

21 ไบต์ และเลวร้ายเกินไปเครื่องหมายอัศเจรีย์อยู่ที่นั่น .. ตั้งแต่•äƵí•hR1 "05AB1E"ไบต์สั้นกว่า :)
Kevin Cruijssen

@KevinCruijssen: ว้าว! ฉันรู้สึกโง่ที่ไม่ได้เริ่มต้นด้วย "," ใช่ฉันพยายาม•äƵí•hRเช่นกัน แต่อย่างที่คุณพูดมันน่าเสียดายที่ไม่มีการบันทึกที่นี่
Emigna

3

QuadR , 22 ไบต์

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

ลองออนไลน์!

สิ่งนี้แทนที่:

^... สามตัวอักษรเริ่มต้น
และ
$ จุดสิ้นสุดของบรรทัด

กับ

Hi
และ
,I'm QuadR
ตามลำดับ


ดังนั้นคุณสามารถแลกเปลี่ยนสองบรรทัดกลางและเปลี่ยนภาษาเป็น Retina และยังคงเอาชนะ @ KevinCruijssen คำตอบได้หรือไม่
Neil

@ ไม่มีฉันเดาเช่นนั้น แต่ก็ยังสั้นกว่าของคุณ Tbf, QuadR เป็นเพียงบางฝาครอบสำหรับ⎕Rผู้ประกอบการ APL ไม่ได้ตั้งใจสำหรับกอล์ฟ
อดัม

อา แต่คำตอบของฉันใช้ได้กับ Retina 1 เท่านั้นไม่ใช่ Retina 0.8.2
Neil

3

เรติน่า22 22ไบต์

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

ลองออนไลน์! ลิงค์มีกรณีทดสอบ ไม่ทำงานใน Retina 0.8.2 ดังนั้นปรับคำตอบ QuadR ของ @ Adámแทน คำอธิบาย: รูปแบบว่างจึงตรงกับทุกตำแหน่งในสตริงอินพุต เราต้องการแค่การจับคู่ที่สาม (หรือสี่เท่านั้น) การเปลี่ยนตัวจะถูกนำไปใช้กับการแข่งขันนั้น ภายในการทดแทนนั้น$'อ้างถึงส่วนที่เหลือของสตริงและ$`อ้างอิงจุดเริ่มต้นของสตริง


3

เรติน่า 0.8.2 , 26 25 23 ไบต์

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

-1 ไบต์ขอบคุณที่@attinat
-2 bytes โดยการตอบคำถาม QuadR ของ@ Adámดังนั้นอย่าลืมโหวตให้เขา !!

PS: @Neilโพสต์คำตอบ Retina สั้นลงในเวอร์ชั่นใหม่ดังนั้นฉันจึงเปลี่ยนคำตอบนี้เป็น Retina 0.8.2 อย่างชัดเจน

ลองออนไลน์

คำอธิบาย:

แทนที่อักขระสามตัวแรกด้วย "Hi":

^...
Hi

แล้วต่อท้าย "ฉัน Retina!" (โดยแทนที่ส่วนท้ายของสตริง):

$
, I'm Retina!

1
มันไม่ควรจะเป็นแบบนี้แทนเหรอ?
attinat

2
หรือดีกว่า25 ไบต์
attinat

@attinat แน่นอนว่าไม่ได้สังเกตเห็นผลลัพธ์ที่ไม่ถูกต้อง .. >.> และขอบคุณสำหรับ -1!
Kevin Cruijssen

3

ทุบตี, 24 ไบต์

echo Hi ${@:2}, $1 bash!

TIO


แทนที่bashด้วย$0เพื่อบันทึกสองสามไบต์
roblogic

1
@roblogic $0จะพิมพ์ชื่อสคริปต์หรือทำงานbash -c 'echo Hi ${@:2}, $1 $0!' bash $@แต่ควรนับในขนาด
Nahuel Fouilleul
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.