代码Johnny代码,代码!


75

摇滚乐队的创始者查克·贝瑞(Chuck Berry)今天不幸去世。

考虑一下他的著名歌曲“ Johnny B. Goode ” 的合唱

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

(已采用其他 方法将其标点,但以上内容将用于挑战。)

挑战

给定一个非空的小写字母az字符串,输出“ Johnny B. Goode”的合唱以及输入字符串的所有实例Gogo替换为输入字符串的所有实例,并以相同的方式大写。

尾随换行符可以可选地跟随。合唱团中的其他所有内容都不应改变。

例如,如果输入是code输出,则必须精确

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

(可选)后跟换行符。

请注意,所有单词的大写字母都与原始合唱匹配,并且(尽管没有节奏)Goin Goode以及单个单词Goand 都被替换go

以字节为单位的最短代码获胜。

测试用例

"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
:测试用例错失机会anccath
尼尔

54
有人请执行Go版本。
jl6

2
程序应如何处理多字字符串?
“ SparklePony同志” 17年

6
让我们静静观察一两分钟,并祝Chuck安息。
暴民埃里克(Erik the Outgolfer)

1
当谷歌翻译的西班牙语讲的代码文本的声音最好的:translate.google.com/#es/en/...
palsch

Answers:


86

Go,123个字节

约翰尼,

在线尝试!

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
唯一缺少的是90字节。
Uriel's

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

Pure Bash,69 76字节

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

在线尝试!


2
在您的在线试用中,它没有进行要求的大写。例如,如果您code全部使用小写字母,则不会获得所需的大写字母。
汤姆·卡彭特

2
@TomCarpenter固定!:)
R. Kap's

11

05AB1E,37个字节

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

在线尝试!

说明

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

6

批次,207个字节

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

6

JavaScript的98

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

滥用数组到字符串的序列化来创建逗号。构建以下形式的数组:

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

并将其连接为以下形式的字符串", go\nJohnny B. Goode"

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

6

的JavaScript(ES6),104个 101 99字节

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

先前版本:

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

这个怎么运作:

  • 这是一个匿名函数,将输入作为参数 i

  • 将变量定义为首字母大写u的输入i(请注意,这假定输入为非空,这是可以的)

  • 只需直接构造要从这两个变量返回的字符串即可。

  • 重复"go, \nGo Johnny go"四次而不是重复可"Go Johnny go, go"节省一个字节。


编辑1:忘记打分号,哈哈!还误算了字节,最初是102,而不是104。感谢apsillers

编辑2:代替.repeat(4),方法是将该字符串放入变量中x,这样x+x+x+x可以节省两个字节。


测试片段


顺便说一句,我在这里是新手,我有一个问题:程序中的两个换行符算作字节吗?如果不是,它实际上是102个字节,但是我认为它可能很重要...对吗?
Pedro A

是的,它们每个都使用一个字节。
乔纳森·艾伦

我在这里只计数102个字节(使用mothereff.in/byte-counter),也不需要使用最后一个分号,因此实际上是101个字节。
apsillers

@apsillers你是对的,我算错了!更糟糕的是,哈哈,我忘了打分号。谢谢。
Pedro A

6

V41,38个字节

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

在线尝试!

V的完美挑战!

说明:

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

5
请解释一下?
ckjbgames

@ckjbgames完成!
DJMcMayhem


5

C,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()实际上调用该函数的a时……
moooeeeep

@moooeeeep好吧,这就是我所缺少的-我的理解是,这项挑战需要完整的程序,但实际上,它在OP中并未明确说明。
villapx

5

Python 3,88个字节

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

一个简单的格式字符串,带有位置参数。


@EricDuminil谢谢。固定。
wizzwizz4

1
@EricDuminil我知道它在行尾,但是在编辑器窗口中有换行...:-/
wizzwizz4

我正在计数88个字节
Felipe Nardi Batista

1
@EricDuminil len("\n".__repr__()[1:-2])是2。__repr__()在测量程序长度时,我忘记了。
wizzwizz4

1
@EricDuminil仅当您用"""标记而不是"标记包装时。
wizzwizz4



4

Python,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

编辑:感谢韦斯顿建议使用功能


1
您不需要提供整个程序,一个功能或更好的功能,lambda就足够了。
weston

1
+1谢谢你^32。这比&~32我正在使用的要短。同样,一个端口我的Java 7的答案似乎是更短:string x(string a){string x=(char)(a[0]^32)+a.Remove(0,1),n=a+"\n",c=", ",r=n+x+" Johnny "+a+c;return x+c+r+r+r+r+n+"Johnny B. "+x+"ode";}}139个字节在这里试试吧。
凯文·克鲁伊森

1
希望你不介意,但是我偷了你一个主意。:P不被称为坏人,我在这里给您一个提示:您可以将您的方法转换为lambda表达式(string x(string a)-> (a)=>,-13个字节),仅在我后面1个字节;)
auhmaan

1
@auhmaan如果您要编译为a Func<string, string>,则a=>不需要()
TheLethalCoder

3

MATLAB / Octave133111字节

@(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(小写字母),我可以通过使用32的简单减法将字符串中的第一个字母转换为大写,而不是使用带有upper()功能的regex来节省22个字节。

结果,该代码现在也可以与Octave一起使用,因此您现在可以在线尝试!


3

Ruby,89 88 86 79个字节

我的第一个高尔夫作品:

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

非常感谢@manatwork的出色评论:少7个字节!


1
真好 不需要在proc参数周围加上括号;您可以使用文字换行符代替转义符;单个字母字符串文字可以用?表示法书写;.gsub不需要在last 参数周围加上括号。pastebin.com/6C6np5Df
manatwork'Mar

@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)是非常早期的beta(并且有故障),所以这里存在一些明显的障碍,使它无法使用更少的字节。

例如,可以将大写的函数调用(被调用3次)保存在本地变量中,如下所示:

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

这将使字节数减少到89个字节。现在不起作用的原因可以归咎于C语言的参数评估顺序,因为Nova已编译为C。(参数评估顺序将在以后的更新中修复)

更甚者,我可以在String类中引入“ title”属性(这样做之后,我将大声笑)来减少大写函数调用的计数:

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

这将释放7个字节到82个字节的新总数。

此外(进一步),一旦添加了lambda变量类型推断,这将是有效的:

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

计数可以减少到72个字节

顺便说一句,这是我的第一个代码高尔夫,所以我可能错过了可以进行的更多优化。这是一个非高尔夫中心通用语言,我认为这是相当令人印象深刻。

前105个字节的代码适用于当前的Nova Beta v0.3.8版本(可从http://nova-lang.org获得)。

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

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

输出:

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

感谢您收听我为通用语言Nova制作的无耻广告(可在http://nova-lang.org找到……立即获取!)


3

Brainfuck,352字节

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

在线尝试!

  1. 获取输入。
  2. 保存特殊字符以备后用。
  3. 写第一部分。
  4. 保存“约翰尼”以备后用
  5. 打印四次“ Go Johnny 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();
        }
    }
}

发布

  • V1.2 - - 2 bytes-已交换(i)=>i=>,这要归功于TheLetalCoder评论。
  • V1.1 - -29 bytes-由于Bitesalot爵士最后一次更新,谁记得我,我可以格式之前编辑字符串。
  • 1.0 - 159 bytes-初始溶液。

笔记

标题具有指向包含代码和测试用例的页面的链接。只需点击Go,结果将被打印在代码下方。


无需为了正义()而争论。您可能还可以使用C#6中的插值字符串,尽管我对代码的了解还不够多,但是却看不见它(应该是微不足道的),您可能会迷失方向。Funci=>string.Format
TheLethalCoder

我可以删除(),但是我怀疑我可以使用插值字符串而不增加代码的大小,因为替换恰好会使重复崩溃。
auhmaan

就像我说的那样,我很懒,实际上我自己什么都没尝试!只是一个建议调查。
TheLethalCoder

2

使用Javascript - 72个 106字节

编辑:糟糕!我没有注意大写规则!过一会儿会更长

编辑2:现在应该遵守规则!

可能会打更多的高尔夫球

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

用作:

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

2

Excel VBA,137 121 112 89 87 84字节

匿名VBE立即窗口功能,该功能Variant/String从单元格获取类型的输入[A1]并通过打印VBE立即窗口输出

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

-16个字节,用于转换为即时窗口功能

-9字节使用 [PROPER(A1)]

-23字节用于丢弃For ...循环和滥用?语句

-2字节替换 " Johnny "&[A1]&", "&[A1][" Johnny "&A1&", "&A1]

-3字节用于使用+&字符串连接中且不关闭终端字符串

示例案例

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

1
Debug.?s有效的Debug.Print吗?这是如何运作的?
BruceWayne

1
@BruceWayne,好斗篷。VBA是支持自动格式化,这意味着之类的东西?i=1To并且&c被消化成像更详细的但可读术语Printi = 1 To& c。社区已决定的代码语言的压缩版本是可以接受的答复(见codegolf.meta.stackexchange.com/questions/10258/...
泰勒·斯科特

1
@BruceWayne至于?,我相信这是旧版本的Excel(4.0及以下版本)的残迹,在该版本中,宏表通过VBE通过VBA代替了VBA,在VBA中,Macro Sheets用作打印字符串的关键字,将字符串提供给pre-指示的文本文件。在?为关键字本身仍然是代码高尔夫非常有用的Print关键字用来编写VBA的当前版本字符串到一个文本文件。请注意,我的记忆力不足,因此请加一点盐。
泰勒·斯科特

1
很高兴知道!我只是问了一下,不是出于CodeGolf的目的,而是因为我一直在学习VBA,而这对我来说是个新手,所以我很好奇。总是喜欢在VBA中学习整洁的小技巧。干杯!
BruceWayne

1

CJam,50个字节

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

在线尝试!

说明:

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


1

Python,258个字节

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

请注意,此刻此刻与Java完全一样,并且可读性
很强

1
欢迎光临本站!您可以使用字符串乘法来缩短此答案。另外,不必声明变量,t因为它仅被调用一次。
精神主义奥扎伊克,2017年

谢谢,但是我的目标是与Java相当的258个字节
user7610

2
你为什么要匹配另一个分数?这是代码高尔夫,而不是可读性竞赛。
weston

2
@ user7610我认为您错过了重点。
miradulo

1

Java 6中,258个 242字节

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

其中最长的部分是printf的格式。输入不同于字符串from a到to 存在问题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 "
    }
}

编辑:感谢韦斯顿打高尔夫球16个字节


1
您可以使用lambda节省大量字节。
corvus_192年

1
"Johnny"后面总是一个空格。
weston

b[0]^=32;不需要转换也将大写(char)
weston

1

Mathematica,83个字节

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

匿名函数。将字符串作为输入并返回字符串作为输出。可能会打得更远。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.