รหัสจอห์นนี่รหัส, รหัส!


75

พ่อผู้ก่อตั้งร็อคแอนด์โรลChuck Berryเสียชีวิตอย่างเศร้าใจในวันนี้

พิจารณาการขับร้องของเพลงที่โด่งดังของเขา" Johnny B. Goode ":

Go, go
Go Johnny go, go
Go Johnny go, go
Go Johnny go, go
Go Johnny go, go
Johnny B. Goode

(มีวิธีอื่น ที่ถูกเว้นวรรค แต่ข้างต้นจะใช้เพื่อจุดประสงค์ของการท้าทาย)

ท้าทาย

ให้ตัวอักษร az ตัวพิมพ์เล็กสตริง non, ส่งเสียงคอรัสของ "Johnny B. Goode" พร้อมกับอินสแตนซ์ทั้งหมดของGoหรือgoแทนที่ด้วยสตริงอินพุต, ตัวพิมพ์ใหญ่ในลักษณะเดียวกัน

บรรทัดใหม่ต่อท้ายอาจเลือกปฏิบัติตาม ไม่มีอะไรในคอรัสควรเปลี่ยนแปลง

ตัวอย่างเช่นถ้าอินพุตเป็นcodeเอาต์พุตจะต้องตรงทั้งหมด

Code, code
Code Johnny code, code
Code Johnny code, code
Code Johnny code, code
Code Johnny code, code
Johnny B. Codeode

ตามด้วยตัวเลือกขึ้นบรรทัดใหม่

โปรดทราบว่ามูลค่าของทุกคำที่ตรงกับการขับร้องเดิมและ (แม้จะไม่มีจังหวะ) GoในGoodeจะถูกแทนที่เช่นเดียวกับคำแต่ละคำและGogo

รหัสที่สั้นที่สุดในหน่วยไบต์ชนะ

กรณีทดสอบ

"input"
output

"go"
Go, go
Go Johnny go, go
Go Johnny go, go
Go Johnny go, go
Go Johnny go, go
Johnny B. Goode

"code"
Code, code
Code Johnny code, code
Code Johnny code, code
Code Johnny code, code
Code Johnny code, code
Johnny B. Codeode

"a"
A, a
A Johnny a, a
A Johnny a, a
A Johnny a, a
A Johnny a, a
Johnny B. Aode

"johnny"
Johnny, johnny
Johnny Johnny johnny, johnny
Johnny Johnny johnny, johnny
Johnny Johnny johnny, johnny
Johnny Johnny johnny, johnny
Johnny B. Johnnyode

"fantastic"
Fantastic, fantastic
Fantastic Johnny fantastic, fantastic
Fantastic Johnny fantastic, fantastic
Fantastic Johnny fantastic, fantastic
Fantastic Johnny fantastic, fantastic
Johnny B. Fantasticode

46
พลาดโอกาสสำหรับกรณีทดสอบ: an, c,cath
นีล

54
ใครบางคนโปรดทำรุ่น Go
jl6

2
โปรแกรมควรจัดการกับสตริงหลายคำอย่างไร
สหาย SparklePony

6
ลองสังเกตความเงียบสักหนึ่งหรือสองนาทีและขอให้ Rest In Peace to Chuck
Erik the Outgolfer

1
ข้อความโค้ดดีที่สุดเมื่อ Google Translator พูดภาษาสเปน: translate.google.com/#es/en/…
palsch

คำตอบ:



14

VIM, 54 49 Keystrokes (บันทึกการกดแป้น 1 ครั้งจากKritixi Lithos )

yw~hC<Ctrl-R>", <Ctrl-R>0<Enter>Johnny B. <Ctrl-R>"ode<Esc>}O<Ctrl-R>", Johnny <Ctrl-R>0, <Ctrl-R>0<Esc>3.         

เริ่มต้นด้วยคำบนบรรทัดบนไฟล์ด้วยเคอร์เซอร์ที่อักขระแรกจากนั้นสิ่งนี้จะแทนที่ทั้งหมดด้วยข้อความคำอธิบาย

  1. คัดลอกคำลงในการลงทะเบียนจากนั้นเปลี่ยนอักษรตัวแรกที่จะเป็นตัวพิมพ์ใหญ่และบันทึกลงในการลงทะเบียน
  2. เขียนบรรทัดแรกโดยใช้รีจิสเตอร์เพื่อกรอกข้อมูลในบรรทัดใหม่และบรรทัดสุดท้าย
  3. เขียนบรรทัดที่สองโดยใช้รีจิสเตอร์เพื่อเติมคำแทน
  4. ทำซ้ำเส้นกลาง 3 ครั้ง

ลองออนไลน์! (ขอบคุณDJMcMayhem !)


ฉันคิดว่าคุณสามารถทำได้YแทนyyหรืออาจจะGแทนที่จะเป็น2j
Kritixi Lithos

และคุณสามารถทำได้<CR>แทน<esc>o
Kritixi Lithos

นอกจากนี้ยังhDทำงานแทนdiw
Kritixi Lithos

ขอบคุณสำหรับเคล็ดลับ! ฉันสามารถทำงานชิ้นสุดท้ายของคุณให้เป็นเวอร์ชันปัจจุบันได้ ฉันยังประหยัดอีกไม่กี่โดยการเขียนบรรทัดแรกและบรรทัดสุดท้ายในครั้งเดียวแล้วกรอกตรงกลาง
Dominic A.


11

Pure Bash, 69 76 ไบต์

M=aaaa;echo -e ${1^}, $1 ${M//a/\\n${1^} Johnny $1, $1}\\nJohnny B. ${1^}ode

ลองออนไลน์!


2
ในการลองแบบออนไลน์มันไม่จำเป็นต้องใช้อักษรตัวพิมพ์ใหญ่ ตัวอย่างเช่นหากคุณป้อนด้วยcodeตัวพิมพ์เล็กคุณจะไม่ได้รับอักษรตัวพิมพ์ใหญ่ที่ต้องการ
ทอมคาร์เพนเตอร์

2
@TomCarpenter แก้ไขแล้ว! :)
R. Kap

11

05AB1E , 37 ไบต์

™„, ¹J¹Ð™”ÿºÇ ÿ, ÿ”4.D¹™”ºÇ B. ÿode”»

ลองออนไลน์!

คำอธิบาย

™„, ¹J                                # concatenate title-cased input with ", " and input
     ¹Ð™                              # push input, input, title-cased input
        ”ÿºÇ ÿ, ÿ”                    # push the string "ÿ Johnny ÿ, ÿ" with "ÿ" replaced 
                                      # by title-cased input, input, input
                  4.D                 # push 3 copies of that string
                     ¹™               # push title-cased input
                       ”ºÇ B. ÿode”   # push the string "Johnny B. ÿode" with "ÿ" replaced 
                                      # by title-case input
                                   »  # join the strings by newlines

6

แบตช์, 207 ไบต์

@set s= %1
@for %%l in (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z)do @call set s=%%s: %%l=%%l%%
@set j="%s% Johnny %1, %1"
@for %%l in ("%s%, %1" %j% %j% %j% %j% "Johnny B. %s%ode")do @echo %%~l

6

JavaScript, 98

s=>[S=s[0].toUpperCase()+s.slice(1),[,,,].fill(` ${s}
${S} Johnny `+s)]+`, ${s}
Johnny B. ${S}ode`

ใช้การเรียงลำดับของอาเรย์กับสตริงในทางที่ผิดเพื่อสร้างเครื่องหมายจุลภาค สร้างอาร์เรย์ของฟอร์ม:

["Go",
 " go\nGo Johnny go", (repeated...)]

และเชื่อมต่อกับสตริงของฟอร์ม", go\nJohnny B. Goode":

["Go",
 " go\nGo Johnny go",
 " go\nGo Johnny go",
 " go\nGo Johnny go",
 " go\nGo Johnny go"] + ", go\nJohnny B. Goode"

6

JavaScript (ES6), 104 101 99 ไบต์

(i,u=i[0].toUpperCase()+i.slice(1),x=`, ${i}
${u} Johnny `+i)=>u+x+x+x+x+`, ${i}
Johnny B. ${u}ode`

รุ่นก่อนหน้า:

(i,u=i[0].toUpperCase()+i.slice(1))=>u+`, ${i}
${u} Johnny ${i}`.repeat(4)+`, ${i}
Johnny B. ${u}ode`

มันทำงานอย่างไร:

  • มันเป็นฟังก์ชั่นนิรนามที่รับอินพุตเป็นพารามิเตอร์ i

  • กำหนดตัวแปรuเป็นอินพุตiด้วยอักษรตัวแรกที่เป็นตัวพิมพ์ใหญ่ (โปรดทราบว่าสิ่งนี้ถือว่าอินพุตเป็นแบบไม่ว่างเปล่าซึ่งก็โอเค)

  • เพียงสร้างสตริงที่จะส่งคืนจากตัวแปรสองตัวนั้นโดยตรง

  • การทำซ้ำสตริง"go, \nGo Johnny go"สี่ครั้งแทนที่จะทำซ้ำ"Go Johnny go, go"จะบันทึกหนึ่งไบต์


แก้ไข 1:ลืมที่จะตีอัฒภาคฮ่าฮ่า !! นอกจากนี้ยัง miscounted ไบต์มันก็เดิม 102, 104 ไม่ขอบคุณapsillers

แก้ไข 2:แทนที่จะ.repeat(4)ใส่สตริงนั้นลงในตัวแปรxและทำการx+x+x+xอนุญาตให้บันทึกสองไบต์


ตัวอย่างการทดสอบ


ยังไงก็ตามฉันใหม่ที่นี่ฉันมีคำถาม: สองบรรทัดใหม่ในโปรแกรมของฉันนับเป็นไบต์? ถ้าไม่จริงมันมี 102 ไบต์ แต่ฉันคิดว่ามันน่าจะนับ ... ใช่ไหม
Pedro A

ใช่พวกเขาแต่ละคนใช้ไบต์
Jonathan Allan

ฉันนับ 102 ไบท์ได้ที่นี่ (ใช้mothereff.in/byte-counter ) และก็ไม่จำเป็นต้องใช้เซมิโคลอนสุดท้ายดังนั้นจึงเป็น 101 ไบท์จริงๆ
apsillers

@apsillers คุณถูกต้องฉันผิด! และแย่กว่านั้นฮ่าฮ่าฉันลืมที่จะเล่นอัฒภาค ขอบคุณ
เปโดร

6

V , 41 , 38 ไบต์

ÄJé,Ùäwa johnny 5ÄGdwwcWB.W~Aode.Î~

ลองออนไลน์!

ความท้าทายที่สมบูรณ์แบบสำหรับ V!

คำอธิบาย:

ä$                              " Duplicate the input ('go' --> 'gogo', and cursor is on the first 'o')
  a, <esc>                      " Append ', '
                                " Now the buffer holds 'go, go'
          Ù                     " Duplicate this line
           äw                   " Duplicate this word (Buffer: 'gogo, go')
             a Johnny <esc>     " Append ' Johnny ' (Buffer: 'go Johnny go, go')
                           5Ä   " Make 5 copies of this line
G                               " Go to the very last line in the buffer
 dw                             " Delete a word
   w                            " Move forward one word (past 'Johnny')
    cW                          " Change this WORD (including the comma), to
      B.<esc>                   "   'B.'
             W                  " Move forward a WORD
              ~                 " Toggle the case of the character under the cursor
               Aode.<esc>       " Apppend 'ode.'
                         ÎvU    " Capitalize the first letter of each line

5
กรุณาอธิบาย
ckjbgames

@ckjbgames เสร็จแล้ว!
DJMcMayhem


5

C, 156 151 bytes

i,a,b;B(char*s){a=*s++;printf("%c%s, %c%s\n",b=a-32,s,a,s);for(;++i%4;)printf("%c%s Johnny %c%s, %c%s\n",b,s,a,s,a,s);printf("Johnny B. %c%sode",b,s);}

สิ่งนี้ไม่ได้รวบรวมใน gcc 4.4.7
villapx

@ villapx ฉันไม่เห็นว่าทำไมถึงไม่เป็นเช่นนั้น มันรวบรวมได้ดีกับ MinGW และทำงานออนไลน์เช่นกัน บางทีธงคอมไพเลอร์กำลังปิดใช้งานการประกาศประเภทหรือฟังก์ชั่นโดยนัย?
Steadybox

มันสร้างคำเตือนบางอย่าง แต่เมื่อคุณเพิ่มmain()ที่จริงเรียกฟังก์ชั่นการทำงาน ...
moooeeeep

@moooeeeep ตกลงนั่นคือสิ่งที่ฉันหายไป - ฉันอยู่ภายใต้ความเข้าใจว่าการท้าทายนี้จำเป็นต้องใช้โปรแกรมที่สมบูรณ์แต่จริงๆแล้วมันไม่ได้พูดอย่างชัดเจนใน OP
villapx

5

Python 3, 88 ไบต์

lambda x:("{0}, {1}\n"+4*"{0} Johnny {1}, {1}\n"+"Johnny B. {0}ode").format(x.title(),x)

สตริงรูปแบบง่าย ๆ พร้อมอาร์กิวเมนต์ตำแหน่ง


@EricDuminil ขอบคุณ แก้ไขแล้ว.
wizzwizz4

1
@EricDuminil ฉันรู้ว่ามันเป็นจุดสิ้นสุดของบรรทัด แต่มีการตัดบรรทัดในหน้าต่างตัวแก้ไข ... : - /
wizzwizz4

ฉันนับ 88 ไบต์
Felipe Nardi Batista

1
@EricDuminil len("\n".__repr__()[1:-2])คือ 2 ฉันลืม__repr__()เมื่อทำการวัดความยาวของโปรแกรม
wizzwizz4

1
@EricDuminil เฉพาะเมื่อคุณห่อด้วย"""เครื่องหมายแทน"เครื่องหมาย
wizzwizz4




4

C #, 219 211 212 146 122 Bytes

ดำเนินการหลายคำแนะนำจากความคิดเห็นพร้อมการเพิ่มประสิทธิภาพเพิ่มเติมนี่คือ Endresult:

a=>{string x=(char)(a[0]^32)+a.Remove(0,1),n=a+"\n",c=", ",r=n+x+" Johnny "+a+c;return x+c+r+r+r+r+n+$"Johnny B. {x}ode";}

ลองออนไลน์!

Explantation:

a=>//Input parameter Explanation assumes "go" was passed
{
string x = (char)(a[0] ^ 32) + a.Remove(0, 1)// Input with first letter Uppercase "go"->"Go"
,
n = a + "\n",                               //"go" followed by newline
c = ", "                                    //Hard to believe: Comma followed by space
,
r = n + x + " Johnny " + a + c             //"go" follwed by newline followed by "Go Johnny go, "
;
return x + c + r + r + r + r + n + $"Johnny B. {x}ode"; };//return in the right order                              //Johnny B. Goode

เอาท์พุทสำหรับ testcases:

Go, go
Go Johnny go, go
Go Johnny go, go
Go Johnny go, go
Go Johnny go, go
Johnny B. Goode

Code, code
Code Johnny code, code
Code Johnny code, code
Code Johnny code, code
Code Johnny code, code
Johnny B. Codeode

A, a
A Johnny a, a
A Johnny a, a
A Johnny a, a
A Johnny a, a
Johnny B. Aode

Johnny, johnny
Johnny Johnny johnny, johnny
Johnny Johnny johnny, johnny
Johnny Johnny johnny, johnny
Johnny Johnny johnny, johnny
Johnny B. Johnnyode

Fantastic, fantastic
Fantastic Johnny fantastic, fantastic
Fantastic Johnny fantastic, fantastic
Fantastic Johnny fantastic, fantastic
Fantastic Johnny fantastic, fantastic
Johnny B. Fantasticode

แก้ไข: ขอบคุณ Weston ที่แนะนำให้ใช้ฟังก์ชั่น


1
คุณไม่จำเป็นต้องจัดเตรียมโปรแกรมทั้งหมดฟังก์ชั่นหรือดีกว่าแลมบ์ดาจะพอเพียง
weston

1
+1 ^32ขอบคุณสำหรับ สั้นกว่าที่&~32ฉันใช้อยู่ นอกจากนี้พอร์ตของคำตอบ Java 7ของฉันดูเหมือนจะสั้นลง: string x(string a){string x=(char)(a[0]^32)+a.Remove(0,1),n=a+"\n",c=", ",r=n+x+" Johnny "+a+c;return x+c+r+r+r+r+n+"Johnny B. "+x+"ode";}}( 139 bytes ) ลองที่นี่
Kevin Cruijssen

1
หวังว่าคุณจะไม่รังเกียจ แต่ฉันได้ขโมยความคิดจากคุณ : P เพราะไม่รู้ว่าเป็นคนเลวฉันจะทิ้งเคล็ดลับไว้ที่นี่: คุณสามารถแปลงวิธีการของคุณให้เป็นรูปแบบแลมบ์ดา ( string x(string a)-> (a)=>, -13 ไบต์), เพียง 1 ไบต์ที่อยู่ข้างหลังฉัน;)
auhmaan

1
@auhmaan หากคุณกำลังรวบรวมไปFunc<string, string>คุณก็สามารถทำจำเป็นที่จะต้องไม่มีa=> ()
TheLethalCoder

3

MATLAB / Octave , 133 111 bytes

@(a)regexprep(['1, 2' 10 repmat(['1 32, 2' 10],1,4) '3B. 1ode'],{'1','2','3'},{[a(1)-32 a(2:end)],a,'Johnny '})

มันเป็นการเริ่มต้น หวังว่าจะสามารถลดได้อีก

โดยทั่วไปมันเป็นฟังก์ชั่นที่ไม่ระบุชื่อซึ่งรับอินพุตสตริงจากนั้นใช้ regex เพื่อสร้างเอาต์พุตที่ต้องการ

@(a)                                                    %Anonymous Function
    regexprep(                                          %Regex Replace
        ['1, 2' 10                                      %First line is: Code, code
            repmat(['1 32, 2' 10],1,4)                  %Then four lines of: Code Johnny code, code 
                               '3B. 1ode'],             %Final line: Johnny B. Codeode
         {'1','2','3'},                                 %1,2,3 are our replace strings in the lines above
         {[a(1)-32 a(2:end)],a,'Johnny '}               %We replace with '(I)nput', 'input' and 'Johnny ' respectively.
    )

ตัวอย่าง:

@(a)regexprep(['1, 2' 10 repmat(['1 32, 2' 10],1,4) '3B. 1ode'],{'1','2','3'},{[a(1)-32 a(2:end)],a,'Johnny '});
ans('hi')
ans =

Hi, hi
Hi Johnny hi, hi
Hi Johnny hi, hi
Hi Johnny hi, hi
Hi Johnny hi, hi
Johnny B. Hiode

คุณสามารถเรียงลำดับของ ลองออนไลน์! . รหัสไม่สามารถใช้งานได้กับ Octave เนื่องจากตัวอักษรตัวพิมพ์ใหญ่ทั้งหมดกลายเป็น${upper($0)}ในขณะที่ใน MATLAB จะถูกแปลงเป็นตัวอักษรตัวพิมพ์ใหญ่จริง

เมื่ออินพุตถูกรับประกันว่าเป็นa-z(ตัวอักษรตัวเล็ก) ฉันสามารถบันทึก 22 ไบต์โดยใช้การลบแบบง่าย 32 เพื่อแปลงอักษรตัวแรกในสตริงเป็นทุนแทนที่จะใช้ regex กับupper()ฟังก์ชัน

ดังนั้นรหัสตอนนี้สามารถใช้งานกับอ็อกเทฟได้เช่นกันดังนั้นตอนนี้คุณสามารถลองออนไลน์ได้แล้ว!


3

Ruby, 89 88 86 79 ไบต์

การส่งกอล์ฟครั้งแรกของฉัน:

->x{"^, *
#{"^ Johnny *, *
"*4}Johnny B. ^ode".gsub(?^,x.capitalize).gsub ?*,x}

ขอบคุณมากที่ @manatwork สำหรับความคิดเห็นที่ยอดเยี่ยมของเขา: น้อยกว่า 7 ไบต์!


1
ดี ไม่ต้องใช้วงเล็บในพารามิเตอร์ proc คุณสามารถใช้อักขระบรรทัดใหม่แทนตัวอักษร ตัวอักษรสตริงตัวอักษรเดียวสามารถเขียนด้วย?สัญกรณ์; .gsubไม่จำเป็นต้องใช้วงเล็บในรอบพารามิเตอร์สุดท้าย pastebin.com/6C6np5Df
จัดการ

@ การจัดการงาน: ว้าวน่าประทับใจมากและดีต่อคุณ ขอบคุณ!
Eric Duminil

3

โนวา 105 ไบต์

a(String s)=>"#{s.capitalize()+", #s\n"+"#s.capitalize() Johnny #s, #s\n"*4}Johnny B. #s.capitalize()ode"

เนื่องจาก Nova ( http://nova-lang.org ) เป็นเบต้าแรกสุด (และ buggy) จึงมีแฮนดิแคปบางอย่างที่เห็นได้ชัดซึ่งอยู่ที่นี่ทำให้ไม่สามารถใช้ไบต์ได้แม้แต่น้อย

ตัวอย่างเช่นสามารถบันทึกการเรียกใช้ฟังก์ชันตัวพิมพ์ใหญ่ (ซึ่งเรียกว่า 3 ครั้ง) ในตัวแปรโลคอลดังนี้:

a(String s)=>"#{(let c=s.capitalize())+", #s\n"+"#c Johnny #s, #s\n"*4}Johnny B. #{c}ode"

ซึ่งจะมีการดำเนินการไบต์นับลงไป89 ไบต์ เหตุผลที่ไม่สามารถใช้งานได้ในขณะนี้สามารถถูกตำหนิในลำดับการประเมินผลการโต้แย้งในภาษา C เนื่องจากโนวาถูกรวบรวมเป็น C (ลำดับการประเมินอาร์กิวเมนต์จะได้รับการแก้ไขในการอัปเดตในอนาคต)

ยิ่งฉันได้แนะนำคุณสมบัติ "ชื่อ" ในคลาส String (และฉันจะทำหลังจากนี้ lol) เพื่อลดจำนวนจากการเรียกใช้ฟังก์ชันตัวพิมพ์ใหญ่:

a(String s)=>"#{(let c=s.title)+", #s\n"+"#c Johnny #s, #s\n"*4}Johnny B. #{c}ode"

และที่จะเพิ่ม 7 ไบต์รวมใหม่82 ไบต์

นอกจากนี้ (และปิดเพิ่มเติม) เมื่อเพิ่มการอนุมานประเภทแลมบ์ดาตัวแปรแล้วสิ่งนี้จะใช้ได้:

s=>"#{(let c=s.title)+", #s\n"+"#c Johnny #s, #s\n"*4}Johnny B. #{c}ode"

นับจะถูกนำตัวลงไป72 ไบต์

โดยวิธีการนี้เป็นรหัสกอล์ฟครั้งแรกของฉันดังนั้นฉันอาจจะพลาดการปรับปรุงให้ดียิ่งขึ้นที่สามารถทำได้ และนี่เป็นศูนย์กลางไม่ใช่กอล์ฟ , อเนกประสงค์ภาษาผมคิดว่ามันเป็นเรื่องที่น่าประทับใจสวย

รหัส 105 ไบต์แรกทำงานในรุ่น Nova Beta v0.3.8 ที่มีอยู่ในhttp://nova-lang.org

class Test {
    static a(String s)=>"#{s.capitalize()+", #s\n"+"#s.capitalize() Johnny #s, #s\n"*4}Johnny B. #s.capitalize()ode"

    public static main(String[] args) {
        Console.log(a("expl"))
    }
}

เอาท์พุท:

Expl, expl
Expl Johnny expl, expl
Expl Johnny expl, expl
Expl Johnny expl, expl
Expl Johnny expl, expl
Johnny B. Explode

ขอบคุณสำหรับการฟังโฆษณาไร้ยางอายของฉันสำหรับภาษาเอนกประสงค์โนวา (พบได้ที่http://nova-lang.org ... รับไปเลย !!)


3

Brainfuck, 352 ไบต์

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

ลองออนไลน์!

  1. รับอินพุต
  2. บันทึกอักขระพิเศษไว้ใช้ในภายหลัง
  3. เขียนส่วนแรก
  4. บันทึก "Johnny" ไว้สำหรับภายหลัง
  5. พิมพ์ "Go Johnny go, go" สี่ครั้ง
  6. เขียนส่วนสุดท้าย

ฉันชอบความท้าทายใน Brainfuck เสมอมันสนุก มันอาจจะสามารถเล่นกอล์ฟได้มากกว่า แต่การเล่นกอล์ฟ Brainfuck นั้นยาวนาน



3

Java 8, 151 147 146 130 ไบต์

s->{String x=(char)(s.charAt(0)^32)+s.substring(1),n=s+"\n",r=n+x+" Johnny "+s+", ";return x+", "+r+r+r+r+n+"Johnny B. "+x+"ode";}

คำอธิบาย:

ลองที่นี่

s->{                               // Method with String as both parameter and return-type
  String x=                        //  Temp String with: 
           (char)(s.charAt(0)^32)  //   The first letter capitalized
    +s.substring(1),               //   + the rest of the String
         n=s+"\n",                 //  Temp String with input + new-line
         c=", ",                   //  Temp String with ", "
         r=n+x+" Johnny "+s+c;     //  Temp String with "input\nInput Johnny input, "
  return x+c+r+r+r+r+n+"Johnny B. "+x+"ode";
                                   //  Return output by putting together the temp Strings
}                                  // End of method


2

C # , 159 130 128 ไบต์


แข็งแรงเล่นกอล์ฟ

i=>string.Format("{0},{1}????\n{2} B. {0}ode".Replace("?","\n{0} {2}{1},{1}"),(i[0]+"").ToUpper()+i.Substring(1)," "+i,"Johnny");

Ungolfed

i => string.Format( "{0},{1}????\n{2} B. {0}ode"
    .Replace( "?", "\n{0} {2}{1},{1}" ),

    ( i[ 0 ] + "" ).ToUpper() + i.Substring( 1 ), // {0}
    " " + i,                                      // {1}
    "Johnny" );                                   // {2}

อ่านได้ไม่ดี

i => string.Format( @"{0},{1}
    ????
    {2} B. {0}ode"

    // Replaces the '?' for the string format that contains the 
    // repetition of "___ Johnny ___, ___".
    .Replace( "?", "\n{0} {2}{1},{1}" ),

    // {0} - Converts the first letter to upper,
    //       then joins to the rest of the string minus the first letter
    ( i[ 0 ] + "" ).ToUpper() + i.Substring( 1 ),
    // {1} - The input padded with a space, to save some bytes
    " " + i,
    // {2} - The name used as parameter, to save some bytes
    "Johnny" );

รหัสเต็ม

using System;

namespace Namespace {
    class Program {
        static void Main( string[] args ) {
            Func<string, string> func = i =>
                string.Format( "{0},{1}????\n{2} B. {0}ode"
                    .Replace( "?", "\n{0} {2}{1},{1}" ),

                    ( i[ 0 ] + "" ).ToUpper() + i.Substring( 1 ),
                    " " + i,
                    "Johnny" );

            int index = 1;

            // Cycle through the args, skipping the first ( it's the path to the .exe )

            while( index < args.Length ) {
                Console.WriteLine( func( args[index++] ) );
            }

            Console.ReadLine();
        }
    }
}

ข่าว

  • v1.2 - - 2 bytes- เปลี่ยน(i)=>มาi=>ขอบคุณด้วยความคิดเห็นTheLetalCoder
  • v1.1 - -29 bytes- ด้วยการอัพเดทล่าสุดของSir Bitesalotผู้ที่จดจำฉันได้ฉันสามารถแก้ไขสตริงก่อนจัดรูปแบบได้
  • v1.0 - 159 bytes- โซลูชั่นเริ่มต้น

หมายเหตุ

ชื่อเรื่องมีลิงก์ไปยังหน้าเว็บที่มีรหัสและกรณีทดสอบ เพียงแค่กดไปและผลที่ได้จะถูกพิมพ์รหัสด้านล่าง


ไม่จำเป็นสำหรับ()รอบอาร์กิวเมนต์สำหรับเพียงแค่ทำFunc i=>คุณอาจจะสามารถใช้ประโยชน์จากสาย interpolated จาก C # 6 และสูญเสียstring.Formatแม้ว่าฉันไม่ได้ดูรหัสมากเกินไปเพื่อดูว่า (ควรเล็กน้อย)
TheLethalCoder

ฉันสามารถดรอป()แต่ฉันสงสัยว่าฉันสามารถใช้สตริงที่สอดแทรกโดยไม่เพิ่มขนาดของโค้ดเนื่องจากการแทนที่ที่เกิดขึ้นเพื่อยุบการซ้ำซ้อน
auhmaan

อย่างที่ฉันบอกว่าฉันขี้เกียจและไม่ได้ลองทำอะไรเลย! เป็นเพียงข้อเสนอแนะที่ควรพิจารณา
TheLethalCoder

2

Javascript - 72 106 ไบต์

แก้ไข: โอ๊ะโอ !! ฉันไม่ได้ใส่ใจกับกฎตัวพิมพ์ใหญ่! อีกไม่นานหลังจากนี้

แก้ไข 2: ควรปฏิบัติตามกฎทันที!

อาจจะเล่นกอล์ฟมากกว่านี้

c=>(`G,g
`+`G Johnnyg,g
`.repeat(4)+`Johnny B.Gode`).replace(/g/g,' '+c.toLowerCase()).replace(/G/g,' '+c)

ใช้เป็น:

c=>(`G,g
`+`G Johnnyg,g
`.repeat(4)+`Johnny B.Gode`).replace(/g/g,' '+c.toLowerCase()).replace(/G/g,' '+c)
alert(f("Code"));
alert(f("Go"));

2

Excel VBA, 137 121 112 89 87 84 ไบต์

ฟังก์ชันหน้าต่างแบบไม่ระบุชื่อ VBE แบบทันทีที่รับอินพุตประเภทVariant/Stringจากเซลล์[A1]และเอาต์พุตโดยพิมพ์หน้าต่าง VBE ทันที

c=[Proper(A1)]:s=vbCr+c+[" Johnny "&A1&", "&A1]:?c", "[A1]s;s;s;s:?"Johnny B. "c"ode

-16 ไบต์สำหรับการแปลงเป็นฟังก์ชั่นหน้าต่างทันที

-9 ไบต์สำหรับการใช้งาน [PROPER(A1)]

-23 ไบต์สำหรับการFor ...วนซ้ำและใช้?คำสั่งที่ไม่เหมาะสม

-2 ไบต์สำหรับแทนที่ " Johnny "&[A1]&", "&[A1]ด้วย[" Johnny "&A1&", "&A1]

-3 ไบต์สำหรับการใช้+มากกว่า&สำหรับการต่อข้อมูลสตริง

กรณีตัวอย่าง

[A1]="an"          ''  <- Setting [A1] (may be done manually)
                   '' (Below) Anonymous VBE function
c=[Proper(A1)]:s=vbCr+c+[" Johnny "&A1&", "&A1]:?c", "[A1]s;s;s;s:?"Johnny B. "c"ode"
 An, an            ''  <- output
 An Johnny an, an
 An Johnny an, an
 An Johnny an, an
 An Johnny an, an
 Johnny B. Anode

1
เป็นDebug.?sได้อย่างมีประสิทธิภาพDebug.Print? มันทำงานอย่างไร
BruceWayne

1
@BruceWayne เคปดี VBA จะสนับสนุน autoformatting ซึ่งหมายความว่าสิ่งที่ต้องการ?, i=1Toและ&cถูกย่อยลงไปในแง่ละเอียดมากขึ้น แต่สามารถอ่านได้เหมือนPrint, และi = 1 To & cชุมชนได้ตัดสินใจว่ารหัสที่บีบอัดในภาษาเป็นสิ่งที่ยอมรับได้สำหรับการตอบสนอง (ดูcodegolf.meta.stackexchange.com/questions/10258/ … )
Scott Scott

1
@ BruceWayne สำหรับ?ฉันเชื่อว่ามันเป็นเศษเล็กเศษน้อยจาก Excel รุ่นเก่า (4.0 และต่ำกว่า) ที่ใช้แผ่นงานแมโครในสถานที่ VBA ผ่าน VBE ซึ่งมันถูกใช้เป็นคำหลักสำหรับการพิมพ์สตริงที่ให้ไว้ก่อน ไฟล์ข้อความที่ระบุ ?คำหลักที่ตัวเองยังคงมีประโยชน์มากสำหรับการเล่นกอล์ฟรหัสเป็นPrintคำหลักที่จะใช้ในการเขียนสตริงไปยังแฟ้มข้อความในรุ่นปัจจุบันของ VBA หมายเหตุฉันกำลังจะออกไปจากความทรงจำด้วยดังนั้นให้ใช้เวลากับเกลือเม็ด
เทย์เลอร์สกอตต์มี. ค.

1
ดีแล้วที่รู้! ฉันเพิ่งถามไม่ใช่เพื่อวัตถุประสงค์ของ CodeGolf แต่เป็นเพราะฉันเรียนรู้ VBA อย่างต่อเนื่องและนี่คือสิ่งใหม่สำหรับฉันดังนั้นฉันจึงอยากรู้อยากเห็น ชอบเรียนรู้เคล็ดลับเล็ก ๆ น้อย ๆ ใน VBA เสมอ ไชโย!
BruceWayne

1

CJam , 50 ไบต์

r:L(eu\+:M',SLN[MS"Johnny ":OL',SLN]4*O"B. "M"ode"

ลองออนไลน์!

คำอธิบาย:

r:L(eu\+:M',SLN[MS"Johnny ":OL',SLN]4*O"B. "M"ode" e# Accepts an input token.
r:L                                                e# Gets input token and stores it in L.
   (eu\+:M                                         e# Converts token to uppercase-first and stores it in M.
          ',S                                      e# Appears as ", ".
             L                                     e# Input token.
              N                                    e# Newline.
               [                                   e# Opens array.
                M                                  e# Modified token.
                 S                                 e# Space.
                  "Johnny ":O                      e# Pushes "Johnny " and stores it in O.
                             L                     e# Input token.
                              ',SLN                e# The same {',SLN} as before.
                                   ]4*             e# Closes array and repeats it 4 times.
                                      O            e# "Johnny ".
                                       "B. "       e# "B. ".
                                            M      e# Modified token.
                                             "ode" e# "ode".

1

Pyke , 43 ไบต์

l5j", "Qs3
Qld"Johnny "iQs3:D4i"B. ode"+Tj:

ลองออนไลน์!

สร้างและพิมพ์บรรทัดแรกจากนั้นแทรกJohnny goก่อนเครื่องหมายจุลภาคและทำซ้ำ 4 ครั้ง ในที่สุดก็สร้างส่วนสุดท้าย


johnnyดูเหมือนจะไม่ทำงานสำหรับการป้อนข้อมูล tio.run/nexus/…
Dennis

ฉันไม่รู้เลยว่าฉันไม่เห็นสิ่งนั้นได้อย่างไรแก้ไขตอนนี้
บลู

1

Python ขนาด 258 ไบต์

from jinja2 import Template
def f(go):
    t = Template("""{{ Go }}, {{ go }}
{{ Go }} Johnny {{ go }}, {{ go }}
{{ Go }} Johnny {{ go }}, {{ go }}
{{ Go }} Johnny {{ go }}, {{ go }}
{{ Go }} Johnny {{ go }}, {{ go }}
Johnny B. {{ Go }}ode""")
    return t.render(Go=go.title(), go=go)

โปรดสังเกตว่านี่เป็นสิ่งที่เท่าเทียมกับ Java ในขณะนี้และสามารถอ่านได้มาก;)
7610

1
ยินดีต้อนรับสู่เว็บไซต์! คุณสามารถใช้การคูณสตริงเพื่อย่นคำตอบนี้ให้สั้นลง นอกจากนี้ไม่จำเป็นต้องประกาศตัวแปรtเพราะมันถูกเรียกเพียงครั้งเดียว
ข้าวสาลีตัวช่วยสร้าง

ขอบคุณ แต่ฉันตั้งเป้าหมายไว้ที่ 258 bytes เพื่อให้เท่าเทียมกับ Java
user7610

2
ทำไมคุณถึงพยายามจับคู่คะแนนอื่น? นี่คือรหัสกอล์ฟไม่ใช่การประกวดที่สามารถอ่านได้
weston

2
@ user7610 ฉันคิดว่าคุณไม่มีจุด
miradulo

1

Java 6, 258 242 ไบต์

enum j{;public static void main(String[]a){char[]b=a[0].toCharArray();b[0]^=32;System.out.printf("%1$s, %2$s\n%1$s %3$s%2$s, %2$s\n%1$s %3$s%2$s, %2$s\n%1$s %3$s%2$s, %2$s\n%1$s %3$s%2$s, %2$s\n%3$sB. %1$sode",new String(b),a[0],"Johnny ");}}

ส่วนที่ยาวที่สุดคือรูปแบบสำหรับ printf มีปัญหาเกี่ยวกับการป้อนข้อมูลที่แตกต่างกันกว่าสตริงจากaไปz(ใช่ฉันรู้ว่าฉันไม่ต้องการที่จะสนับสนุนสิ่งอื่น)

ไม่พอใจกับความคิดเห็น:

enum j {
    ;

    public static void main(String[] a) {
        char[] b = a[0].toCharArray();              // Copy of the input string
        b[0]^=32;                                   // First character of copy to uppercase
        System.out.printf(
                "%1$s, %2$s\n%1$s %3$s%2$s, %2$s\n%1$s %3$s%2$s, %2$s\n%1$s %3$s%2$s, %2$s\n%1$s %3$s%2$s, %2$s\n%3$sB. %1$sode", // Format string
                new String(b),  // Capitalized string
                a[0],           // Original input string
                "Johnny ");     // "Johnny "
    }
}

แก้ไข: Golfed 16 ไบต์ขอบคุณ Weston


1
คุณสามารถใช้แลมบ์ดาเพื่อบันทึกจำนวนไบต์
corvus_192

1
"Johnny"ตามด้วยช่องว่างเสมอ
weston

b[0]^=32;จะเป็นตัวพิมพ์ใหญ่โดยไม่จำเป็นต้อง(char)ร่าย
weston

1

Mathematica, 83 ไบต์

{a=ToTitleCase@#,b=", ",#,{"
",a," Johnny ",#,b,#}~Table~4,"
Johnny B. ",a}<>"ode"&

ฟังก์ชั่นไม่ระบุชื่อ รับสตริงเป็นอินพุตและส่งคืนสตริงเป็นเอาต์พุต อาจจะเล่นกอล์ฟต่อไป

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.