Kod Johnny Kodu, Kod!


75

Rock and roll kurucu babası Chuck Berry bugün ne yazık ki öldü.

Düşünün koro onun içinde ünlü şarkısı " Goode ":

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

( Noktalama işaretinin başka yolları da vardır, ancak yukarıdakiler meydan okuma amaçları için hizmet edecektir.)

Meydan okuma

Az harfli, küçük harfli bir harf dizgisi verildiğinde , aynı şekilde büyük harfle yazılmış Goveya gogiriş dizgisi ile değiştirilen "Johnny B. Goode" nin korosunu çıkar .

İzleyen bir yeni satır isteğe bağlı olarak takip edilebilir. Korodaki başka hiçbir şey değişmemeli.

Örneğin , giriş, codeçıkışın tam olması gerekir.

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

isteğe bağlı olarak bir yeni satır izler.

Tüm kelimelerin harf orijinal koro ile eşleşir ve (ritm olmamasına rağmen) unutmayın Gode Goodetek tek kelimelerin yanı sıra değiştirilir Gove go.

Bayt cinsinden en kısa kod kazanır.

Test Kılıfları

"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
: Test durumları için kaçırılan fırsatlar an, c,cath
Neil

54
Biri lütfen Go versiyonunu yapsın.
jl6

2
Program çoklu kelime dizgilerini nasıl işlemelidir?
Yoldaş SparklePony

6
Sadece bir iki dakika sessizlik gözlemleyelim ve Huzur içinde yatsın.
Outgolfer Erik

1
Kod metni, İspanyolca’daki Google Tercüman tarafından konuşulduğunda en iyi ses çıkarır: translate.google.com/#es/en/…
palsch 22:17

Yanıtlar:


86

Git, 123 bayt

Git Johnny, git !

Çevrimiçi deneyin!

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
Eksik olan tek şey 90bayt.
Uriel

14

VIM, 54 49 Tuş vuruşları ( Kritixi Lithos'dan 1 tuş vuruşuyla kaydedildi )

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.         

İmleci ilk karakterde bulunan bir dosyadaki satırdaki sözcüğü kullanarak başlayın

  1. Sözcüğü bir kayıt defterine kopyalayın, sonra büyük harfle yazılacak ilk harfi değiştirin ve onu bir kayıt defterine kaydedin.
  2. İlk satırları değiştirmeleri ve son satırları doldurmak için kayıtları kullanarak yazın.
  3. İkinci satırı, değiştirmeleri doldurmak için kayıtları kullanarak yazın.
  4. Orta çizgiyi 3 kez tekrarlayın

Çevrimiçi deneyin! (Teşekkürler DJMcMayhem !)


Ne yapabilirim düşünüyorum Yyerine yyve belki hatta Gyerine2j
Kritixi Lithos

Ve <CR>onun yerine yapabilirsin<esc>o
Kritixi Lithos

Ayrıca hDyerine işleridiw
Kritixi Lithos

İpuçları için teşekkürler! Şu anki sürümünüzde son sürümünüzde çalışabildim. Ayrıca ilk seferde ilk ve son satırı tek seferde yazıp ardından ortasını doldurarak birkaç tane daha biriktirdim.
Dominic A.


11

Saf Bash, 69 76 bayt

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

Çevrimiçi deneyin!


2
Çevrimiçi olarak denemenizde, gereken büyük harfleri yapmaz. Örneğin, codetüm küçük harflerle beslenirseniz , gereken büyük / küçük harfleri alamazsınız.
Tom Carpenter

2
@ TomCarpenter Sabit! :)
R. Kap

11

05AB1E , 37 bayt

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

Çevrimiçi deneyin!

açıklama

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

Toplu iş, 207 bayt

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

Dizeden dize seri hale getirmeyi kötüye kullanmak, virgül oluşturur. Formun bir dizisini oluşturur:

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

Ve onu formun dizgisine birleştirir ", 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 bayt

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

Önceki versiyon:

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

Nasıl çalışır:

  • Girdiyi parametre olarak alan adsız bir işlevdir i

  • Bir değişkeni , ilk harfi büyük harfle ugiriş olarak tanımlar i(girişin boş olmadığını, bunun tamam olduğunu kabul edin)

  • Sadece bu iki değişkenden döndürülecek dizgiyi doğrudan yapılandırın.

  • Dize "go, \nGo Johnny go"tekrarlamak yerine dört kez tekrarlamak "Go Johnny go, go"bir bayttan tasarruf sağlar.


Düzenleme 1: noktalı virgül dışarı golf unutma, haha ​​!! Ayrıca baytları yanlış saydı , orijinal değil 102 idi, 104 değil . Teşekkürler .

Düzen 2: Bunun yerine, .repeat(4)bu dizeyi bir değişkene koyarak xve yaparak x+x+x+xiki bayttan tasarruf sağlar.


Test snippet'i


Bu arada, burada yeniyim, bir sorum var: programımdaki iki yeni satır bayt olarak sayılıyor mu? Değilse, aslında 102 bayttır, ama sanırım sayılır ... Doğru?
Pedro A

Evet, her biri bir bayt kullanır.
Jonathan Allan

Burada sadece 102 bayt sayıyorum ( mothereff.in/byte-counter kullanarak ) ve ayrıca son bir noktalı virgül kullanmaya gerek yok, bu yüzden gerçekten 101 bayt.
apsiller

@ apsillers Haklısın, yanlış saydım! Ve daha da kötüsü, haha ​​noktalı virgülle golf oynamayı unuttum. Teşekkürler.
Pedro,

6

V , 41 , 38 bayt

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

Çevrimiçi deneyin!

V için mükemmel bir meydan okuma!

Açıklama:

ä$                              " 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
Açıklama lütfen?
ckjbgames

@ckjbgames Tamamlandı!
DJMcMayhem


5

C, 156 151 bayt

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


@villapx Neden olmasın anlamıyorum. MinGW'de para cezası derler ve çevrimiçi olarak da çalışır . Belki bazı derleyici bayrağı kapalı tip veya işlev bildirimini devre dışı bırakıyordur?
Steadybox

Bazı uyarılar main()
doğurur

@ moooeeeep Tamam, eksik olan buydu - bu zorluğun eksiksiz bir program gerektirdiği anlayışı içindeydim , ama aslında OP'de açıkça söylenmiyor.
villapx

5

Python 3, 88 bayt

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

Konumsal argümanlarla basit bir format dizesi.


@EricDuminil Teşekkürler. Sabit.
wizzwizz4 19.03.2017

1
@EricDuminil Satırın sonunda olduğunu biliyordum, ancak editör penceresinde satır kaydırma yapıldı ...: - /
wizzwizz4

88 bayt sayıyorum
Felipe Nardi Batista

1
@EricDuminil len("\n".__repr__()[1:-2])2 __repr__(), programın uzunluğunu ölçerken unuttum .
wizzwizz4

1
@EricDuminil Yalnızca """işaretler yerine işaretlerle sarmanız durumunda ".
wizzwizz4



4

Python, 94 bayt

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

4

C #, 219 211 212 146 122 Bayt

Ek optimizasyonla yorumlardan yapılan birden çok öneri eklendi Bu Sonuç:

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

Çevrimiçi deneyin!

eksplantasyonu:

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

Test senaryoları için çıktı:

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

Düzenleme: Bir işlevi kullanmayı önerdiği için weston'a teşekkürler


1
Tam bir program sağlamanıza gerek yok, bir işlev veya daha iyisi, lambda yeterli olacaktır.
weston

1
+1 için teşekkürler ^32. Kullandığımdan daha kısa &~32. Ayrıca, Java 7 cevabımın bir bağlantı noktası daha kısa görünüyor: 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 bayt ) Burada deneyin.
Kevin Cruijssen, 21.07

1
Umarım sakıncası yoktur, ama sizden bir fikir çaldım. : P Kötü biri olarak bilinmediği için, burada bir ipucu bırakacağım: string x(string a)(a)=>
Metodunuzu

1
@auhmaan Eğer bir derleme Func<string, string>yapıyorsanız, sadece gerek a=>yok ().
TheLethalCoder

3

MATLAB / Octave , 133 111 bayt

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

Bu bir başlangıç. Umarım daha da azaltılabilir.

Temel olarak, bir dize girdisi alan ve ardından istenen çıktıyı oluşturmak için regex kullanan anonim bir işlevdir.

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

Bir örnek:

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

Sen edebilirsiniz çeşit çevrimiçi deneyin! . Kod, tüm büyük harfler oluştukça Octave ile çalışmaz ${upper($0)}, oysa MATLAB'de bu büyük harflere dönüştürülür.

Girdi yalnızca a-z(küçük harfli alfabe) olduğu garanti edildiğinde , upper()işlevdeki regex kullanmak yerine dizedeki ilk harfi büyük harfe dönüştürmek için 32 basit bir çıkarma işlemi kullanarak 22 bayt tasarruf edebilirim .

Sonuç olarak, kod artık Octave ile de çalışmaktadır, böylece çevrimiçi olarak deneyebilirsiniz!


3

Ruby, 89 88 86 79 bayt

İlk golf gönderim:

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

@ Manatwork'e yaptığı müthiş yorum için çok teşekkürler: 7 bayt daha az!


1
Güzel. Proc parametresi etrafındaki parantez gerekli değildir; karakter kaçış yerine değişmez yeni satır karakterlerini kullanabilirsiniz; tek harfli dize değişmezleri ?notasyon ile yazılabilir; Son .gsubparametrelerin etrafındaki parantez gerekli değildir. pastebin.com/6C6np5Df
manatwork

@ manatwork: Vay, çok etkileyici ve nazik sizden. Teşekkürler!
Eric Duminil

3

Nova , 105 bayt

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

Çünkü Nova ( http://nova-lang.org ) oldukça erken beta (ve buggy) olduğu için, burada daha az bayt kullanmasını engelleyen bazı belirgin engeller var.

Örneğin, büyük harfli işlev çağrısını (3 kez denir) aşağıdaki gibi yerel bir değişkende saklamış olabilirsiniz:

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

Bu, baytı 89 bayta kadar sayardı. . Bunun işe yaramamasının nedeni, C dilinde bağımsız değerlendirme sırasına göre suçlanabilir, çünkü Nova C'ye derlenir (Bağımsız değişken sıralaması gelecekteki bir güncellemede belirlenecektir)

Dahası, büyük harf işlev çağrısından sayımı azaltmak için String sınıfına bir "title" özelliği ekleyebilirdim (ve bu lol'i yaptıktan sonra yapacağım):

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

ve bu 7 baytı yeni toplam 82 bayta boşaltacaktır .

Ayrıca (ve dahası kapalı), lambda değişken tipi çıkarımı eklendiğinde, bu geçerli olur:

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

Sayı, 72 bayta getirilebilir .

Bu arada, bu benim ilk kod golf, bu yüzden muhtemelen yapılmış olabilecek daha fazla optimizasyonu kaçırdım. Ve bu golf merkezli olmayan , genel amaçlı bir dil olarak, oldukça etkileyici olduğunu düşünüyorum.

İlk 105 bayt kodu, http://nova-lang.org adresinde mevcut olan Nova Beta v0.3.8 sürümünde çalışır.

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

çıktılar:

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

Utanmaz reklamımı Nova genel amaçlı dili için dinlediğiniz için teşekkür ederim ( http://nova-lang.org adresinde ... şimdi alın !!)


3

Brainfuck, 352 bayt

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

Çevrimiçi deneyin!

  1. Girişi alın.
  2. Daha sonra kullanmak için özel karakterler kaydedin.
  3. İlk kısmı yaz.
  4. "Johnny" yi sonraya sakla
  5. "Johnny git, git" dört kez yazdır
  6. Son kısmı yaz

Her zaman Brainfuck'taki zorlukları severim, bu yüzden eğlenceliydi. Muhtemelen daha çok golf oynayabilir, ancak golf oynamak Brainfuck biraz uzun.


3

PHP, 86 Bayt

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

3

Java 8, 151 147 146 130 bayt

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

Açıklama:

Burada dene.

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 bayt


golfed

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}

Ungolfed okunabilir

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

Tam kod

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

Salıverme

  • v1.2 - - 2 bytes- Takaslanan (i)=>için i=>sayesinde, TheLetalCoder comment.
  • v1.1 - -29 bytes- Son güncellemediğim Sir Bitesalot sayesinde , beni hatırlayan formattan önce dizgiyi düzenleyebiliyorum.
  • v1.0 - 159 bytes- İlk çözüm.

notlar

Başlığın, kodu ve test durumlarını içeren bir sayfaya bağlantısı vardır. Sadece Go'ya basarsanız sonuç kodun altına basılır.


Sadece yapmak ()için argümanı etrafında gerek Funcyok i=>. Muhtemelen C # 6'dan gelen enterpolasyonlu dizeleri de kullanabilir ve string.Formatne kadar (önemsiz olması gerektiğini) görmek için çok fazla koda bakmadığım halde kaybedebilirsiniz .
TheLethalCoder,

Bırakabilirim (), ancak tekrarı daraltmak için yapılan değişiklik nedeniyle kodun boyutunu artırmadan enterpolasyonlu dizeleri kullanabileceğimden şüpheliyim.
Auhmaan

Dediğim gibi tembelleşiyordum ve aslında kendim hiçbir şey denemedim! Sadece bakmak için bir öneriydi.
TheLethalCoder

2

Javascript - 72 106 bayt

Düzenleme: Hata! Büyük harf kullanım kurallarına dikkat etmedim! Bir süre sonra daha uzun olacak

Düzenleme 2: Şimdi kurallara uymalı!

Muhtemelen daha çok golf oynayabilir

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

Olarak kullanılır:

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 Bayt

VBE anında penceresini yazdırarak Variant/Stringhücreden tür girişi alan [A1]ve çıktı alan anonim VBE acil pencere işlevi

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

Acil pencere işlevine dönüştürmek için -16 bayt

-9 Kullanmak için bayt [PROPER(A1)]

For ...Döngüyü düşürmek ve ?ifadeyi kötüye kullanmak için -23 Bayt

Değiştirilmesi için -2 bayt " Johnny "&[A1]&", "&[A1]ile[" Johnny "&A1&", "&A1]

-3 String bitiştirme için +bitti kullanmak &ve terminal dizgisini kapatılmadan bırakmak için bayt

Örnek Olay

[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.?setkili bir Debug.Print? Bu nasıl çalışıyor?
BruceWayne

1
@ BruceWayne, güzel pelerin. VBA olduğu gibi şeyler anlamına gelen autoformatting destekler ?, i=1Tove &cbenzeri daha ayrıntılı ama okunabilir terimlerle sindirilir Print, i = 1 Tove & c. Topluluk, dillerdeki kodun sıkıştırılmış versiyonunun cevaplar için kabul edilebilir olduğuna karar vermiştir (bkz. Codegolf.meta.stackexchange.com/questions/10258/… )
Taylor Scott

1
@BruceWayne Olduğu gibi ?, Makro Sayfalarının VBA ile VBE üzerinden yerinde kullanılması ve daha sonra bir dize yazdırmak için anahtar sözcük olarak kullanıldığı eski Excel sürümünden kalmadığını düşünüyorum. Belirtilen metin dosyası ?Olarak kelimenin kendisi hala kod golf için çok yararlıdır Printanahtar kelime VBA güncel sürümlerinde bir metin dosyasına dizeleri yazmak için kullanılır. Unutmayın, bir tanesiyle hafızadan gidiyorum, o yüzden bir tane tuzla alın.
Taylor Scott

1
Bilmek güzel! Sadece CodeGolf amaçları için değil sordum, fakat sürekli VBA öğrendiğim için bu benim için çok yeni bir şeydi ve merak ettim. Her zaman VBA'da düzgün küçük numaralar öğrenmek ister. Şerefe!
BruceWayne

1

CJam , 50 bayt

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

Çevrimiçi deneyin!

Açıklama:

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 bayt

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

Çevrimiçi deneyin!

İlk satırı oluşturur ve yazdırır, sonra Johnny govirgülün önüne ekler ve bunu 4 kez çoğaltır. Sonunda son kısmı kurar.


Giriş için işe görünmüyor johnny. tio.run/nexus/…
Dennis

Bunu nasıl anlayamadım hiçbir fikrim yok, şimdi düzeltildi
Blue

1

Python, 258 bayt

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)

Bunun şu anda Java ile tam olarak aynı olduğuna dikkat edin ve çok okunabilir durumda;)
user7610

1
Siteye Hoşgeldiniz! Bu cevabı kısaltmak için string çarpımını kullanabilirsiniz. Ek olarak, değişkeni bildirmek gerekli değildir, tçünkü sadece bir kez çağrılır.
Buğday Sihirbazı

Teşekkürler, ama tam 258
byte'ı hedefliyordum

2
Neden başka bir skorla eşleştirmeye çalışıyorsun? Bu kod golf, okunabilirlik yarışması değil.
weston

2
@ user7610 Bence noktayı kaçırıyorsunuz.
miradulo

1

Java 6, 258 242 bayt

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

Bunun en uzun kısmı printf formatıdır. Dizeden adiğerine farklı girdilerle ilgili sorunlar var z(evet başka bir şeyi desteklememe gerek olmadığını biliyorum).

Yorumsuz Ungolfed:

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 oynadı 16 bayt weston sayesinde


1
Bir sürü lambayı kurtarmak için bir lambda kullanabilirsiniz.
corvus_192

1
"Johnny"her zaman bir boşluk izler.
weston

b[0]^=32;aynı zamanda (char)oyuncular için gerek kalmadan büyük harf olacaktır .
weston

1

Mathematica, 83 bayt

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

Anonim işlev Bir dizeyi girdi olarak alır ve dizeyi çıktı olarak döndürür. Muhtemelen daha da golf oynayabilirdi.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.