Todo mundo provavelmente está familiarizado com a seguinte música , que é uma rodada musical :
fundo
Menos pessoas podem se lembrar de tentar cantar a versão em 4 pessoas com alguns amigos e falhar. Deslocar a letra de uma música com diferentes tons harmoniosos é conhecido como cantar uma "rodada" e é isso que estamos aqui para simular hoje usando saída estática. Aqui está um exemplo de alguém que realmente está realizando a peça (link para áudio / vídeo, terá som) .
O desafio
Esse desafio é gerar o texto da seguinte maneira exatamente da seguinte maneira:
Row, row, row your boat, |-----------------------------------|-----------------------------------|-----------------------------------
Gently down the stream. |Row, row, row your boat, |-----------------------------------|-----------------------------------
Merrily, merrily, merrily, merrily,|Gently down the stream. |Row, row, row your boat, |-----------------------------------
Life is but a dream. |Merrily, merrily, merrily, merrily,|Gently down the stream. |Row, row, row your boat,
-----------------------------------|Life is but a dream. |Merrily, merrily, merrily, merrily,|Gently down the stream.
-----------------------------------|-----------------------------------|Life is but a dream. |Merrily, merrily, merrily, merrily,
-----------------------------------|-----------------------------------|-----------------------------------|Life is but a dream.
Regras
- O espaço em branco à direita é aceitável, mas não obrigatório, isso inclui novas linhas.
- Hífens e barras fazem parte da saída necessária, sim.
- Vírgulas, pontos, letras maiúsculas e todos os elementos sintáticos relacionados à gramática são necessários.
Este é o code-golf , o código de contagem de bytes mais baixo sem usar brechas padrão é o vencedor.
code-golf
kolmogorov-complexity
Urna de polvo mágico
fonte
fonte
Respostas:
05AB1E ,
80bytesExperimente online!
Trabalho em progresso.
fonte
ª
? Deixa pra lá, sentença escrita, brilhante.vy
pode serʒ
para salvar um byte.V ,
139, 128 bytesUm one-liner! (tipo: P)
Experimente online!
Hexdump:
Recebo pontos de bônus por pousar exatamente
2^7
?Demorou um pouco para descobrir. Espero poder jogar toneladas como a resposta artística do teclado ASCII, mas não tenho certeza. Veremos. São desafios muito semelhantes (e ambos muito divertidos: D)
Originalmente eu tentei isso (180):
Experimente online!
O que insere isso:
e então substitui para expandi-lo. Mas construí-lo no estilo ascii-art é muito mais curto (e mais divertido, TBH)
fonte
0^(2^7)
pontos de bônus por pousar no2^7
haha. Interessante primeiro pensamento, embora na versão 180.Lote,
292288275 bytesEditar: salvou 13 bytes reescrevendo o código para usar uma versão do truque de substring que usei na minha resposta Retina. Convenientemente, posso repetir seis vezes e depois fazer uma sétima iteração do corpo do loop, o que significa que a citação necessária para a saída
|
s não fica muito onerosa, no entanto, tenho que ter cuidado para levar^
em conta os s ao selecionar a substring .fonte
Python 3,
252235208206205 bytesTudo bem, tudo bem. Aqui está uma resposta menos chata:
Resposta antiga, 252 bytes:
Resposta chata, e a outra resposta Python é mais curta, mas pensei em tentar se essa abordagem for mais curta. Python 3, apesar da economia de byte / string 2-3 diferença porque ambos
gzip
ebase64
são shittier em Python 2.fonte
PowerShell ,
224207202 bytesExperimente online! (a saída é quebrada se sua tela não for larga o suficiente)
Nossa, essa coisa de geração de array é feia, mas salvou 17 bytes, então ...
Passamos de
0
para6
. A cada iteração, estamos indexando em uma matriz(0,1,2,3,4,4,4)
. A indexação é baseada no dígito atual, o dígito atual+6
, aquele-1
e depois aquele-1
. Cada um deles é então alimentado através de um loop no qual modulamos%7
. Por exemplo, se estivermos no loop0
externo0..6
, esses seriam0,6,5,4
, então cada%7
um0,6,5,4
. Isso é indexado na(0,1,2,3,4,4,4)
matriz, então a saída é0,4,4,4
. Para entrada1
, obtemos1,7,6,5
então o1,0,6,5
que produz1,0,4,4
. E assim por diante. (as coisas seriam muito mais fáceis se tivéssemos uma.clamp
função)Esses são cuspir um de cada vez em um loop
|%{}
. A cada iteração, indexamos no local apropriado no conjunto de letras de músicas e deixamos essa sequência no pipeline. Essas strings são-join
editadas juntamente com|
para formatar a linha de saída. Essas strings são deixadas no pipeline e a saída é implícita.Economizou alguns bytes graças ao Value Ink.
fonte
$a
salvou em 11 espaços, você pode alterar a quarta linha para terminar em$a
mais 4 espaços em vez de$(' '*15)
-3 bytes, sim?JavaScript (ES8),
285256240231229217214213211210 bytesEconomizou alguns bytes emprestando um truque da resposta de Arnauld
Tente
fonte
'0444,1044,2104,3210,4321,4432,4443'.split
,.map
Você economiza 10 bytes. Além disso,padEnd
não faz parte do ES6 ou mesmo do ES7.PHP, 191 bytes
Experimente online!
Expandido
fonte
Python 2 , 199 bytes
Experimente online!
Obrigado a @mathjunkie por salvar 14 bytes
fonte
'Merrily, merrily, merrily, merrily,'
poderia estar('merrily, '*4).capitalize()
certo? Ou isso não é Python?'Merrily,'+' merrily,'*3
CJam ,
128122 bytesExperimente online!
Explicação
fonte
SOGL , 83 bytes
A 1ª parte
┌׀0ρMVxDrž|⁷ΨB≈π93|↑D~Νķ‰¤t╤▼ΣΗ⁶⅔¾№⁷Ζ÷│²╥Ν9°‘
é uma string compactada que resulta emEssas são as linhas invertidas (uma vez que são impressas linha por linha), com a parte "alegre" cortada para ser substituída no programa.
O restante do programa:
fonte
/// , 200 bytes
Experimente online!
Simples, usa ocorrências comuns como substituições.
fonte
PHP, 179 bytes:
destroçado
fonte
JavaScript (ECMAScript 2017),
191187182 bytesEconomizou 3 bytes graças a Shaggy
fonte
'Merrily,'+' merrily,'.repeat(3)
salva um byte.padEnd
não está no ES7, muito menos no ES6.M${s='errily, '}m${s}m${s}m
em vez deM${s='errily,'} m${s} m${s} m
salvar 2 bytes"Merrily,"+(s=" merrily,")+s+s
.Microsoft Sql Server, 421 bytes
Verifique Online
fonte
C (GCC),
231230 bytes-1 byte graças ao ceilingcat!
Bem direto. Primeiro, ele cria a matriz de cadeias de 7 linhas, parte através de uma macro para fatorar a parte "alegre", depois as linhas de traços são preenchidas com a
memset
. Em seguida, as linhas são impressas com o deslocamento e separadores adequados.Experimente online!
fonte
MATLAB, 280 bytes
A indexação da matriz de células é bastante cara, que parece ser o lugar mais fácil para descartar alguns bytes (se possível).
fonte
Retina ,
153150 bytesExperimente online!
Tentei a codificação arbitrária no comprimento da execução, mas
$1$*$2
não faz o que quero, e a repetição de strings se mostrou muito complicada. Editar: salvou 2 bytes por codificaçãoerrily,
e 1 byte removendo um desnecessário^
.fonte
Python 2, 225 bytes
Experimente online!
fonte
Perl 5 , 215 bytes
Experimente online!
fonte
Swift ,
416406405380372307 bytesVocê pode tentar aqui .
Graças a @Mr. Xcoder por me salvar 65 bytes!
fonte
f
que o seguinte:var f=String.init(repeating:count:)
, o que economiza uma tonelada de bytes: 30print(o())
, você deve apenas chamaro()
porque você tem umaprint
declaração em seu interior, o que dá uma()
no final da saídaT-SQL,
296 277276 bytesAs quebras de linha no início fazem parte da sequência original, as quebras de linha próximas ao final são apenas para fins de exibição e não são contadas no total de bytes.
Inspirado em grande parte pela resposta de Conrade SparklePony . Técnica diferente da resposta SQL de Andrei Odegov .
Substituição bastante direta, mas algumas coisas que ajudam a economizar bytes:
Se eu pudesse
REPLACE
todos osREPLACE
s com algo mais curto. Hmm....fonte
Japt
-R
,99959492908987 bytesTente
fonte
Ruby, 162 bytes
fonte
Java, 295 bytes /
272259 bytescom novas linhas a cada 4 colunas (295b)
Experimente Online
nenhuma versão de nova linha (259b):
Experimente Online
fonte
Japt ,
158157 bytesExperimente online!
fonte
Stax , 63 bytes
Execute e depure
fonte
Perl 5 , 163 bytes
Experimente online!
fonte
Encantos Rúnicos , 292 bytes
Experimente online!
Eu geralmente não faço complexidade kolmogorov , mas o layout era um com o qual eu poderia trabalhar sem muitos problemas. O Runic não tem boas maneiras de comprimir seqüências de caracteres arbitrárias; portanto, só precisamos trabalhar com partes repetitivas.
Explicação:
Descompactando um pouco:
As 5 primeiras linhas atuam como funções para criar cada parte da música (onde a primeira linha gera 35
-
para o espaçador, usando o valor decimal de#
para salvar 2 bytes3X5+
). A instrução de retorno está no início da linha para garantir que todos os IPs que entram em uma função também deixem a função após o mesmo número de ciclos para evitar a mesclagem de IPs (resultando em linhas de saída ausentes), pois os programas são células retangulares e vazias estão implícitos.As próximas quatro linhas são responsáveis por imprimir as quatro primeiras linhas da saída
A quinta linha imprime as últimas 3 linhas de saída. Como as três linhas precisam começar com pelo menos um espaçador de estrofes, não é possível usar três IPs separados (pois eles precisariam de atrasos para evitar a mesclagem).
>
,y
,@
, E um custo mais bytes de nova linha (4) do que0[...]
(3 bytes) onde...
é instruções arbitrárias (isto é. Uma outra linha de saída).Substituindo
>
e substituindo@
usar um único IP requer mais bytes.Finalmente, mesclar todas as cinco linhas de ponto de entrada na segunda linha economiza 5 bytes de novas linhas. Apenas precisamos garantir que a
B͍
instrução de retorno ao rancho se mova primeiro para o final de sua linha, preservando a funcionalidade da função.fonte