Mã Johnny Mã, Mã!


75

Người cha sáng lập Rock-and-roll Chuck Berry buồn bã qua đời hôm nay.

Hãy xem xét đoạn điệp khúc của bài hát nổi tiếng " Johnny B. Goode ":

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

(Có nhiều cách khác nó đã được chấm câu nhưng cách trên sẽ phục vụ cho các mục đích của thử thách.)

Thử thách

Đưa ra một chuỗi ký tự không trống, chữ thường az, xuất ra điệp khúc của "Johnny B. Goode" với tất cả các trường hợp Gohoặc được gothay thế bằng chuỗi đầu vào, viết hoa theo cùng một cách.

Một dòng mới có thể tùy chọn theo sau. Không có gì khác trong điệp khúc nên thay đổi.

Ví dụ: nếu đầu vào là codeđầu ra phải chính xác

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

tùy chọn theo sau bởi một dòng mới.

Lưu ý rằng viết hoa của tất cả các từ phù hợp với điệp khúc gốc và (mặc dù thiếu nhịp điệu), âm Gotrong Goodeđược thay thế cũng như các từ riêng lẻ Gogo.

Mã ngắn nhất tính bằng byte thắng.

Các trường hợp thử nghiệm

"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
Bỏ lỡ cơ hội đối với trường hợp kiểm tra: an, c,cath
Neil

54
Ai đó làm ơn làm một phiên bản Go.
jl6

2
Chương trình nên xử lý các chuỗi nhiều từ như thế nào?
Đồng chí SparklePony

6
Chúng ta hãy quan sát một hoặc hai phút im lặng và chúc Rest In Peace to Chuck.
Erik the Outgolfer 19/03/17

1
Các văn bản mã âm thanh tốt nhất khi được nói bởi Google Translator trong tiếng Tây Ban Nha: translate.google.com/#es/en/...
palsch

Câu trả lời:


86

Đi, 123 byte

Đi Johnny, đi !

Hãy thử trực tuyến!

import."strings"
func(s string)string{t,e:=Title(s),", "+s+"\n";return t+e+Repeat(t+" Johnny "+s+e,4)+"Johnny B. "+t+"ode"}

12
Thứ duy nhất còn thiếu là 90byte.
Uriel

14

VIM, 54 49 Tổ hợp phím (đã lưu 1 tổ hợp phím từ 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.         

Bắt đầu với từ trên một dòng trên một tệp bằng con trỏ ở ký tự đầu tiên, sau đó từ này sẽ thay thế tất cả bằng văn bản Giải thích

  1. Sao chép từ vào một thanh ghi, sau đó thay đổi chữ cái đầu tiên để viết hoa và lưu nó vào một thanh ghi.
  2. Viết dòng đầu tiên bằng cách sử dụng các thanh ghi để điền vào các thay thế và các dòng cuối cùng
  3. Viết dòng thứ hai bằng cách sử dụng các thanh ghi để điền vào các thay thế
  4. Lặp lại đường giữa 3 lần

Hãy thử trực tuyến! (Cảm ơn DJMcMayhem !)


Tôi nghĩ bạn có thể làm Ythay vì yyvà thậm chí có thểG thay vì2j
Kritixi Lithos

Và bạn có thể làm <CR>thay vì<esc>o
Kritixi Lithos

Cũng hDhoạt động thay vìdiw
Kritixi Lithos

Cảm ơn vì những lời khuyên! Tôi đã có thể làm việc trong phiên bản cuối cùng của bạn vào phiên bản hiện tại. Tôi cũng đã tiết kiệm được một vài chi tiết bằng cách viết dòng đầu tiên và dòng cuối cùng trong một lần, sau đó điền vào giữa.
Đaminh A.


11

Pure Bash, 69 76 byte

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

Hãy thử trực tuyến!


2
Trong bản dùng thử trực tuyến của bạn, nó không thực hiện viết hoa theo yêu cầu. Ví dụ: nếu bạn cho ăn trong codetất cả các trường hợp thấp hơn, bạn không nhận được viết hoa theo yêu cầu.
Tom Carpenter

2
@TomCarpenter Đã sửa! :)
R. Kap

11

05AB1E , 37 byte

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

Hãy thử trực tuyến!

Giải trình

™„, ¹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

Hàng loạt, 207 byte

@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`

Lạm dụng tuần tự hóa mảng-chuỗi để tạo dấu phẩy. Xây dựng một mảng của biểu mẫu:

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

Và nối nó với chuỗi của biểu mẫu ", 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 byte

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

Phiên bản trước:

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

Làm thế nào nó hoạt động:

  • Đây là một hàm ẩn danh lấy đầu vào làm tham số i

  • Xác định một biến ulà đầu vào icó chữ cái đầu tiên viết hoa (Lưu ý rằng điều này giả sử đầu vào là không trống, không sao)

  • Chỉ cần trực tiếp xây dựng chuỗi được trả về từ hai biến đó.

  • Lặp lại chuỗi "go, \nGo Johnny go"bốn lần thay vì lặp lại "Go Johnny go, go"tiết kiệm một byte.


Chỉnh sửa 1: Quên đánh golf ra dấu chấm phẩy, haha ​​!! Cũng bị sai số byte, ban đầu là 102, không phải 104. Cảm ơn apsillers .

Chỉnh sửa 2: Thay vì .repeat(4), bằng cách đặt chuỗi đó vào một biến xvà thực hiện x+x+x+xcho phép lưu hai byte.


Kiểm tra đoạn


Nhân tiện, tôi mới ở đây, tôi có một câu hỏi: hai dòng mới trong chương trình của tôi có được tính là byte không? Nếu không, nó thực sự là 102 byte, nhưng tôi nghĩ nó có thể được tính ... Phải không?
Pedro A

Đúng, mỗi người sử dụng một byte.
Jonathan Allan

Tôi chỉ đếm 102 byte ở đây (sử dụng mẹeff.in/byte-count ) và cũng không cần sử dụng dấu chấm phẩy cuối cùng, vì vậy nó thực sự là 101 byte.
apsillers

@apsillers Bạn nói đúng, tôi đã nhầm! Và tệ hơn nữa, haha ​​tôi đã quên đánh golf bằng dấu chấm phẩy. Cảm ơn.
Pedro A

6

V , 41 , 38 byte

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

Hãy thử trực tuyến!

Thử thách hoàn hảo cho V!

Giải trình:

ä$                              " 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
Xin giải thích?
ckjbgames

@ckjbgames Xong rồi!
DJMcMayhem


5

C, 156 151 byte

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);}

Điều này không được biên dịch trong gcc 4.4.7
Villapx 22/03/2017

@villapx Tôi không hiểu tại sao nó lại không. Nó biên dịch tốt trên MinGW và cũng hoạt động trực tuyến . Có thể một số cờ biên dịch đang vô hiệu hóa khai báo kiểu hoặc hàm ẩn?
Steadybox 22/03/2017

Nó tạo ra một số cảnh báo, nhưng khi bạn thêm một main()chức năng thực sự gọi chức năng thì nó hoạt động ...
moooeeeep

@moooeeeep Ok, đó là điều tôi đã bỏ lỡ - Tôi đã hiểu rằng thử thách này đòi hỏi phải có một chương trình hoàn chỉnh , nhưng thực sự, nó không nói rõ điều đó trong OP.
Villapx

5

Python 3, 88 byte

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

Một chuỗi định dạng đơn giản, với các đối số vị trí.


@EricDuminil Cảm ơn. Đã sửa.
wizzwizz4

1
@EricDuminil Tôi biết nó ở cuối dòng, nhưng có dòng bọc trong cửa sổ soạn thảo ...: - /
wizzwizz4 19/03/17

Tôi đang đếm 88 byte
Felipe Nardi Batista

1
@EricDuminil len("\n".__repr__()[1:-2])là 2. Tôi quên mất __repr__()khi đo chiều dài của chương trình.
wizzwizz4

1
@EricDuminil Chỉ khi bạn bọc nó bằng """dấu thay vì "dấu.
wizzwizz4



4

Python, 94 byte

lambda s:("|, #\n"+"| Johnny #, #\n"*4+"Johnny B. |ode").replace("|",s.title()).replace("#",s)

4

C #, 219 211 212 146 122 byte

Đã triển khai nhiều đề xuất từ ​​các bình luận với tối ưu hóa bổ sung Đây là 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";}

Hãy thử trực tuyến!

Giải thích:

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

Đầu ra cho testcase:

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

Chỉnh sửa: Cảm ơn weston đã đề xuất sử dụng chức năng


1
Bạn không cần phải cung cấp toàn bộ chương trình, một chức năng hoặc tốt hơn nữa, lambda, sẽ đủ.
weston

1
+1 Cảm ơn vì ^32. Nó ngắn hơn &~32tôi đang sử dụng. Ngoài ra, một cổng của câu trả lời Java 7 của tôi dường như ngắn hơn: 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 byte ) Hãy thử ở đây.
Kevin Cruijssen

1
Hy vọng bạn không phiền, nhưng tôi đã đánh cắp từ bạn một ý tưởng. : P Để không bị coi là kẻ xấu, tôi sẽ để lại một mẹo: Bạn có thể chuyển đổi phương thức của mình thành biểu thức lambda ( string x(string a)-> (a)=>, -13 byte), chỉ sau tôi 1 byte;)
auhmaan

1
@auhmaan Nếu bạn đang biên dịch thành một Func<string, string>bạn có thể a=>không cần ().
TheLethalCoder

3

MATLAB / Octave , 133 111 byte

@(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 '})

Đó là một sự khởi đầu. Hy vọng có thể được giảm hơn nữa.

Về cơ bản, đây là một hàm ẩn danh nhận đầu vào chuỗi và sau đó sử dụng regex để tạo đầu ra cần thiết.

@(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.
    )

Một ví dụ:

@(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

Bạn có thể sắp xếp dùng thử trực tuyến! . Mã không hoạt động hoàn toàn với Octave khi tất cả các chữ cái viết hoa trở thành ${upper($0)}, trong khi trong MATLAB, mã này được chuyển đổi thành chữ in hoa thực tế.

Do đầu vào được đảm bảo chỉ là a-z(bảng chữ cái viết thường), tôi có thể lưu 22 byte bằng cách sử dụng phép trừ 32 đơn giản để chuyển đổi chữ cái đầu tiên trong chuỗi thành chữ hoa, thay vì sử dụng regex với upper()hàm.

Kết quả là, mã bây giờ cũng hoạt động với Octave, vì vậy bây giờ bạn có thể Dùng thử trực tuyến!


3

Ruby, 89 88 86 79 byte

Trình golf đầu tiên của tôi:

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

Cảm ơn rất nhiều đến @manatwork vì nhận xét tuyệt vời của anh ấy: giảm 7 byte!


1
Đẹp. Dấu ngoặc quanh tham số Proc là không cần thiết; bạn có thể sử dụng các ký tự dòng mới thay vì thoát ký tự; chuỗi ký tự đơn có thể được viết bằng ?ký hiệu; dấu ngoặc đơn xung quanh các .gsubtham số cuối cùng là không cần thiết. pastebin.com/6C6np5Df
manatwork 20/03/2017

@manatwork: Wow, rất ấn tượng và tốt đẹp của bạn. Cảm ơn!
Eric Duminil

3

Nova , 105 byte

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

Bởi vì Nova ( http://nova-lang.org ) là bản beta cực kỳ sớm (và lỗi), có một số khuyết tật rõ ràng được đặt ở đây để giữ cho nó không sử dụng ít byte hơn.

Ví dụ: có thể đã lưu lệnh gọi hàm viết hoa (được gọi 3 lần) trong một biến cục bộ như thế này:

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

cái mà sẽ lấy số byte xuống còn 89 byte . Lý do điều này không hoạt động ngay bây giờ có thể được đổ lỗi cho thứ tự đánh giá đối số trong ngôn ngữ C, bởi vì Nova được biên dịch thành C. (Thứ tự đánh giá đối số sẽ được sửa trong bản cập nhật trong tương lai)

Thậm chí, tôi có thể đã giới thiệu một thuộc tính "title" trong lớp String (và tôi sẽ sau khi thực hiện lol này) để giảm số lượng từ lệnh gọi hàm viết hoa:

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

và điều đó sẽ giải phóng 7 byte thành tổng cộng 82 byte mới .

Hơn nữa (và xa hơn nữa), một khi suy luận kiểu biến lambda được thêm vào, điều này sẽ hợp lệ:

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

Số lượng có thể được giảm xuống 72 byte .

Nhân tiện, đây là môn đánh gôn đầu tiên của tôi, vì vậy tôi có lẽ đã bỏ lỡ nhiều tối ưu hóa hơn nữa có thể được thực hiện. Và đây là một ngôn ngữ không phải là trung tâm golf , mục đích chung , tôi nghĩ nó khá ấn tượng.

Mã 105 byte đầu tiên hoạt động trong bản dựng Nova Beta v0.3.8 hiện tại có sẵn trên 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"))
    }
}

đầu ra:

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

Cảm ơn bạn đã nghe quảng cáo không biết xấu hổ của tôi về ngôn ngữ mục đích chung Nova (được tìm thấy tại http://nova-lang.org ... hãy tải ngay !!)


3

Brainfuck, 352 byte

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

Hãy thử trực tuyến!

  1. Lấy đầu vào.
  2. Lưu các ký tự đặc biệt cho sau này.
  3. Viết phần đầu tiên.
  4. Lưu "Johnny" sau
  5. In "Đi Johnny đi, đi" bốn lần
  6. Viết phần cuối cùng

Tôi luôn thích những thử thách ở Brainfuck nên rất vui. Nó có thể có thể được chơi golf nhiều hơn nhưng chơi golf Brainfuck là loại dài.


3

PHP, 86 byte

echo strtr("1, 0\n2222Johnny B. 1ode",[$l=$argn,$u=ucfirst($l),"$u Johnny $l, $l\n"]);

3

Java 8, 151 147 146 130 byte

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";}

Giải trình:

Hãy thử nó ở đây.

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 byte


Chơi gôn

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

Ung dung

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}

Ungolfed có thể đọc được

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" );

Mã đầy đủ

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();
        }
    }
}

Phát hành

  • v1.2 - - 2 bytes- hoán đổi (i)=>cho i=>, nhờ TheLetalCoder nhận xét.
  • v1.1 - -29 bytes- Nhờ có bản cập nhật mới nhất của Sir Bitesalot , người đã nhớ tôi, tôi có thể chỉnh sửa chuỗi trước khi định dạng.
  • v1.0 - 159 bytes- Giải pháp ban đầu.

Ghi chú

Tiêu đề có một liên kết đến một trang với mã và các trường hợp thử nghiệm. Chỉ cần nhấn Go và kết quả sẽ được in bên dưới mã.


Không cần ()xung quanh tranh luận cho Funcchỉ cần làm i=>. Bạn có thể cũng có thể sử dụng các chuỗi nội suy từ C # 6 và mất string.Formatmặc dù tôi đã không xem mã quá nhiều để xem cách (nên tầm thường).
TheLethalCoder

Tôi có thể loại bỏ (), nhưng tôi nghi ngờ rằng tôi có thể sử dụng các chuỗi nội suy mà không tăng kích thước mã, do sự thay thế xảy ra để thu gọn sự lặp lại.
auhmaan

Như tôi đã nói tôi lười biếng và thực sự không tự mình thử bất cứ điều gì! Chỉ là một gợi ý để xem xét.
TheLethalCoder

2

Javascript - 72 106 byte

Chỉnh sửa: Rất tiếc !! Tôi đã không chú ý đến các quy tắc viết hoa! Nó sẽ dài hơn sau một thời gian

Chỉnh sửa 2: Nên tuân theo các quy tắc ngay bây giờ!

Có lẽ có thể được chơi golf nhiều hơn

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

Được dung như:

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

VBA Excel, 137 121 112 89 87 84 byte

Hàm cửa sổ tức thời VBE ẩn danh lấy đầu vào của loại Variant/Stringtừ ô [A1]và đầu ra bằng cách in cửa sổ ngay lập tức VBE

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

-16 byte để chuyển đổi sang chức năng cửa sổ ngay lập tức

-9 byte để sử dụng [PROPER(A1)]

-23 Byte để bỏ For ...vòng lặp và lạm dụng ?câu lệnh

-2 byte để thay thế " Johnny "&[A1]&", "&[A1]bằng[" Johnny "&A1&", "&A1]

-3 Byte để sử dụng +hơn &cho nối chuỗi và không để lại chuỗi đầu cuối

Ví dụ trường hợp

[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.?shiệu quả Debug.Printkhông? Làm thế nào mà làm việc?
BruceWayne

1
@BruceWayne, áo choàng đẹp. VBA hỗ trợ tự động định dạng, có nghĩa là những thứ như ?, i=1To&cđược tiêu hóa thành các thuật ngữ dài dòng hơn nhưng có thể đọc được như Print, i = 1 To& c. Cộng đồng đã quyết định rằng phiên bản nén của mã trong các ngôn ngữ có thể chấp nhận được cho các phản hồi (xem codegolf.meta.stackexchange.com/questions/10258/ trộm )
Taylor Scott

1
@BruceWayne Đối với ?, tôi tin rằng đó là phần còn lại từ phiên bản cũ của Excel (4.0 trở xuống) trong đó Macro Sheets được sử dụng thay thế VBA thông qua VBE, nơi nó được sử dụng làm từ khóa để in một chuỗi được cung cấp sau nó cho một chuỗi trước tập tin văn bản chỉ định. Bản ?thân từ khóa vẫn rất hữu ích cho việc chơi golf mã vì Printtừ khóa được sử dụng để viết các chuỗi vào tệp văn bản trong các phiên bản hiện tại của VBA. Lưu ý, tôi sẽ hết bộ nhớ với một hạt muối.
Taylor Scott

1
Tốt để biết! Tôi chỉ hỏi, không phải vì mục đích của CodeGolf, mà vì tôi không ngừng học VBA và điều này là siêu mới đối với tôi, vì vậy tôi đã tò mò. Luôn thích học các thủ thuật nhỏ gọn trong VBA. Chúc mừng!
BruceWayne

1

CJam , 50 byte

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

Hãy thử trực tuyến!

Giải trình:

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 byte

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

Hãy thử trực tuyến!

Xây dựng và in dòng đầu tiên sau đó chèn Johnny gotrước dấu phẩy và sao chép 4 lần. Cuối cùng xây dựng phần cuối cùng.


Dường như không hoạt động cho đầu vào johnny. tio.run/nexus/ Kẻ
Dennis

Tôi không biết làm thế nào tôi không phát hiện ra điều đó, đã sửa bây giờ
Blue

1

Python, 258 byte

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)

Lưu ý rằng điều này hoàn toàn ngang bằng với Java tại thời điểm này và nó rất dễ đọc;)
user7610

1
Chào mừng đến với trang web! Bạn có thể sử dụng phép nhân chuỗi để rút ngắn câu trả lời này. Ngoài ra, không cần thiết phải khai báo biến tvì nó chỉ được gọi một lần.
Phù thủy lúa mì

Cảm ơn, nhưng tôi đã nhắm chính xác tới 258 byte, ngang bằng với Java
user7610

2
Tại sao bạn cố gắng để phù hợp với điểm số khác? Đây là mã golf, không phải là một cuộc thi dễ đọc.
weston

2
@ user7610 Tôi nghĩ bạn đang thiếu điểm.
miradulo

1

Java 6, 258 242 byte

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 ");}}

Phần dài nhất của nó là định dạng cho printf. Có vấn đề với đầu vào khác với chuỗi từ ađến z(vâng tôi biết tôi không cần hỗ trợ bất cứ điều gì khác).

Ungolfed với ý kiến:

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 "
    }
}

EDIT: Chơi gôn 16 byte nhờ weston


1
Bạn có thể sử dụng lambda để tiết kiệm nhiều byte.
corvus_192

1
"Johnny"luôn luôn được theo sau bởi một không gian.
weston

b[0]^=32;cũng sẽ viết hoa mà không cần (char)diễn viên.
weston

1

Toán học, 83 byte

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

Chức năng ẩn danh. Lấy một chuỗi làm đầu vào và trả về một chuỗi là đầu ra. Có lẽ có thể được chơi golf hơn nữa.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.