Код Джонни код, код!


75

Отец-основатель рок-н-ролла Чак Берри с грустью скончался сегодня.

Рассмотрим припев его знаменитой песни « Джонни Б. Гуд »:

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

необязательно, с последующим переводом строки.

Обратите внимание, что заглавные буквы всех слов соответствуют исходному хорусу, и (несмотря на отсутствие ритма) заменяется Goin, Goodeа также отдельные слова Goи 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
Упущенные возможности для тестов: an, c,cath
Neil

54
Кто-нибудь, пожалуйста, сделайте версию Go.
jl6

2
Как программа должна обрабатывать строки из нескольких слов?
Товарищ SparklePony

6
Давайте просто соблюдаем минуту или две тишины и желаем Чака «Покойся с миром».
Эрик Outgolfer

Ответы:



14

VIM, 54 49 нажатий клавиш (спас 1 нажатие клавиши от 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.         

Начните со слова в строке в файле с курсором на первом символе, затем это заменит все это текстом Объяснение

  1. Скопируйте слово в регистр, затем измените первую букву на заглавную и сохраните ее в регистре.
  2. Напишите первую строку, используя регистры, чтобы заполнить замены и последние строки
  3. Напишите вторую строку, используя регистры для заполнения замен
  4. Повторите среднюю линию 3 раза

Попробуйте онлайн! (Спасибо DJMcMayhem !)


Я думаю, что вы можете сделать Yвместо yyи, может быть, даже Gвместо2j
Kritixi Lithos

И вы можете сделать <CR>вместо<esc>o
Kritixi Lithos

Также hDработает вместоdiw
Kritixi Lithos

Спасибо за советы! Я был в состоянии работать в вашем последнем в текущей версии. Я также сохранил еще несколько, написав первую и последнюю строку за один раз, затем заполнив середину.
Доминик А.


11

Чистый Баш, 69 76 байт

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

Попробуйте онлайн!


2
В вашей пробной версии он не использует необходимую заглавную букву. Например, если вы вводите codeвсе строчные буквы, вы не получите нужную капитализацию.
Том Карпентер

2
@TomCarpenter Исправлено! :)
Р. Кап

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. Спасибо апсиллерам .

Редактировать 2: вместо того .repeat(4), чтобы поместить эту строку в переменную xи делать x+x+x+xпозволяет сохранить два байта.


Тестовый фрагмент


Кстати, я новичок здесь, у меня есть вопрос: две строки в моей программе считаются байтами? Если нет, то на самом деле это 102 байта, но я думаю, что это имеет значение ... Верно?
Педро А

Да, каждый из них использует байт.
Джонатан Аллан

Здесь я считаю только 102 байта (используя mothereff.in/byte-counter ), а также нет необходимости использовать конечную точку с запятой, так что это действительно 101 байт.
Апсиллер

@apsillers Ты прав, я ошибся! И что еще хуже, хаха, я забыл сыграть в точку с запятой. Благодарю.
Педро А

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

@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 Хорошо, это то, чего мне не хватало - я понимал, что для этой задачи требуется полная программа, но, действительно, в ОП это явно не сказано.
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

Редактировать: Спасибо Уэстон за предложение использовать функцию


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 байт ). Попробуйте здесь.
Кевин Круйссен

1
Надеюсь, ты не возражаешь, но я украл у тебя идею. : P Для того, чтобы не быть известным как плохой парень, я оставлю здесь совет: вы можете преобразовать свой метод в лямбда-выражение ( string x(string a)-> (a)=>, -13 байт), только на 1 байт позади меня;)
auhmaan

1
@auhmaan Если вы компилируете в a, Func<string, string>вы можете просто a=>не нуждаться в ().
TheLethalCoder

3

MATLAB / Octave , 133 111 байт

@(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(строчные буквы), я могу сохранить 22 байта, используя простое вычитание из 32 для преобразования первой буквы в строке в заглавную, вместо использования регулярного выражения с upper()функцией.

В результате код теперь работает и с Octave, так что теперь вы можете попробовать его онлайн!


3

Рубин, 89 88 86 79 байтов

Моя первая подача в гольф:

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

Большое спасибо @manatwork за его замечательный комментарий: на 7 байт меньше!


1
Приятно. Скобки вокруг параметра proc не нужны; вы можете использовать буквальные символы новой строки вместо escape-символов; однобуквенные строковые литералы могут быть записаны с помощью ?нотации; скобки вокруг последних .gsubпараметров не нужны. pastebin.com/6C6np5Df
manatwork

@ Manatwork: Вау, очень впечатляюще и мило с вашей стороны. Спасибо!
Эрик

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 байт . Причину, по которой это не работает сейчас, можно обвинить в порядке оценки аргументов в языке C, поскольку Nova компилируется в C. (порядок оценки аргументов будет исправлен в будущем обновлении)

Более того, я мог бы ввести свойство "title" в классе String (и я сделаю это после выполнения этого lol), чтобы уменьшить количество вызовов функции капитализации:

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-байтовый код работает в текущей сборке 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. Печать "Иди Джонни иди, иди" четыре раза
  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 байтов


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 читаемый

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 , который запомнил меня, я мог редактировать строку перед форматированием.
  • v1.0 - 159 bytes- Исходное решение.

Примечания

В заголовке есть ссылка на страницу с кодом и контрольными примерами. Просто нажмите Go, и результат будет напечатан под кодом.


Не нужно ()во всем спорить, Funcпросто делай i=>. Вы, вероятно, также можете использовать интерполированные строки из C # 6 и потерять их, 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 байта для использования +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перевариваются в более подробные, но удобочитаемые термины, такие как Print, i = 1 Toи & c. Сообщество решило, что сжатая версия кода на языках приемлема для ответов (см. Codegolf.meta.stackexchange.com/questions/10258/… )
Тейлор Скотт,

1
@BruceWayne Что касается ?, я полагаю, что это остаток от старой версии Excel (4.0 и ниже), где листы макросов использовались вместо VBA через VBE, где он использовался в качестве ключевого слова для печати строки, предоставленной после указанный текстовый файл. Само ?ключевое слово все еще очень полезно для игры в гольф, поскольку Printключевое слово используется для записи строк в текстовый файл в текущих версиях VBA. Заметьте, я ухожу из памяти с одним, так что возьмите это с зерном соли.
Тейлор Скотт

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

Пайк , 43 байта

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

Попробуйте онлайн!

Создает и печатает первую строку, затем вставляет Johnny goперед запятой и дублирует ее 4 раза. Наконец конструирует последнюю часть.


Кажется, не работает для ввода johnny. tio.run/nexus/…
Деннис

Я понятия не имею, как я не
Blue

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потому что она вызывается только один раз.
Пшеничный волшебник

Спасибо, но я был нацелен на ровно 258 байт, чтобы быть наравне с Java
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. Есть проблемы с вводом, отличным от string от ato 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"&

Анонимная функция. Принимает строку в качестве ввода и возвращает строку в качестве вывода. Возможно, будет в гольф дальше.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.