Код Джонні Код, Код!


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

необов'язково супроводжується новим рядком.

Зауважте, що велика література всіх слів відповідає початковому приспіву, і (незважаючи на відсутність ритму), Goін 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
Давайте лише поспостерігаємо хвилину-другу мовчання і побажаємо Чік спокійно.
Erik the Outgolfer

1
Текст коду найкраще звучить, коли Google Translator розмовляє іспанською: translate.google.com/#es/en/…
palsch

Відповіді:



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

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


@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

C #, 219 211 212 146 122 байт

Реалізовано кілька пропозицій із коментарів із додатковою оптимізацією. Це Endresult:

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 байт ) Спробуйте тут.
Kevin Cruijssen

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

1
@auhmaan Якщо ви збираєтеся, 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 не потрібні; ви можете використовувати буквальні символи нового рядка замість втечі символів; однолітерні літеральні рядки можна записати з ?позначенням; дужки навколо останніх .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

Java 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 , який запам'ятав мене, я міг редагувати рядок перед форматом.
  • 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 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? Як це працює?
BruceWayne

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. Ура!
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 рази. Нарешті будує останню частину.


Схоже, це не працює для введення даних johnny. tio.run/nexus/…
Денніс

Я поняття не маю, як я цього не помітив, виправлений зараз
Синій

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

Дякую, але я мав на меті рівно 258 байт, щоб бути нарівні з Java
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. Є проблеми з введенням, відмінним від рядка від 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 "
    }
}

EDIT: Гольф 16 байтів завдяки weston


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"&

Анонімна функція. Приймає рядок як вхідний і повертає рядок як вихідний. Можливо, можна було б пограти в гольф далі.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.