Kode johnny kode, johnny!

75

Ayah pendiri Rock-and-roll Chuck Berry dengan sedih meninggal hari ini.

Pertimbangkan chorus -nya yang terkenal lagu " Johnny B. Goode ":

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

(Ada beberapa cara lain yang telah diselingi tetapi yang di atas akan berfungsi untuk tujuan tantangan.)

Tantangan

Diberikan string huruf az yang kosong dan huruf kecil, menampilkan paduan suara "Johnny B. Goode" dengan semua instance Goatau godiganti dengan string input, dikapitalisasi dengan cara yang sama.

Sebuah trailing newline dapat diikuti secara opsional. Tidak ada hal lain dalam paduan suara yang harus diubah.

Misalnya , jika inputnya adalah codeoutput harus tepat

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

opsional diikuti oleh baris baru.

Perhatikan bahwa kapitalisasi semua kata cocok dengan paduan suara asli, dan (meskipun tidak memiliki ritme) Goin Goodediganti serta kata-kata individual Godan go.

Kode terpendek dalam byte menang.

Uji Kasus

"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
Hobi Calvin
sumber
46
Kehilangan kesempatan untuk uji kasus: an, c,cath
Neil
54
Seseorang tolong lakukan versi Go.
jl6
2
Bagaimana seharusnya program menangani string multi-kata?
Kamerad SparklePony
6
Mari kita amati satu atau dua menit kesunyian, dan berharap Istirahat Dalam Damai bagi Chuck.
Erik the Outgolfer
1
Teks kode terdengar paling baik ketika diucapkan oleh Google Translator dalam bahasa Spanyol: translate.google.com/#es/en/…
palsch

Jawaban:

86

Pergi, 123 byte

Go Johnny, Go !

Cobalah online!

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"}
Uriel
sumber
12
Satu-satunya hal yang hilang adalah 90byte.
Uriel
14

VIM, 54 49 penekanan tombol (menyelamatkan 1 penekanan tombol dari 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.         

Mulailah dengan kata pada baris pada file dengan kursor pada karakter pertama, maka ini akan menggantikan semuanya dengan teks Penjelasan

  1. Salin kata ke dalam register, lalu ubah huruf pertama menjadi huruf besar dan simpan ke register.
  2. Tulis baris pertama menggunakan register untuk mengisi penggantian dan baris terakhir
  3. Tulis baris kedua menggunakan register untuk mengisi penggantian
  4. Ulangi garis tengah 3 kali

Cobalah online! (Terima kasih DJMcMayhem !)

Dominic A.
sumber
Saya pikir Anda bisa melakukan Ybukannya yydan mungkin bahkan Gbukan2j
Kritixi Lithos
Dan Anda dapat melakukannya <CR>sebagai gantinya<esc>o
Kritixi Lithos
Juga hDberfungsi sebagai penggantidiw
Kritixi Lithos
Terima kasih atas tipsnya! Saya dapat mengerjakan yang terakhir dalam versi saat ini. Saya juga menyimpan beberapa lagi dengan menulis baris pertama dan terakhir sekaligus, kemudian mengisi di tengah.
Dominic A.
Cobalah online!
DJMcMayhem
11

Pure Bash, 69 76 byte

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

Cobalah online!

R. Kap
sumber
2
Di try-it-online Anda, itu tidak melakukan kapitalisasi yang diperlukan. Misalnya jika Anda memberi makan dalam codesemua huruf kecil, Anda tidak mendapatkan kapitalisasi yang diperlukan.
Tom Carpenter
2
@TomCarpenter Diperbaiki! :)
R. Kap
11

05AB1E , 37 byte

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

Cobalah online!

Penjelasan

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

Batch, 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
Neil
sumber
6

JavaScript, 98

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

Menyalahgunakan serialisasi array-ke-string untuk membuat koma. Membuat array formulir:

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

Dan menggabungkannya ke string bentuk ", 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"
apsillers
sumber
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`

Versi sebelumnya:

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

Bagaimana itu bekerja:

  • Ini adalah fungsi anonim yang mengambil input sebagai parameter i

  • Menentukan variabel usebagai input idengan huruf pertama dikapitalisasi (Perhatikan bahwa ini mengasumsikan input tidak kosong, yang OK)

  • Langsung saja buat string yang akan dikembalikan dari kedua variabel tersebut.

  • Mengulang string "go, \nGo Johnny go"empat kali alih-alih "Go Johnny go, go"menghemat menghemat satu byte.


Sunting 1: Lupa bermain golf titik koma, haha ​​!! Juga salah menghitung byte, itu aslinya 102, bukan 104. Terima kasih apsillers .

Sunting 2: Alih-alih .repeat(4), dengan menempatkan string itu dalam variabel xdan melakukan x+x+x+xmemungkinkan menyimpan dua byte.


Cuplikan tes

Pedro A
sumber
Omong-omong, saya baru di sini, saya punya pertanyaan: apakah dua baris baru dalam program saya dihitung sebagai byte? Jika tidak, sebenarnya 102 byte, tapi saya pikir itu mungkin diperhitungkan ... Benar?
Pedro A
Yap, mereka masing-masing menggunakan byte.
Jonathan Allan
Saya hanya menghitung 102 byte di sini (menggunakan mothereff.in/byte-counter ), dan juga tidak perlu menggunakan titik koma akhir, jadi benar-benar 101 byte.
apsillers
@apsillers Anda benar, saya salah menghitung! Dan lebih buruk lagi, haha ​​saya lupa bermain golf titik koma. Terima kasih.
Pedro A
6

V , 41 , 38 byte

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

Cobalah online!

Tantangan sempurna untuk V!

Penjelasan:

ä$                              " 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
DJMcMayhem
sumber
5
Penjelasannya tolong?
ckjbgames
@ckjbgames Selesai!
DJMcMayhem
5

Pyth - 52 byte

j", "_ArBQ3V4s[H" Johnny "G", "G;%"Johnny B. %sode"H

Test Suite .

Maltysen
sumber
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);}
Steadybox
sumber
Ini tidak dikompilasi dalam gcc 4.4.7
villapx
@Villapx Saya tidak melihat mengapa tidak. Ini mengkompilasi dengan baik di MinGW dan bekerja online juga . Mungkin beberapa flag compiler menonaktifkan deklarasi tipe atau fungsi implisit?
Steadybox
Ini menghasilkan beberapa peringatan, tetapi ketika Anda menambahkan main()yang benar-benar memanggil fungsi itu berfungsi ...
moooeeeep
@ooooeeeee Ok, itulah yang saya lewatkan - saya berada di bawah pemahaman bahwa tantangan ini membutuhkan program yang lengkap , tetapi memang, itu tidak secara eksplisit mengatakan bahwa di 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)

String format sederhana, dengan argumen posisi.

wizzwizz4
sumber
@EricDuminil Terima kasih. Tetap.
wizzwizz4
1
@EricDuminil Saya tahu itu di akhir baris, tapi ada bungkus baris di jendela editor ...: - /
wizzwizz4
Saya menghitung 88 byte
Felipe Nardi Batista
1
@EricDuminil len("\n".__repr__()[1:-2])adalah 2. Saya lupa __repr__()ketika mengukur panjang program.
wizzwizz4
1
@EricDuminil Hanya jika Anda membungkusnya dengan """tanda, bukan "tanda.
wizzwizz4
4

Retina , 65 byte

Hitungan byte mengasumsikan penyandian ISO 8859-1.

^
$', 
:T01`l`L
:`,
 Johnny$',
:`$
¶$`
(\S+) (\S+ ).+$
$2B. $1ode

Cobalah online!

Martin Ender
sumber
4

Python, 94 byte

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

C #, 219 211 212 146 122 Bytes

Menerapkan banyak saran dari komentar dengan optimasi tambahan Ini adalah 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";}

Cobalah online!

Penjelasan:

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

Output untuk 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

Sunting: Terima kasih kepada weston karena menyarankan menggunakan suatu fungsi

Tuan Bitesalot
sumber
1
Anda tidak perlu menyediakan seluruh program, fungsi atau lebih baik, lambda, sudah cukup.
barat
1
+1 Terima kasih atas ^32. Itu lebih pendek dari yang &~32saya gunakan. Juga, port jawaban Java 7 saya tampaknya lebih pendek: 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 ) Cobalah di sini.
Kevin Cruijssen
1
Semoga Anda tidak keberatan, tapi saya sudah mencuri ide dari Anda. : P Karena tidak dikenal sebagai orang jahat, saya akan meninggalkan tip di sini: Anda dapat mengubah metode Anda menjadi ekspresi lambda ( string x(string a)-> (a)=>, -13 byte), hanya 1 byte di belakang saya;)
auhmaan
1
@auhmaan Jika Anda mengkompilasi ke sebuah, Func<string, string>Anda hanya bisa melakukan a=>tidak perlu untuk itu ().
TheLethalCoder
3

MATLAB / Oktaf , 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 '})

Ini awal. Semoga bisa dikurangi lebih jauh.

Pada dasarnya ini adalah fungsi anonim yang mengambil input string dan kemudian menggunakan regex untuk membuat output yang diperlukan.

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

Sebuah contoh:

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

Anda dapat mengurutkannya Coba online! . Kode tidak bekerja dengan oktaf karena semua huruf besar menjadi ${upper($0)}, sedangkan di MATLAB ini dikonversi ke huruf besar yang sebenarnya.

Mengingat input dijamin hanya menjadi a-z(huruf kecil), saya dapat menyimpan 22 byte dengan menggunakan pengurangan sederhana dari 32 untuk mengubah huruf pertama dalam string menjadi modal, daripada menggunakan regex dengan upper()fungsi.

Hasilnya, kode itu sekarang berfungsi dengan oktaf juga, jadi Anda sekarang dapat mencobanya secara online!

Tom Carpenter
sumber
3

Ruby, 89 88 86 79 byte

Pengajuan golf pertama saya:

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

Terima kasih banyak kepada @manatwork atas komentarnya yang luar biasa: 7 byte lebih sedikit!

Eric Duminil
sumber
1
Bagus. Tanda kurung di sekitar parameter proc tidak diperlukan; Anda dapat menggunakan karakter baris baru literal alih-alih pelarian karakter; literal string huruf tunggal dapat ditulis dengan ?notasi; tanda kurung di sekitar .gsubparameter terakhir tidak diperlukan. pastebin.com/6C6np5Df
manatwork
@Manatwork: Wow, sangat mengesankan dan baik hati Anda. Terima kasih!
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"

Karena Nova ( http://nova-lang.org ) adalah beta yang sangat awal (dan buggy), ada beberapa cacat jelas yang ada di sini menjaga dari menggunakan byte lebih sedikit.

Misalnya, bisa menyimpan panggilan fungsi dengan huruf besar (yang disebut 3 kali) dalam variabel lokal seperti ini:

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

yang akan mengambil hitungan byte ke 89 byte . Alasan ini tidak bekerja sekarang dapat disalahkan pada urutan evaluasi argumen dalam bahasa C, karena Nova dikompilasi ke C. (Urutan evaluasi argumen akan diperbaiki dalam pembaruan di masa mendatang)

Terlebih lagi, saya bisa memperkenalkan properti "title" di kelas String (dan saya akan setelah melakukan lol ini) untuk mengurangi jumlah dari panggilan fungsi kapitalisasi:

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

dan itu akan membebaskan 7 byte ke total baru 82 byte .

Selanjutnya (dan selanjutnya), setelah inferensi tipe variabel lambda ditambahkan, ini akan valid:

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

Hitungannya bisa diturunkan menjadi 72 byte .

Ngomong-ngomong, ini adalah kode golf pertama saya, jadi saya mungkin telah melewatkan lebih banyak optimasi yang bisa dibuat. Dan ini menjadi non-golf centric , bahasa tujuan umum , saya pikir itu cukup mengesankan.

Kode 105 byte pertama berfungsi di versi Nova Beta v0.3.8 saat ini yang tersedia di 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"))
    }
}

output:

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

Terima kasih telah mendengarkan iklan saya yang tidak tahu malu untuk bahasa tujuan umum Nova (ditemukan di http://nova-lang.org ... dapatkan sekarang !!)

Braden Steffaniak
sumber
3

Brainfuck, 352 byte

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

Cobalah online!

  1. Dapatkan input.
  2. Simpan karakter khusus untuk nanti.
  3. Tulis bagian pertama.
  4. Simpan "Johnny" untuk nanti
  5. Cetak "Go Johnny go, go" empat kali
  6. Tulis bagian terakhir

Saya selalu suka tantangan di Brainfuck jadi itu menyenangkan. Mungkin bisa bermain golf lebih banyak tetapi bermain golf Brainfuck agak panjang.

AboveFire
sumber
3

PHP, 86 Bytes

echo strtr("1, 0\n2222Johnny B. 1ode",[$l=$argn,$u=ucfirst($l),"$u Johnny $l, $l\n"]);
Jörg Hülsermann
sumber
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";}

Penjelasan:

Coba di sini.

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
Kevin Cruijssen
sumber
2

Ditumpuk , 64 byte

:@n tc@N('%N, %n
'!'%N Johnny %n, %n
'!4*'Johnny B. 'N'ode'!)sum

Cobalah online!

Conor O'Brien
sumber
2

C # , 159 130 128 byte


Golf

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

Tidak disatukan

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}

Tidak terbaca dibaca

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

Kode lengkap

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

Rilis

  • v1.2 - - 2 bytes- Bertukar (i)=>untuk i=>, berkat komentar TheLetalCoder .
  • v1.1 - -29 bytes- Terima kasih kepada Sir Bitesalot pembaruan terakhir, yang ingat saya, saya bisa mengedit string sebelum format.
  • v1.0 - 159 bytes- Solusi awal.

Catatan

Judul memiliki tautan ke halaman dengan kode dan kasus uji. Tekan saja Go dan hasilnya akan dicetak di bawah kode.

auhmaan
sumber
Tidak perlu untuk ()argumen di sekitar untuk Funchanya melakukan i=>. Anda mungkin juga dapat menggunakan string interpolasi dari C # 6 dan kehilangan string.Formatmeskipun saya belum melihat kode terlalu banyak untuk melihat caranya (harus sepele).
TheLethalCoder
Saya dapat menghapusnya (), tetapi saya ragu bahwa saya dapat menggunakan string yang diinterpolasi tanpa meningkatkan ukuran kode, karena penggantian yang menyebabkan runtuhnya pengulangan.
auhmaan
Seperti yang saya katakan saya sedang malas dan tidak benar-benar mencoba sesuatu sendiri! Itu hanya saran untuk melihat ke dalam.
TheLethalCoder
2

Javascript - 72 106 byte

Edit: Ups !! Saya tidak memperhatikan aturan kapitalisasi! Akan lebih lama setelah beberapa saat

Sunting 2: Harus mengikuti aturan sekarang!

Mungkin bisa bermain golf lebih banyak

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

Digunakan sebagai:

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"));
Blue Okiris
sumber
2

Excel VBA, 137 121 112 89 87 84 Bytes

Fungsi jendela langsung VBE anonim yang mengambil input tipe Variant/Stringdari sel [A1]dan keluaran dengan mencetak jendela langsung VBE

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

-16 Bytes untuk mengonversi ke fungsi jendela Segera

-9 Bytes untuk digunakan [PROPER(A1)]

-23 Bytes untuk menjatuhkan For ...loop dan menyalahgunakan ?pernyataan

-2 Bytes untuk diganti " Johnny "&[A1]&", "&[A1]dengan[" Johnny "&A1&", "&A1]

-3 Bytes untuk menggunakan +lebih dari &untuk rangkaian String dan meninggalkan string terminal tidak tertutup

Contoh Kasus

[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
Taylor Scott
sumber
1
Apakah Debug.?sefektif Debug.Print? Bagaimana cara kerjanya?
BruceWayne
1
@ Bruceruayne, jubah yang bagus. VBA mendukung autoformatting, yang berarti bahwa hal-hal seperti ?, i=1Todan &cdicerna ke dalam istilah yang lebih verbose tetapi dapat dibaca seperti Print, i = 1 Todan & c. Komunitas telah memutuskan bahwa versi kode terkompresi dalam bahasa dapat diterima untuk tanggapan (lihat codegolf.meta.stackexchange.com/questions/10258/… )
Taylor Scott
1
@ Bruceruayne Adapun ?, saya percaya itu adalah sisa dari versi lama Excel (4.0 dan di bawah) di mana Macro Sheets digunakan di tempat VBA melalui VBE di mana ia digunakan sebagai kata kunci untuk mencetak string yang disediakan setelah itu ke pra- file teks yang ditunjukkan. Kata ?kunci itu sendiri masih sangat berguna untuk kode golf karena Printkata kunci tersebut digunakan untuk menulis string ke file teks dalam versi VBA saat ini. Catatan, saya kehabisan memori dengan satu jadi ambil dengan sebutir garam.
Taylor Scott
1
Senang mendengarnya! Saya hanya bertanya, bukan untuk tujuan CodeGolf, tetapi karena saya terus-menerus belajar VBA dan ini super baru bagi saya, jadi saya ingin tahu. Selalu suka mempelajari trik kecil yang rapi di VBA. Tepuk tangan!
BruceWayne
1

CJam , 50 byte

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

Cobalah online!

Penjelasan:

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".
Erik the Outgolfer
sumber
1

Pyke , 43 byte

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

Cobalah online!

Buat dan cetak baris pertama kemudian sisipkan Johnny gosebelum koma dan duplikat itu 4 kali. Akhirnya membangun bagian terakhir.

Biru
sumber
Sepertinya tidak berfungsi untuk input johnny. tio.run/nexus/…
Dennis
Saya tidak tahu bagaimana saya tidak melihatnya, diperbaiki sekarang
Biru
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)
pengguna7610
sumber
Perhatikan ini persis sama dengan Java saat ini, dan ini sangat mudah dibaca;)
user7610
1
Selamat datang di situs ini! Anda bisa menggunakan perkalian string untuk mempersingkat jawaban ini. Selain itu tidak perlu mendeklarasikan variabel tkarena hanya dipanggil sekali.
Wheat Wizard
Terima kasih, tapi saya bertujuan tepat 258 byte, untuk menjadi setara dengan Java
user7610
2
Mengapa Anda mencoba mencocokkan skor lain? Ini golf kode, bukan kontes keterbacaan.
barat
2
@ user7610 Saya pikir Anda tidak mengerti intinya.
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 ");}}

Bagian terpanjang darinya adalah format untuk printf. Ada masalah dengan input berbeda dari string dari ake z(ya saya tahu saya tidak perlu mendukung hal lain).

Tidak dikoleksi dengan komentar:

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: Golf 16 byte berkat Weston

Kue kering
sumber
1
Anda dapat menggunakan lambda untuk menyimpan banyak byte.
corvus_192
1
"Johnny"selalu diikuti oleh spasi.
weston
b[0]^=32;juga akan huruf besar tanpa perlu (char)pemain.
barat
1

Mathematica, 83 byte

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

Fungsi anonim. Mengambil string sebagai input dan mengembalikan string sebagai output. Mungkin bisa bermain golf lebih lanjut.

LegionMammal978
sumber