Enquanto tentava (e falhei) convencer meu filho a comer o jantar, tentei cantar para ele. No meio dessa música, eu percebi que a estrutura da fórmula poderia se dar bem no código do golfe!
A tarefa é escrever um programa ou função que não aceita entrada e produz o seguinte texto:
There's a hole in the bottom of the sea
There's a hole in the bottom of the sea
There's a hole, there's a hole
There's a hole in the bottom of the sea
There's a log in the hole in the bottom of the sea
There's a log in the hole in the bottom of the sea
There's a hole, there's a hole
There's a hole in the bottom of the sea
There's a bump on the log in the hole in the bottom of the sea
There's a bump on the log in the hole in the bottom of the sea
There's a hole, there's a hole
There's a hole in the bottom of the sea
There's a frog on the bump on the log in the hole in the bottom of the sea
There's a frog on the bump on the log in the hole in the bottom of the sea
There's a hole, there's a hole
There's a hole in the bottom of the sea
There's a wart on the frog on the bump on the log in the hole in the bottom of the sea
There's a wart on the frog on the bump on the log in the hole in the bottom of the sea
There's a hole, there's a hole
There's a hole in the bottom of the sea
There's a hair on the wart on the frog on the bump on the log in the hole in the bottom of the sea
There's a hair on the wart on the frog on the bump on the log in the hole in the bottom of the sea
There's a hole, there's a hole
There's a hole in the bottom of the sea
There's a fly on the hair on the wart on the frog on the bump on the log in the hole in the bottom of the sea
There's a fly on the hair on the wart on the frog on the bump on the log in the hole in the bottom of the sea
There's a hole, there's a hole
There's a hole in the bottom of the sea
There's a flea on the fly on the hair on the wart on the frog on the bump on the log in the hole in the bottom of the sea
There's a flea on the fly on the hair on the wart on the frog on the bump on the log in the hole in the bottom of the sea
There's a hole, there's a hole
There's a hole in the bottom of the sea
There's a smile on the flea on the fly on the hair on the wart on the frog on the bump on the log in the hole in the bottom of the sea
There's a smile on the flea on the fly on the hair on the wart on the frog on the bump on the log in the hole in the bottom of the sea
There's a hole, there's a hole
There's a hole in the bottom of the sea
Regras do desafio:
- O texto pode ser impresso ou retornado como saída de função
- Cada verso é separado por uma única linha vazia
- O espaço em branco à direita é aceitável, desde que não mude o layout (portanto, não há espaço em branco à esquerda nem espaços extras entre as palavras)
- As novas linhas à direita também são boas.
- Não há novas linhas principais.
- Todos os idiomas são bem-vindos, e isso é código-golfe ; portanto, a resposta mais curta em bytes para cada idioma vence!
gzip -5
compacta em 186 bytes (bzip2
exz
parece piorar).Respostas:
SOGL ,
1039493 bytesExperimente aqui!
fonte
Stax ,
908775 bytesExecute e depure
Descompactado, não jogado e comentou que é assim.
Execute este
fonte
Perl 5,
158154 bytes154 bytes
158 bytes
fonte
There's a bottom of the sea
. Os fatos confirmam, +1There's a sea
mas é maisPython 2 ,
202190187185183182181 bytesExperimente online!
Alternativas antigas para
'io'['g'in s]
(13 bytes):'oi'[s[5]<'n']
'io'[len(s)>30]
,'ioo'[len(s)%3]
,'ooi'[len(s)%4]
, e'io'[w[1]=='o']
Salvou:
fonte
"hole, t%shole\n"%a[1:]
salva um byte'oi'[s[5]<'n']
também será uma alternativa antiga: Featuring'io'['g'in s]
!C (gcc) ,
261246236 bytes-15 bytes, graças a Daniel Schepler
-10 bytes, graças a tetocat
Experimente online!
fonte
,*b="_TH<0$\31\r"
?05AB1E ,
1031009997969392 bytesGuardou um byte graças a Kevin Cruijssen
Experimente online!
Explicação
“¥ÊˆŽ bumpÑå‡îtíÁ¤†îÌea¹²“#v
inicia um loop sobre a lista["hole", "log", "bump", "frog", "wart", "hair", "fly", "flea", "smile"]
. As palavras são compactadas usando o dicionário 05AB1E.Em cada um de nós:
fonte
õ
, porque, aparentemente, gera uma string vazia por padrão quando ums
wap é usado sem nada na pilha . Não consegui encontrar mais nada para jogar golfe; resposta muito boa!PowerShell ,
194188185180174 bytesExperimente online!
Não consigo pegar Python ...Basicamente, define algumas cordas comuns
$h
,$a
,$z
, e$b
, em seguida, passa por um loop através de cada um dos itens (hole
,log
...flea
,smile
), cada iteração saída do verso apropriado. Há um pouco de lógica!$j++
no meio para explicar a opçãoin
/on
que acontece. Caso contrário, todas as strings serão deixadas no pipeline e o padrãoWrite-Output
nos fornecerá novas linhas gratuitamente.-6 bytes graças a Arnauld.
-3 bytes graças ao mazzy.
-5 bytes graças ao Veskah.
-6 bytes graças ao mazzy.
fonte
-split
bastante para obter palavras.JavaScript (ES6),
201 194 189 188187 bytesGuardado 1 byte graças a @Shaggy
Experimente online!
JavaScript (ES6), 235 bytes
Simplesmente RegPack'ed .
Experimente online!
fonte
Bash,
168160 bytes160 bytes
168 bytes
Traduzido da minha outra resposta em Perl.
fonte
Japt
-Rx
,126116113112111109107 bytesAcontece que jogar golfe em um desafio de compressão de cordas enquanto você está no telefone é incrivelmente difícil - quem teria pensado ?!
Teste-o
fonte
XML,
719673603514493486 bytesVocê pode "executá-lo" com
xmlstarlet sel -t -m '//a' -v . -n <xml_file_here>
.Isso seria muito mais fácil se o XML não fosse tão detalhado, mas, pelo lado positivo, isso é menos de 25% do tamanho do texto original.
fonte
Retina 0.8.2 , 150 bytes
Experimente online! Explicação:
Insira o último verso.
Calcule todos os versos.
Coloque os versículos na ordem correta.
Complete cada versículo e adicione o refrão.
Expanda alguns espaços reservados.
fonte
R ,
237231 bytesExperimente online!
fonte
PHP,
180178 bytesCorra com
-nr
ou experimente online .Gera avisos no PHP 7.2; Para corrigir, coloque aspas em torno
dos elementos da matriz,
io
,hole
e os dois autônomoT
.fonte
C (GCC) ,
334328307299 bytesExperimente online!
fonte
Perl 6 , 166 bytes
Experimente online!
fonte
Japonês
-R
, 142 bytesExperimente online!
fonte
Lote, 267 bytes
t
contém uma sequência repetida no coro,s
contém a maior parte da linha do verso, enquantor
escolhe entrein the
eon the
. Nos versos, apenas os 11 primeiros caracteres det
são necessários, enquanto na primeira linha de coro a segunda cópiat
temT
letras minúsculas e a segunda linha de coro reutiliza os últimos 25 caracteres des
.fonte
Ruby ,
173170 bytesExperimente online!
fonte
Haskell ,
243215 bytesReduzido para 215 bytes com grande ajuda do nimi
Experimente online!
(A versão antiga de 243 bytes está aqui ).
Uma solução bastante direta.
fonte
s
apenas uma vez para poder incorporá-lo. b) você sempre preceder e acrescentar algo parat
, assim você pode torná-lo uma função (infix):t#u=t:"here's a "++u
. c) construir a grande lista em funçãol
commap(++" on the ")(words"smile flea ..."
o menor. Além disso: mova tudo o que foi anexado a essa lista para a própria lista. d) a lista de números a cair agora passa de8
baixo para0
(números de um dígito!) e) agora inliningi
também salva alguns bytes. f) não há necessidade de nomear sua função principal. De acordo com nossa meta, os valores de Haskell são considerados funções apropriadasv=
;>>=
(concatMap) a partir da lista monad econcat
da função inlinel
. Experimente online!JavaScript (Nó Babel) , 239 bytes
-7 bytes de @Oliver
*.*
Experimente online!
fonte
T
na terceira linha de cada versículo deve estar em minúsculas.Python 3 ,
213 206 198193 bytesExperimente online!
-15 bytes graças a @Sara
-5 bytes graças a @ somente ASCII
Provavelmente um pouco mais jogável, mas não muito.
fonte
o=e=
criar as duas coisaso
e see
referir ao mesmo objeto. Eu também pensei que a divisão seria mais longa.o
ee
que se referem ao mesmo objeto ... é só que strings são imutáveis em Python para que coisas como+=
vai criar uma nova cópia em vez de mutação do já existenteLimpo , 267 bytes
Experimente online!
fonte
cQuents ,
238219 bytesExperimente online!
Esse desafio me fez finalmente implementar listas e strings no meu idioma. Essa linguagem foi criada para seqüências inteiras, e foi muito bem!
Explicação
fonte
Perl 5 , 194 bytes
@ Somente ASCII eliminou 6 bytes com novas linhas literais e um
\l
truque que eu esqueciExperimente online!
fonte
\l
antes, mas nunca tive um motivo para usá-lo, então nunca pensei nisso.Carvão ,
115106 bytesExperimente online! Link é a versão detalhada do código. Editar: salvou 9 bytes, copiando meu código de lote para a última linha do refrão. Explicação:
Salve a string
There's a hole
, que é usada duas vezes como está, uma terceira vez em letras minúsculas e também uma quarta vez, mas apenas os 10 primeiros caracteres.Divida a sequência
bottom of the seaxhole ixlog ixbump oxfrog oxwart oxhair oxfly oxflea oxsmile o
emx
s.Passe os 9 versículos, pegando os primeiros
i+2
elementos da matriz, revertendo-os, juntando-osn the
e prefixandoThere's a
o resultado.Expanda cada linha em um verso duplicando a linha e construindo o refrão. Cada linha do verso é impressa implicitamente em cada linha, e cada verso é implicitamente separado por uma linha em branco.
fonte
V ,
184170 bytesExperimente online!
Explicação:
4iThere's a hole in the bottom of the sea<\n><esc>
Inserir "Há um buraco no fundo do mar" 4 vezes.kk
Mover para a terceira linhay5w
cópia "Há um buraco"5eá,
insira uma vírgula após "Existe um buraco"lp
cole após a vírgulaD
excluir o resto da linha5brt
minúsculas o segundo THj4yy
copie 4 linhas da segunda linhaGp
Cole tudo após a primeira linha4w8ion the <esc>
(no final do primeiro verso) vá para o primeiro "buraco" no segundo verso e insira "no" 8 vezes2briilog <esc>
retroceda até o último "on", substitua o por um ie insira "log"3bibump <esc>3bifrog <esc>3biwart <esc>3bihair <esc>3bifly <esc>3biflea <esc>3bismile <esc>
Mover para trás pela linha, inserindo as palavras apropriadas entre cada "no"7ñ4yykp4wd3wñ
executar4yykp4wd3w
7 vezes4yykp
duplicar o verso antes deste4wd3w
vá para a primeira palavra depois de "Existe um buraco" e exclua 3 palavras8ñÄ5jñ
duplique a primeira linha de cada versículo após o primeiro (há 8 delas para fazer)fonte
/// , 216 bytes
Experimente online!
Esse tipo de tarefa é a única coisa em que /// é razoavelmente boa. : D Ei, o resultado é menor que C, C # ou Java!
A saída deste programa termina em duas quebras de linha à direita; espero que isso não seja um desagrado.
De qualquer forma, não há nenhuma inteligência real aqui. Eu simplesmente identifiquei seqüências repetidas e defini atalhos de um caractere para elas, e repeti até não ver mais seqüências repetidas. Fiz isso de uma maneira mais ou menos ingênua e gananciosa. No entanto, defini intencionalmente um atalho para "sorria na pulga no ... mar", seguido de "pulga na mosca no ... mar" e assim por diante, para formar uma cadeia de atalhos . O resultado é que toda a sequência de novos substantivos é claramente visível no código, e acho isso bastante agradável. :)
Após a substituição de V e U, temos o seguinte código mais legível:
fonte
LaTeX, 265
268caracterescompila em um PDF agradável, com recuos de parágrafos e tudo mais.
Ungolfed e comentou:
De saída:
fonte
C # (compilador interativo do Visual C #) , 220 bytes
Experimente online!
-5 bytes graças a @ASCIIOnly e -2 bytes graças a @someone!
Eu tenho um filho pequeno e posso garantir que essa música é igual em partes cativantes e irritantes.
fonte
.Any()
->!=""
?in
emforeach
> _>