コードジョニーコード、コード!


75

ロックンロールの創設者であるチャックベリーは、今日悲しいことに亡くなりました。

彼の有名な歌「ジョニー・B・グッド」のコーラスを考えてみましょう:

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

(句読点は他にもあり ますが、上記はチャレンジの目的に役立ちます。)

チャレンジ

空ではない小文字の文字a〜zを指定すると、「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

オプションで改行が続きます。

すべての単語の大文字化は元のコーラスと一致し、(リズムの欠如にもかかわらず)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

6
沈黙の1、2分を観察し、チャックに安らかな眠りを祈りましょう。
エリックアウトゴルファー

1
スペイン語でGoogleの翻訳によって話されたときにコードテキストは最高の音: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. レジスタを使用して2行目を書き、置換を入力します
  4. 中央の行を3回繰り返します

オンラインでお試しください!DJMcMayhemに感謝!)


私はあなたが行うことができると思うYの代わりyy多分でもG代わりのを2j
KritixiのLithos

そして、あなたが行うことができます<CR>代わりに<esc>o
KritixiのLithos

また、hD作品の代わりにdiw
KritixiのLithos

ヒントをありがとう!私はあなたの最後のバージョンで現在のバージョンに取り組むことができました。また、最初と最後の行を一度に書いてから、中央に記入することで、さらにいくつかを節約しました。
ドミニクA.



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

  • 変数ui最初の文字を大文字にして入力として定義します(これは入力が空でないことを前提としていることに注意してください)。

  • これらの2つの変数から返される文字列を直接構築するだけです。

  • 文字列"go, \nGo Johnny go"を繰り返す代わりに4回繰り返すと、"Go Johnny go, go"1バイト節約されます。


編集1:セミコロンをゴルフアウトするのを忘れた、ハハ!! また、バイト数を誤ってカウントしました。元は104ではなく102 でした。ありがとうapsillers

編集2:代わりの.repeat(4)変数にその文字列を置くことによって、xおよび実行にはx+x+x+x、2つのバイトを保存することができます。


テストスニペット


ところで、私はここに新しく、質問があります:プログラムの2つの改行はバイトとしてカウントされますか?そうでない場合、実際には102バイトですが、おそらくカウントされると思います...そうですか?
ペドロA

はい、彼らはそれぞれバイトを使用します。
ジョナサンアラン

ここでは(mothereff.in/byte-counterを使用して)102バイトしかカウントしません。また、最後のセミコロンを使用する必要がないため、実際には101バイトです。
-apsillers

@apsillersあなたは正しいです、私は間違って数えました!さらに悪いことに、セミコロンをゴルフアウトするのを忘れました。ありがとう。
ペドロ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、156 151バイト

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

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バイトをカウントしています
フェリペナルディバティスタ

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

編集:関数の使用を提案してくれたwestonに感謝


1
プログラム全体を提供する必要はありません。関数またはそれ以上のラムダで十分です。
ウェストン

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バイトここで試してみてください。
ケビン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

あなたはできる一種の オンラインそれをお試しください!。すべての大文字がになるため${upper($0)}、コードはOctaveではまったく機能しませんが、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:わあ、とても印象的で素敵です。ありがとう!
エリックドゥミニル

3

Nova、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言語の引数の評価順序にある​​と考えられます(引数の評価順序は、今後の更新で修正される予定です)。

さらに、文字列クラスに「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. 「ジョニー」を保存して後で
  5. 「Go Johnny go、go」を4回印刷する
  6. 最後の部分を書く

Brainfuckのチャレンジはいつも好きなので、楽しかったです。たぶんもっとゴ​​ルフできるかもしれませんが、ゴルフのブレインファックはちょっと長いです。



3

Java 8、151 147 146130バイト

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 -- Bitesalot lastの最後の更新の-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

Excel VBA、137 121 112 89 87 84バイト

Variant/Stringセルからタイプの入力を[A1]取得し、VBEイミディエイトウィンドウを印刷して出力する匿名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]

-3 文字列の連結に+over を使用し&、端末文字列を閉じないままにするためのバイト

事例

[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?それはどのように機能しますか?
ブルースウェイン

1
@BruceWayne、素敵な岬。VBAではそのようなことを意味し、オートフォーマットをサポートし?i=1Toそして&cなどのより詳細なが、読みやすい用語に消化されているPrinti = 1 To& c。コミュニティは、言語のコードの圧縮バージョンが応答に受け入れられることを決定しました(codegolf.meta.stackexchange.com/questions/10258/…を参照)
テイラースコット

1
@BruceWayneについて?は、マクロシートがVBEを介してVBAで使用され、その後に提供される文字列を印刷するためのキーワードとして使用された古いバージョンのExcel(4.0以下)の名残です指定されたテキストファイル。?キーワード自体はまだコードゴルフのために非常に有用であるPrintキーワードがVBAの現在のバージョンでは、テキストファイルに文字列を書き込むために使用されます。注意してください、私は1つでメモリをオフにしているので、塩の粒でそれを取る。
テイラースコット

1
知っておきたい!CodeGolfの目的ではなく、たった今尋ねましたが、私はVBAを常に学んでおり、これは私にとって非常に新しいものだったので、興味がありました。常にVBAできちんとした小さなトリックを学ぶのが好きです。乾杯!
ブルースウェイン

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とまったく同じであり、非常に読みやすいことに注意してください;)
user7610

1
サイトへようこそ!文字列の乗算を使用して、この答えを短くすることができます。さらに、変数tは一度しか呼び出されないため、変数を宣言する必要はありません。
小麦ウィザード

おかげで、Javaと同等になるように正確に258バイトを目指していました
-user7610

2
なぜ別のスコアと一致させようとしていますか?これはコードゴルフであり、読みやすさのコンテストではありません。
ウェストン

2
@ user7610あなたがポイントを逃していると思います。
ミラドゥロ

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の形式です。ato からstring以外の入力に問題があります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
ラムダを使用して、大量のバイトを節約できます。
corvus_192

1
"Johnny"常にスペースが続きます。
ウェストン

b[0]^=32;また、(char)キャストする必要なく大文字になります。
ウェストン

1

Mathematica、83バイト

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

匿名関数。入力として文字列を受け取り、出力として文字列を返します。おそらくさらにゴルフすることができます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.