Aqui está a música (bastante assustadora) dos Cinco patinhos (não é longa):
Five little ducks went out one day,
over the hills and up away.
Mother Duck said, "Quack Quack Quack Quack",
but only four little ducks came back.
Four little ducks went out one day,
over the hills and up away.
Mother Duck said, "Quack Quack Quack Quack",
but only three little ducks came back.
Three little ducks went out one day,
over the hills and up away.
Mother Duck said, "Quack Quack Quack Quack",
but only two little ducks came back.
Two little ducks went out one day,
over the hills and up away.
Mother Duck said, "Quack Quack Quack Quack",
but only one little duck came back.
One little duck went out one day,
over the hills and up away.
Mother Duck said, "Quack Quack Quack Quack",
but none of the little ducks came back.
Mother duck herself went out one day,
over the hills and up away.
Mother Duck said, "Quack Quack Quack Quack",
and all of the little ducks came back.
Sua tarefa não é produzir esta música. Você deve pegar um verso e escrever o próximo verso (o próximo verso do último verso é o primeiro).
Regras
- Sem brechas padrão, por favor.
- A entrada / saída será realizada através de nossos métodos padrão de entrada / saída.
- O verso exato deve ser emitido e não deve haver diferenças quando comparado à letra da música. A entrada não será diferente quando comparada à letra da música também.
Exemplos
Mother duck herself went out one day,
over the hills and up away.
Mother Duck said, "Quack Quack Quack Quack",
and all of the little ducks came back.
Esperado:
Five little ducks went out one day,
over the hills and up away.
Mother Duck said, "Quack Quack Quack Quack",
but only four little ducks came back.
Three little ducks went out one day,
over the hills and up away.
Mother Duck said, "Quack Quack Quack Quack",
but only two little ducks came back.
Esperado:
Two little ducks went out one day,
over the hills and up away.
Mother Duck said, "Quack Quack Quack Quack",
but only one little duck came back.
Respostas:
Stax ,
115111 bytesExecute e depure
Todos os versos como casos de teste
fonte
JavaScript (ES9), 227 bytes
É semelhante à versão do Nó abaixo, mas usa uma fórmula baseada em
parseInt()
vez deBuffer()
identificar o verso de entrada.Este é o ES2018 (também conhecido como ES9) porque estamos usando uma expressão regular com a
/s
flag ( dotAll ).Experimente online!
Quão?
Nesta versão, analisamos o verso inteiro da entrada como base 30 (
0
parat
) e executamos um AND bit a bit com 7. A análise é interrompida no primeiro caractere inválido, levando a:JavaScript (Node.js) ,
233 231227 bytesGuardado 2 bytes graças a @Shaggy
Experimente online!
Quão?
O terceiro caractere de cada verso de entrada pode ser usado como um identificador exclusivo. Tomando seu módulo ASCII 9, obtemos:
Os versos de saída são codificados com os seguintes modelos:
Onde cada dígito é substituído por uma string de acordo com a seguinte tabela:
Onde a expressão regular
/ w.*\n/s
extrai esta parte comum da entrada:Finalmente, adicionamos os últimos 11 caracteres da entrada, o que é
" came back."
.fonte
exec
quando a página recarregou. Grandes mentes ...!Python 3 ,
267263254bytes4 bytes salvos graças a @ovs
Experimente online!
Funciona substituindo as partes relevantes pelas respectivas partes do próximo versículo.
Após a pré-inicialização,
T
é['8', '9', 'and all of the little ducks', 'One little duck', 'but none of the little ducks', 'Two little ducks', 'but only one little duck', 'Three little ducks', 'but only two little ducks', 'Four little ducks', 'but only three little ducks', 'Five little ducks', 'but only four little ducks', 'Mother duck herself']
.Python alternativo 2 , 252 bytes
por @ovs
Experimente online!
fonte
for a in zip(T,T[-2:]+T):s=s.replace(*a)
para 264 bytes.lambda s:reduce(lambda s,a:s.replace(*a),zip(T,T[-2:]+T),s)
para 262 bytes no Python 2.T[2:]
vez deT[-2:]
QuadR ,
257242 bytes-14 graças a Black Owl Kai, -1 graças a Kevin Cruijssen
Experimente online!
fonte
Java 10, 347 bytes
Experimente online.
Explicação:
fonte
T-SQL,
407 390 388382 bytesVARCHAR(MAX)
Depois de alguns
REPLACE
s de economia de bytes , executa o seguinte como SQL dinâmico:Usa uma
CASE
instrução eSTUFF
comandos para inserir / substituir caracteres nas posições listadas.EDITAS :
LEFT
vez deSUBSTRING
e eliminando um espaçoCHAR
e movendo uma letra extra para a segundaREPLACE
(obrigado, @CDC!)Aqui está minha primeira versão, usando um método diferente (pós-substituição, formatado):
STRING_SPLIT
ePARSENAME
são usados para quebrar uma string em linhas e colunas através de-
e.
separadores.A primeira coluna é um caractere chave que corresponde à 3ª letra do verso de entrada (obrigado pela idéia, @ Night2). O segundo e o terceiro são as substituições sendo executadas para esse versículo.
fonte
Python 2 , 1034 bytes
Este é o meu código! Emprega um dicionário simples. Depois de executar este código, você pode inserir qualquer verso e ele exibirá o próximo verso.
PS: Sou novo neste canal e este é o meu primeiro post. Eu realmente gostei desse desafio, então decidi experimentá-lo. Por favor, sinta-se livre para me corrigir.
fonte
x
oua
) 2) Python é bastante permissivo com espaço em branco, então eu tentaria remover alguns de seus espaços em branco também. Por exemplo, você não precisa de espaços ao redor=
. Por fim, temos uma página para jogar golfe em python, que você pode visitar para aprimorar seu jogo.sys
usandoraw_input()
, por exemplo , encurtando a tecla do dicionário etc. Você definitivamente deve remover as seções repetidas da música e adicioná-las separadamentePHP (7.4),
253247 bytes-6 bytes, aprimorando como a matriz de substituições é criada com mais ajuda de "Descompactando matrizes internas".
Experimente online!
Isso cria uma matriz de todas as substituições possíveis (12 usadas + 2 não utilizadas) em um
key=>value
formato. Exemplo:['Mother duck herself' => 'Five little ducks', etc...]
e depois substitui aqueles que usam strtr .A única coisa interessante é o meu primeiro uso de "Desempacotando dentro de matrizes" que é um novo recurso do PHP 7.4.
PHP , 264 bytes
Experimente online!
Eu armazenei palavras diferentes de cada versículo em uma matriz. Acho que verso a entrada está usando o terceiro caractere da entrada, pois é único (
vuroet
). Então, simplesmente substituo palavras diferentes desse versículo por palavras diferentes do próximo verso.fonte
Limpo , 352 bytes
Experimente online!
fonte
C # (compilador interativo do Visual C #) , 262 bytes
Experimente online!
fonte
PowerShell ,
356343340336 bytesExperimente online .
Versão mais legível:
fonte
PowerShell ,
265263255251246 bytesExperimente online!
Usei a força bruta para encontrar a expressão
+"$args"[2]*37%724%7
.Obrigado @Arnauld pela
3rd char
.fonte
Japt v2.0a0, 143 bytes
Tentei codificar um único verso com substituições, mas, no final, a solução da solução de Arnauld acabou sendo mais curta. Tenha outra idéia que, esperançosamente, funcione mais curto novamente, mas não sei quando vou tentar.
Experimente - inclui todos os versículos
fonte
Bash ,
373355 bytesNada muito louco aqui. Uma redução fácil de poucos bytes seria substituir as variáveis de dois caracteres (a1, a2, a3, e1..e6) pelas de um caractere.
Experimente online!
Experimente online!fonte
05AB1E , 134 bytes
Experimente online!
Desde que eu sou relativamente novo em 05AB1E, isso talvez possa ser muito praticado
fonte
Perl 6 , 247 bytes
Experimente online!
Definitivamente jogável, especialmente os últimos 5 elementos da lista no formulário
"num $l num-1"
ou a regex inicial que corresponde às partes corretas da entrada antiga.fonte
Carvão , 156 bytes
Experimente online! Link é a versão detalhada do código. Explicação:
Veja o terceiro caractere da primeira linha para descobrir qual versículo queremos.
Saída da primeira parte da primeira linha pela indexação na lista de strings
Five
,Four
,Three
,Two
,One
,Mother duck herself
. Em seguida, imprimalittle duck
e,s
conforme apropriado, seguido pelos últimos 18 caracteres da linha de entrada (que são sempre os mesmos em cada verso).As duas linhas do meio são sempre as mesmas em cada verso.
Para a última linha, é mais golfista incluir
little ducks
na lista de alternativas por algum motivo, mas os últimos 11 caracteres ainda são copiados da entrada.fonte
tinta , 353 bytes
Experimente online!
Primeiro, usos subseqüência verificações para descobrir o verso em que estamos - que é graças bastante fáceis para a capitalização dos números no início -
F
,T
eO
não ocorrem em todos os outros lugares, e você pode distinguir o segundo eo quarto verso de o primeiro e o terceiro também verificandoFi
eTh
respectivamente.Em seguida, fazemos o que a tinta faz melhor e imprimimos texto sem formatação com condicionais. Tentei usar as instruções do switch no início, mas, embora parecesse melhor, na verdade acabou por mais tempo.
Você pensaria que os
Quack
s seriam um bom lugar para usar variáveis, com uma sequência sendo repetida várias vezes, mas as variáveis vêm com sobrecarga suficiente para que, de todas as maneiras que eu tentei, o código seja mais longo. Talvez seja um sinal de que não devo jogar golfe com tinta.fonte