Infelizmente, o pai fundador do rock and roll, Chuck Berry, faleceu hoje.
Considere o refrão de sua famosa música " Johnny B. Goode ":
Go, go
Go Johnny go, go
Go Johnny go, go
Go Johnny go, go
Go Johnny go, go
Johnny B. Goode
(Existem outras maneiras de pontuar, mas as opções acima servirão para os propósitos do desafio.)
Desafio
Dada uma sequência de letras em minúscula az, vazia, emita o coro de "Johnny B. Goode" com todas as instâncias Go
ou go
substituídas pela sequência de entrada, maiúsculas da mesma maneira.
Uma nova linha à direita pode seguir opcionalmente. Nada mais no refrão deve mudar.
Por exemplo , se a entrada for
code
a saída, deve ser exatamenteCode, code Code Johnny code, code Code Johnny code, code Code Johnny code, code Code Johnny code, code Johnny B. Codeode
opcionalmente seguido por uma nova linha.
Observe que a capitalização de todas as palavras corresponde ao refrão original e (apesar da falta de ritmo) o Go
in Goode
é substituído, bem como as palavras individuais Go
e go
.
O código mais curto em bytes vence.
Casos de teste
"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
an
,c
,cath
Respostas:
Vá, 123 bytes
Vai Johnny, vai !
Experimente online!
fonte
90
bytes.VIM,
5449 Pressionamentos de tecla (salvou 1 pressionamento de tecla do Kritixi Lithos )Comece com a palavra em uma linha em um arquivo com o cursor no primeiro caractere, e isso substituirá tudo pelo texto Explicação
Experimente online! (Obrigado DJMcMayhem !)
fonte
Y
em vez deyy
e talvez até mesmoG
em vez de2j
<CR>
vez de<esc>o
hD
funciona em vez dediw
Pure Bash,
6976 bytesExperimente online!
fonte
code
todas as letras minúsculas, não obtém a capitalização necessária.05AB1E , 37 bytes
Experimente online!
Explicação
fonte
Lote, 207 bytes
fonte
JavaScript, 98
Abusa a serialização de matriz para string para criar vírgulas. Constrói uma matriz do formulário:
E concatena-o com a sequência do formulário
", go\nJohnny B. Goode"
:fonte
JavaScript (ES6),
10410199 bytesVersão anterior:
Como funciona:
É uma função anônima que recebe a entrada como parâmetro
i
Define uma variável
u
como a entradai
com a primeira letra maiúscula (Observe que isso pressupõe que a entrada não seja vazia, o que é OK)Apenas construa diretamente a string a ser retornada dessas duas variáveis.
Repetir a string
"go, \nGo Johnny go"
quatro vezes em vez de repetir"Go Johnny go, go"
economiza um byte.Edit 1: Esqueceu de jogar fora o ponto e vírgula, haha !! Também desconsiderou os bytes, era originalmente 102, não 104. Obrigado apsillers .
Edit 2: Em vez de
.repeat(4)
, colocar essa string em uma variávelx
e doingx+x+x+x
permite salvar dois bytes.Snippet de teste
Mostrar snippet de código
fonte
V ,
41, 38 bytesExperimente online!
O desafio perfeito para o V!
Explicação:
fonte
Pitão - 52 bytes
Conjunto de Teste .
fonte
C,
156151 bytesfonte
main()
que realmente chama a função funciona ...Python 3, 88 bytes
Uma string de formato simples, com argumentos posicionais.
fonte
len("\n".__repr__()[1:-2])
é 2. Eu esqueci o__repr__()
quando medir o comprimento do programa."""
marcas em vez de"
marcas.Retina , 65 bytes
A contagem de bytes assume a codificação ISO 8859-1.
Experimente online!
fonte
Geléia , 41 bytes
Experimente online!
fonte
Python, 94 bytes
fonte
C #,
219211212146122 bytesImplementou várias sugestões de comentários com otimização adicional Este é o resultado final:
Experimente online!
Explicação:
Saída para casos de teste:
Edit: Obrigado a weston por sugerir o uso de uma função
fonte
^32
. Isso é mais curto que o que&~32
eu estava usando. Além disso, uma porta da minha resposta do Java 7 parece ser mais curta:string x(string a){string x=(char)(a[0]^32)+a.Remove(0,1),n=a+"\n",c=", ",r=n+x+" Johnny "+a+c;return x+c+r+r+r+r+n+"Johnny B. "+x+"ode";}}
( 139 bytes ) Experimente aqui.string x(string a)
->(a)=>
, -13 bytes), apenas 1 byte atrás de mim;)Func<string, string>
você simplesmentea=>
não precisa()
.MATLAB / Oitava ,
133111 bytesÉ um começo. Esperemos que possa ser reduzido ainda mais.
Basicamente, é uma função anônima que recebe uma entrada de sequência e usa regex para criar a saída necessária.
Um exemplo:
Você pode tipo de Experimente online! . O código não funciona bem com o Octave à medida que todas as letras maiúsculas se tornam${upper($0)}
, enquanto no MATLAB isso é convertido para a letra maiúscula real.Dado que a entrada é garantida como apenas
a-z
(alfabeto minúsculo), eu posso salvar 22 bytes usando uma subtração simples de 32 para converter a primeira letra da string em maiúscula, em vez de usar regex com aupper()
funçãoComo resultado, o código agora também funciona com o Octave, para que você possa experimentá-lo online!
fonte
Ruby,
89888679 bytesMinha primeira submissão de golfe:
Muito obrigado a @manatwork por seu comentário impressionante: 7 bytes a menos!
fonte
?
notação; os parênteses em torno dos últimos.gsub
parâmetros não são necessários. pastebin.com/6C6np5DfNova , 105 bytes
Como o Nova ( http://nova-lang.org ) é extremamente beta (e com erros), existem algumas desvantagens óbvias existentes aqui, impedindo o uso de menos bytes ainda.
Por exemplo, poderia ter salvo a chamada de função em maiúscula (que é chamada três vezes) em uma variável local como esta:
o que levaria a contagem de bytes para 89 bytes . A razão pela qual isso não funciona agora pode ser atribuída à ordem de avaliação de argumentos na linguagem C, porque Nova é compilada em C. (A ordem de avaliação de argumentos será corrigida em uma atualização futura)
Ainda mais, eu poderia ter introduzido uma propriedade "title" na classe String (e depois de fazer isso lol) para reduzir a contagem da chamada da função de capitalização:
e isso liberaria 7 bytes para um novo total de 82 bytes .
Além disso (e mais adiante), uma vez adicionada a inferência do tipo de variável lambda, isso seria válido:
A contagem pode ser reduzida para 72 bytes .
A propósito, este é o meu primeiro código de golfe, então provavelmente perdi ainda mais otimizações que poderiam ter sido feitas. E sendo esta uma linguagem de uso geral , não centrada no golfe , acho bastante impressionante.
O primeiro código de 105 bytes funciona na versão atual do Nova Beta v0.3.8 disponível em http://nova-lang.org
saídas:
Obrigado por ouvir meu anúncio descarado para o idioma de uso geral Nova (encontrado em http://nova-lang.org ... obtenha-o agora !!)
fonte
Brainfuck, 352 bytes
Experimente online!
Eu sempre gosto de desafios no Brainfuck, então foi divertido. Provavelmente pode ser jogado mais, mas o golfe Brainfuck é meio longo.
fonte
PHP, 86 bytes
fonte
Java 8,
151147146130 bytesExplicação:
Experimente aqui.
fonte
Empilhados , 64 bytes
Experimente online!
fonte
C # ,
159130128 bytesGolfe
Ungolfed
Ungolfed legible
Código completo
Lançamentos
- 2 bytes
- Trocado(i)=>
pori=>
, graças ao comentário de TheLetalCoder .-29 bytes
- Graças a Sir Bitesalot, na última atualização, que se lembrava de mim: eu podia editar a string antes do formato.159 bytes
- Solução inicial.Notas
O título possui um link para uma página com o código e os casos de teste. Basta pressionar Go e o resultado será impresso abaixo do código.
fonte
()
contornar o argumento para oFunc
justoi=>
. Provavelmente, você também pode usar seqüências de caracteres interpoladas do C # 6 e perder o valor,string.Format
embora eu não tenha examinado muito o código para ver como (deve ser trivial).()
, mas duvido que possa usar seqüências de caracteres interpoladas sem aumentar o tamanho do código, devido à substituição que ocorre para reduzir a repetição.Javascript -
72106 bytesEdit: Opa !! Não prestei atenção às regras de capitalização! Vai demorar mais tempoEdit 2: Deve estar seguindo as regras agora!
Provavelmente poderia ser jogado mais
Usado como:
fonte
Excel VBA,
137121112898784 BytesFunção de janela imediata VBE anônima que recebe entrada do tipo
Variant/String
da célula[A1]
e sai imprimindo a janela imediata do VBE-16 bytes para converter em função de janela imediata
-9 bytes para usar
[PROPER(A1)]
-23 bytes para descartar o
For ...
loop e abusar da?
instrução-2 bytes para substituir
" Johnny "&[A1]&", "&[A1]
por[" Johnny "&A1&", "&A1]
-3 bytes para usar
+
over&
para concatenação de String e deixar a string do terminal não fechadaExemplo de Caso
fonte
Debug.?s
efetivamenteDebug.Print
? Como isso funciona??
,i=1To
e&c
são digeridas em termos mais detalhados, porém legíveis, comoPrint
,i = 1 To
e& c
. A comunidade decidiu que a versão compactada do código nos idiomas é aceitável para respostas (consulte codegolf.meta.stackexchange.com/questions/10258/… )?
, acredito que seja um remanescente da versão antiga do Excel (4.0 e abaixo), em que as Folhas de Macro foram usadas no lugar do VBA por meio do VBE, onde foi usada como palavra-chave para imprimir uma sequência fornecida após arquivo de texto indicado. A?
palavra-chave em si ainda é muito útil para o golfe de código, poisPrint
é usada para gravar seqüências de caracteres em um arquivo de texto nas versões atuais do VBA. Note que estou ficando sem memória com uma, então leve isso com um grão de sal.CJam , 50 bytes
Experimente online!
Explicação:
fonte
Pyke , 43 bytes
Experimente online!
Constrói e imprime a primeira linha, insere
Johnny go
antes da vírgula e a duplica 4 vezes. Finalmente constrói a última parte.fonte
johnny
. tio.run/nexus/…Python, 258 bytes
fonte
t
porque ela é chamada apenas uma vez.Java 6,
258242 bytesA parte mais longa é o formato para printf. Existem problemas com a entrada diferente de string de
a
paraz
(sim, eu sei que não preciso dar suporte a mais nada).Ungolfed com comentários:
EDIT: Golfed 16 bytes graças a weston
fonte
"Johnny"
é sempre seguido por um espaço.b[0]^=32;
também será maiúscula sem a necessidade de(char)
transmissão.Mathematica, 83 bytes
Função anônima. Pega uma string como entrada e retorna uma string como saída. Provavelmente poderia ser jogado ainda mais.
fonte