코드 조니 코드, 코드!


75

락앤롤 창립자 인 척 베리 는 오늘 슬프게 돌아가 셨습니다 .

그의 유명한 노래 " 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가 주어지면, "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
프로그램은 여러 단어로 된 문자열을 어떻게 처리해야합니까?
스파클 포니 동지

6
침묵의 1-2 분을 관찰하고 척척에게 휴식을 취하십시오.
아웃 골퍼 에릭

1
구글 번역기에서 스페인어로 말할 때 코드 텍스트가 가장 잘 들립니다 : translate.google.com/#es/en/…
palsch

답변:



14

VIM, 54 49 키 입력 ( Kritixi Lithos 에서 1 키 입력 저장 )

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

순수한 배쉬, 69 76 바이트

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

온라인으로 사용해보십시오!


2
온라인 시도에서는 필수 대문자를 사용하지 않습니다. 예를 들어 code소문자 를 모두 입력하면 필요한 대문자를 얻지 못합니다.
Tom Carpenter

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

자바 스크립트, 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

자바 스크립트 (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"대신 문자열을 4 번 반복 "Go Johnny go, go"하면 1 바이트가 절약됩니다.


편집 1 : 세미콜론을 잊어 버렸습니다. 또한 바이트 수를 잘못 계산하여 원래 104가 아닌 102 였습니다 . 감사합니다 apsillers .

편집 2 : 대신에 .repeat(4), 변수에 해당 문자열을 넣어 x하고 일을 x+x+x+x할 수 2 바이트를 절약.


테스트 스 니펫


그건 그렇고, 나는 여기에 새로 왔는데 질문이 있습니다. 프로그램의 두 줄 바꿈이 바이트로 계산됩니까? 그렇지 않다면 실제로 102 바이트이지만 아마도 카운트 될 것입니다 ... 맞습니까?
Pedro A

네, 그들은 각각 바이트를 사용합니다.
Jonathan Allan

여기서는 102 바이트 만 ( mothereff.in/byte-counter 사용 ) 마지막 세미콜론을 사용할 필요가 없으므로 실제로는 101 바이트입니다.
apillers

@apsillers 당신 말이 맞아요. 그리고 더 나쁜, 하하 나는 세미콜론을 골프로 치는 것을 잊었다. 감사.
Pedro A

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 2016 년

@ckjbgames 완료!
DJMcMayhem


5

C, 156151 바이트

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 Ok, 이것이 내가 놓친 것입니다.이 도전은 완전한 프로그램 이 필요하다는 것을 이해하고 있었지만 실제로는 OP에서 분명히 말하지 않습니다.
villapx

5

파이썬 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

파이썬, 94 바이트

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

4

C #을 219 211 212 146 122 바이트

추가 최적화로 주석에서 여러 제안을 구현했습니다. 이것이 최종 결과입니다.

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

온라인으로 사용해보십시오!

외식 :

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

테스트 케이스 출력 :

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 2012 년

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 / 옥타브 , 133111 바이트

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

시작입니다. 희망적으로 더 줄일 수 있습니다.

기본적으로 문자열 입력을 취한 다음 정규식을 사용하여 필요한 출력을 생성하는 익명 함수입니다.

@(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(소문자 소문자 만)임을 보장하면 정규식을 upper()함수 와 함께 사용하지 않고 32의 간단한 빼기를 사용하여 문자열의 첫 번째 문자를 대문자로 변환하여 22 바이트를 절약 할 수 있습니다 .

결과적으로이 코드는 이제 Octave에서도 작동하므로 이제 온라인으로 사용해 볼 수 있습니다!


3

루비, 89 88 86 79 바이트

나의 첫번째 골프 제출 :

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

그의 멋진 의견에 대해 @manatwork에 감사드립니다 : 7 바이트 미만!


1
좋은. proc 매개 변수 주위의 괄호는 필요하지 않습니다. 문자 이스케이프 대신 리터럴 개행 문자를 사용할 수 있습니다. 단일 문자 문자열 리터럴은 ?표기법 으로 작성할 수 있습니다 . 마지막 .gsub매개 변수 주위의 괄호 는 필요하지 않습니다. pastebin.com/6C6np5Df
manatwork

@manatwork :와, 정말 인상적이고 친절합니다. 감사!
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 )는 매우 초기 베타 버전이며 버그가 많기 때문에 더 적은 바이트를 사용하지 못하게하는 확실한 핸디캡이 있습니다.

예를 들어 다음과 같이 지역 변수에 대문자로 된 함수 호출 (3 회 호출)을 저장할 수 있습니다.

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

이것은 바이트 카운트를 89 바이트로 줄 였습니다. 이것이 작동하지 않는 이유는 Nova가 C로 컴파일되기 때문에 C 언어의 인수 평가 순서에 대한 책임이 있습니다. 인수 평가 순서는 향후 업데이트에서 수정 될 예정입니다.

더욱이, 나는 대문자 화 함수 호출에서 카운트를 줄이기 위해 String 클래스에 "title"속성을 도입 할 수있었습니다.

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 바이트 코드는 http://nova-lang.org 에서 제공되는 현재 Nova Beta v0.3.8 빌드에서 작동합니다.

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

범용 언어 Nova ( http://nova-lang.org 에서 찾을 수 있습니다.


3

Brainfuck, 352 바이트

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

온라인으로 사용해보십시오!

  1. 입력을 받으십시오.
  2. 나중에 특수 문자를 저장하십시오.
  3. 첫 번째 부분을 작성하십시오.
  4. 나중에 "Johnny"를 저장하십시오.
  5. "Go Johnny Go Go Go"인쇄
  6. 마지막 부분 쓰기

나는 항상 Brainfuck의 도전을 좋아하므로 재미있었습니다. 아마 더 골프를 칠 수 있지만 골프 Brainfuck은 길다.



3

자바 (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");

언 골프

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

자료

  • 1.2 - - 2 bytes- 스와핑 (i)=>에 대한 i=>감사, TheLetalCoder 코멘트.
  • v1.1 -- Bitesalot 경의 마지막 업데이트 -29 bytes덕분에 포맷 전에 문자열을 편집 할 수 있다는 것을 기억했습니다.
  • V1.0 - 159 bytes- 초기 솔루션입니다.

노트

제목에는 코드 및 테스트 사례가있는 페이지에 대한 링크가 있습니다. 그냥 히트 이동 하고 그 결과 코드 아래에 인쇄됩니다.


정당한 일에 ()대한 논쟁의 여지 가 필요 없습니다 . C # 6에서 보간 된 문자열을 사용 하고 코드를 너무 많이 보지 않았지만 (사소한) 코드를 잃어 버렸을 수도 있습니다. Funci=>string.Format
TheLethalCoder

을 삭제할 수는 ()있지만 반복을 축소하는 교체로 인해 코드 크기를 늘리지 않고 보간 된 문자열을 사용할 수 있는지 의심됩니다.
auhmaan

내가 말했듯이 나는 게으르고 실제로 아무것도 시도하지 않았습니다! 살펴볼 제안이었습니다.
TheLethalCoder

2

자바 스크립트 - 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

엑셀 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)]

For ...루프 를 삭제 하고 ?명령문을 남용하는 -23 바이트

교체 -2 바이트 " Johnny "&[A1]&", "&[A1][" Johnny "&A1&", "&A1]

문자열 연결에 +over 를 사용 &하고 터미널 문자열을 닫지 않은 상태로 유지하기 위한 -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입니다 그런 것들 즉, 자동 서식을 지원 ?, i=1To&c같은 더 자세한하지만 읽을 용어로 소화 Print, i = 1 To하고 & c. 커뮤니티는 언어로 된 압축 된 코드 버전이 응답에 적합하다고 결정했습니다 ( codegolf.meta.stackexchange.com/questions/10258/… 참조 )
Taylor Scott

1
@BruceWayne ?나는 그것이 이전 버전의 Excel (4.0 이하)에서 잔존 한 것으로 생각합니다. 매크로 시트가 VBA를 통해 VBA 대신에 사용되었습니다. 표시된 텍스트 파일. ?는 AS 키워드 자체는 여전히 코드 골프에 매우 유용 Print키워드가 VBA의 현재 버전에서 텍스트 파일에 문자열을 작성하는 데 사용됩니다. 참고로, 나는 기억력이 없어서 소금 한 알로 가져 가십시오.
Taylor Scott

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

파이크 , 43 바이트

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

온라인으로 사용해보십시오!

첫 번째 줄을 구성하고 인쇄 한 다음 Johnny go쉼표 앞에 삽입 하고 4 번 복제합니다. 마지막으로 마지막 부분을 구성합니다.


input에 작동하지 않는 것 같습니다 johnny. tio.run/nexus/…
Dennis

내가 어떻게 그것을 발견하지 못했는지 전혀 모른다, 지금
Blue

1

파이썬, 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와 정확히 일치하며, 너무 읽기
쉽습니다

1
사이트에 오신 것을 환영합니다! 문자열 곱셈을 사용하여이 답변을 줄일 수 있습니다. 또한 변수 t는 한 번만 호출되므로 변수를 선언 할 필요가 없습니다 .
밀 마법사

고맙지 만 Java와 동등한 수준으로 정확히 258 바이트를 목표로하고있었습니다.
user7610

2
왜 다른 점수와 일치 시키려고합니까? 이것은 가독성 대회가 아닌 코드 골프입니다.
weston

2
@ user7610 요점을 놓친 것 같습니다.
miradulo

1

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

편집 : weston 덕분에 16 바이트 골프


1
람다를 사용하여 많은 바이트를 절약 할 수 있습니다.
corvus_192

1
"Johnny"뒤에 공백이옵니다.
weston

b[0]^=32;(char)캐스트 가 필요없는 대문자 입니다.
weston

1

수학, 83 바이트

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

익명의 기능. 문자열을 입력으로 받아서 문자열을 출력으로 반환합니다. 아마도 더 골프를 칠 수있을 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.