Pato, pato, se foi!


40

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.

22
Lembro-me de que as palavras eram ligeiramente diferentes quando eu era jovem, muitas luas atrás. Mas também me lembro de estar traumatizado por isso! Onde estavam aqueles patinhos desaparecidos por todos aqueles dias ?! Por que ninguém estava procurando por eles ?! E que tipo de mãe irresponsável consegue perder tantos filhos e continua deixando o resto brincar? O horror!
Shaggy


7
Você acabou de me petrificar.
A

2
Essa letra da música me fez passar por uma montanha-russa de emoções.
Num Lock

3
Por alguma razão a capitalização em "Mãe patinho" e "Mãe patinho" é diferente nos 2 lugares em que é usada no último verso?
Chill

Respostas:


3

Stax , 115 111 bytes

τ*^&k─Zè0µ9┬$█◘çl╟☼:Drσ59ò╠▄┴╢Q♂╔¡ô╜Oa╣▀yèA÷╨%^♀█Ö+╡◄ì=∙%╧o▌Θ<▲Çα¿╗√;1°┼╤V◘ú┐♥▒ÇM☼b╩░o]YaL4░ƒ%(Æ♫Q0æÆä⌂¡╘○Eâó╪¡

Execute e depure

Todos os versos como casos de teste


1
Quando você o executa com "Um patinho", ele responde "O patinho voltou e os patinhos voltaram". na última linha.
Dorian

1
O bug foi corrigido sem custo no tamanho. Na verdade, tratava-se de um custo de 2 bytes e compensando economias de 2 bytes em outros lugares, embora os bytes sejam meio difíceis de medir aqui, pois as alterações não são exatamente alinhadas por bytes dentro de literais de string compactados, ou mesmo no programa final.
recursivo em

19

JavaScript (ES9), 227 bytes

É semelhante à versão do Nó abaixo, mas usa uma fórmula baseada em parseInt()vez de Buffer()identificar o verso de entrada.

Este é o ES2018 (também conhecido como ES9) porque estamos usando uma expressão regular com a /sflag ( dotAll ).

s=>'Mother duck herself1and all23,,Three4two3,Five4four3,Four4three3,One01but none23,Two4one0'.split`,`[parseInt(s,30)&7].replace(/\d/g,n=>[x=' little duck',y=/ w.*\n/s.exec(s),' of the',x+='s',x+y+'but only '][n])+s.slice(-11)

Experimente online!

Quão?

Nesta versão, analisamos o verso inteiro da entrada como base 30 ( 0para t) e executamos um AND bit a bit com 7. A análise é interrompida no primeiro caractere inválido, levando a:

 verse | valid part | base 30 -> decimal | AND 7
-------+------------+--------------------+-------
   0   |  'fi'      |            468     |   4
   1   |  'fo'      |            474     |   2
   2   |  'three'   |       23973734     |   6
   3   |  't'       |             29     |   5
   4   |  'one'     |          22304     |   0
   5   |  'mother'  |      554838747     |   3

JavaScript (Node.js) ,  233 231  227 bytes

Guardado 2 bytes graças a @Shaggy

s=>'Three4two3,Four4three3,Mother duck herself1and all23,One01but none23,,,Two4one0,,Five4four3'.split`,`[Buffer(s)[2]%9].replace(/\d/g,n=>[x=' little duck',y=/ w.*\n/s.exec(s),' of the',x+='s',x+y+'but only '][n])+s.slice(-11)

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:

 verse | 3rd char. | ASCII code | MOD 9
-------+-----------+------------+-------
   0   |    'v'    |     118    |   1
   1   |    'u'    |     117    |   0
   2   |    'r'    |     114    |   6
   3   |    'o'    |     111    |   3
   4   |    'e'    |     101    |   2
   5   |    't'    |     116    |   8

Os versos de saída são codificados com os seguintes modelos:

 verse | template
-------+---------------------------------
   0   | 'Five4four3'
   1   | 'Four4three3'
   2   | 'Three4two3'
   3   | 'Two4one0'
   4   | 'One01but none23'
   5   | 'Mother duck herself1and all23'

Onde cada dígito é substituído por uma string de acordo com a seguinte tabela:

 digit | replaced with
-------+---------------------------------------------------
   0   | ' little duck'
   1   | / w.*\n/s.exec(s)
   2   | ' of the'
   3   | ' little ducks'
   4   | ' little ducks' + / w.*\n/s.exec(s) + 'but only '

Onde a expressão regular / w.*\n/sextrai esta parte comum da entrada:

  went out one day,[LF]
 over the hills and up away.[LF]
 Mother Duck said, "Quack Quack Quack Quack",[LF]

Finalmente, adicionamos os últimos 11 caracteres da entrada, o que é " came back.".



1
@ Shaggy Muito bem feito. Obrigado!
Arnauld

2
Estava apenas postando outro comentário para sugerir execquando a página recarregou. Grandes mentes ...!
Shaggy

11

Python 3 , 267263254 bytes

4 bytes salvos graças a @ovs

def f(s):
 for a in zip(T[2:]+T,T):s=s.replace(*a)
 return s
T="8:9:and allHO1BnoneHT2No1T3Nt2F4Nt3FiveINf4MotherD herself"
for r in "H of theI,4ourI,3hreeI,2woI,1neL:,ILs:,L littleD,D duck,NBonly ,Bbut ".split(','):T=T.replace(r[0],r[1:])
T=T.split(':')

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

lambda s:reduce(lambda s,a:s.replace(*a),zip(T[2:]+T,T),s)
T="8:9:and allHO1BnoneHT2No1T3Nt2F4Nt3FiveINf4MotherD herself"
for r in "H of theI,4ourI,3hreeI,2woI,1neL:,ILs:,L littleD,D duck,NBonly ,Bbut ".split(','):T=T.replace(r[0],r[1:])
T=T.split(':')

Experimente online!


for a in zip(T,T[-2:]+T):s=s.replace(*a)para 264 bytes.
ovs 24/09

Ou lambda s:reduce(lambda s,a:s.replace(*a),zip(T,T[-2:]+T),s)para 262 bytes no Python 2.
ovs 24/09

@ovs Obrigado, cheguei a 263 com a remodelação de algumas coisas e usando em T[2:]vez deT[-2:]
Black Owl Kai


7

Java 10, 347 bytes

s->{String L=" little duck",M="Mother duck herself";int i=9;for(var t:("ive;Four;hree;Two"+L+"s;One"+L+";four;two"+L+"s;only one"+L+";but none;and all of the;"+M).split(";"))s=s.replace(t,++i+"");for(var t:("Five"+L+"s;but only four;and all;none of the"+L+"s;one"+L+";three;"+M+";One"+L+";wo;Three;our").split(";"))s=s.replace(i--+"",t);return s;}

Experimente online.

Explicação:

[10,21]

s->{                     // Method with String as both parameter and return-type
  String L=" little duck",M="Mother duck herself";
                         //  Two temp strings to save bytes
  int i=9;               //  Temp replacement integer, starting at 9
  for(var t:("ive;Four;hree;Two"+L+"s;One"+L+";four;two"+L+"s;only one"+L+";but none;and all of the;"+M).split(";"))
                         //  Loop over the parts to replace:
    s=s.replace(t,       //   Replace the part,
                ++i+""); //   with the integer pre-incremented by 1
  for(var t:("Five"+L+"s;but only four;and all;none of the"+L+"s;one"+L+";three;"+M+";One"+L+";wo;Three;our").split(";"))
                         //  Then loop over the parts to replace with in reverse:
    s=s.replace(i--+"",  //   Replace the (post-decrementing) integer,
    t);                  //   with the replacement-part
  return s;}             //  And then return the modified String as result

7

T-SQL, 407 390 388 382 bytes

DECLARE @ CHAR(999)=REPLACE(REPLACE('SELECT CASE LEFT(v,2)WHEN''Fi74,''Four''),122,4,''three'')WHEN''Fo74,''Three''),123,5,''two'')WHEN''Th75,''Two''),121,16,''on#'')WHEN''Tw716,''On#''),115,20,''none of th#s'')WHEN''On715,''Mother duck herself''),115,8,''and all'')WHEN''Mo719,''Fiv#s''),113,14,''but only four'')END FROM i',7,'''THEN STUFF(STUFF(v,1,'),'#','e little duck')EXEC(@)

EuVARCHAR(MAX)v

Depois de alguns REPLACEs de economia de bytes , executa o seguinte como SQL dinâmico:

SELECT CASE LEFT(v,2)
       WHEN'Fi'THEN STUFF(STUFF(v,1,4,'Four'),122,4,'three')
       WHEN'Fo'THEN STUFF(STUFF(v,1,4,'Three'),123,5,'two')
       WHEN'Th'THEN STUFF(STUFF(v,1,5,'Two'),121,16,'one little duck')
       WHEN'Tw'THEN STUFF(STUFF(v,1,16,'One little duck'),115,20,'none of the little ducks')
       WHEN'On'THEN STUFF(STUFF(v,1,15,'Mother duck herself'),115,8,'and all')
       WHEN'Mo'THEN STUFF(STUFF(v,1,19,'Five little ducks'),113,14,'but only four')END
FROM i

Usa uma CASEinstrução e STUFFcomandos para inserir / substituir caracteres nas posições listadas.

EDITAS :

  1. Substitua o original (abaixo) por uma estratégia totalmente diferente
  2. Salva dois bytes alternando para em LEFTvez de SUBSTRINGe eliminando um espaço
  3. Economizou 6 bytes alterando a variável para CHARe movendo uma letra extra para a segunda REPLACE(obrigado, @CDC!)

Aqui está minha primeira versão, usando um método diferente (pós-substituição, formatado):

DECLARE @ VARCHAR(MAX)
SELECT @=v FROM i
SELECT @=REPLACE(@,PARSENAME(value,2),PARSENAME(value,1))
FROM string_split('e.but none.and all
                  -e.One little duck.Mother duck herself
                  -o.only one little duck.none of the little ducks
                  -o.Two little ducks.One little duck
                  -r.two little ducks.one little duck
                  -r.Three.Two
                  -u.three.two
                  -u.Four.Three
                  -v.four.three
                  -v.Five.Four
                  -t.and all of the.but only four
                  -t.Mother duck herself.Five little ducks','-')
WHERE LEFT(value,1)=SUBSTRING(@,3,1)
PRINT @

STRING_SPLITe PARSENAMEsã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.


Primeira solução, se você usar "CHAR (700)" em vez de "VARCHAR (MAX)", poderá salvar 3 bytes. Também no seu "patinho", você pode fazer "e patinho" e remover o e antes de # em cada substituição para obter outro 3.
CDC

BTW, solução realmente divertida. Usei formatmessage para me aproximar muito de você, mas não exatamente.
CDC

Boas sugestões, @CDC, obrigado!
BradC 27/09

6

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.

import sys
i=sys.stdin.readlines()
s={"Mother":"""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.""",
"Five":"""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.""",
"Four":"""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.""",
"Three":"""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.""",
"Two":"""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.""",
"One":"""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."""}
print s[i[0].split(" ")[0]]

11
Bem vindo ao site! Normalmente contamos o dicionário como parte da fonte. Parte do desafio seria tentar torná-lo o menor possível. Existem também algumas maneiras de diminuir isso. 1) Como você não obtém nenhum ponto por ser legível, pode usar nomes de variáveis ​​de caractere único (por exemplo, xou a) 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.
Wheat Wizard

wow @ SriotchilismO'Zaic! isso é útil .. obrigado! :)
Prachiti Prakash Prabhu 24/09

1
Você pode facilmente jogar golfe removendo espaços em branco e variáveis ​​desnecessários, evitando importar sysusando raw_input(), por exemplo , encurtando a tecla do dicionário etc. Você definitivamente deve remover as seções repetidas da música e adicioná-las separadamente
Jo King

@JoKing, como mencionei, este é o meu primeiro post e não pensei muito nisso. Só queria tentar, mas agora entendi a idéia. Meu próximo post será muito melhor e mais curto que isso - tudo graças a vocês ... me ajudando! :)
Prachiti Prakash Prabhu

6

PHP (7.4), 253 247 bytes

-6 bytes, aprimorando como a matriz de substituições é criada com mais ajuda de "Descompactando matrizes internas".

<?=strtr($argv[1],array_combine([0,1,...$a=[Five.$l=($o=" little duck").s,($b="but only ").four.$l,Four.$l,$b.three.$l,Three.$l,$b.two.$l,Two.$l,$b.one.$o,One.$o,"but none of the$l","Mother duck herself","and all of the$l"]],[...$a,$a[0],$a[1]]));

Experimente online!

Isso cria uma matriz de todas as substituições possíveis (12 usadas + 2 não utilizadas) em um key=>valueformato. 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

<?=str_replace(($a=[[Five.$l=($o=" little duck").s,($b="but only ").four.$l],[Four.$l,$b.three.$l],[Three.$l,$b.two.$l],[Two.$l,$b.one.$o],[One.$o,"but none of the$l"],["Mother duck herself","and all of the$l"]])[$i=strpos(vuroet,($v=$argv[1])[2])],$a[++$i%6],$v);

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.


5

Limpo , 352 bytes

import StdEnv,Text
$n={#"Five"+e+"four"+d,"Four"+e+"three"+d,"Three"+e+"two"+d,"Two"+e+"one"+a,"One"+a+b+"but none"+f,"Mother duck herself"+b+"and all"+f}.[indexOf{n.[2]}"tvuroe"]+" came back."
a=" little duck"
b=" went out one day,\nover the hills and up away.\nMother Duck said, \"Quack Quack Quack Quack\",\n"
d=a+"s"
e=d+b+"but only "
f=" of the"+d

Experimente online!



3

PowerShell , 356 343 340 336 bytes

param($p)$l,$M=' little duck','Mother duck herself'
("ive!our;four!three;hree!wo;Four!Three;two!one;s c! c;Two!One;s w! w;only one!none of the;k c!ks c;One$l!$M;but none!and all;$M!Five$l`s;and all of the!but only four"-split';')[$(switch -r($p){^Fi{0,1}^Fo{2,3}^Th{2,4,5}^Tw{6..9}^O{10,11}^M{12,13}})]|%{$p=$p-creplace($_-split'!')}
$p

Experimente online .

Versão mais legível:

param($p)
$l, $M = ' little duck', 'Mother duck herself'
$replacements = @"
ive!our
four!three
hree!wo
Four!Three
two!one
s c! c
Two!One
s w! w
only one!none of the
k c!ks c
One$l!$M
but none!and all
$M!Five$l`s
and all of the!but only four
"@ -split '\n'
$i = switch -regex ($p) { ^Fi { 0, 1 }
                          ^Fo { 2, 3 }
                          ^Th { 2, 4, 5 }
                          ^Tw { 6..9 }
                          ^O  { 10, 11 }
                          ^M  { 12, 13 } }
$replacements[$i] | % { $p = $p -creplace ( $_ -split '!' ) }
$p

3

PowerShell , 265 263 255 251 246 bytes

$d='Five1four2s,Four1three2s,Three1two2s,Two1one2,One23but none52s,Mother duck herself3and all52s'-split','
'2s34',' little duck',-join($args-split'(\s)')[5..39],'but only ',' of the'|%{$d=$d-replace++$i,$_}
$d[+"$args"[2]*37%724%7]+' came back.'

Experimente online!

Usei a força bruta para encontrar a expressão +"$args"[2]*37%724%7.

 verse | 3rd char. | ASCII code | *37%724%7
-------+-----------+------------+-----------
   0   |    'v'    |     118    |   1
   1   |    'u'    |     117    |   2
   2   |    'r'    |     114    |   3
   3   |    'o'    |     111    |   4
   4   |    'e'    |     101    |   5
   5   |    't'    |     116    |   0

Obrigado @Arnauld pela 3rd char.


2

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.

tBn)i`Fr4È(e3
Two4e0
MÇ@r Ýõ Êelf1d a¥23
O01¿t Í
23
TËG4two3
Five4fr3`·g`v`b¢Î)r\dÈ°g[V=` Ò¤ Ýõ`W=Uf/ w.*\n/s `  e`V±'sV+W+`¿t § `]

Experimente - inclui todos os versículos


2

Bash , 373 355 bytes

Nada 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.

read a{1..3} b
read c
read d
read e{1..6}
W="$e1 $e2"
X="${e3^} $a2 $a3"
Y="$e5 $e6"
Z="$e4 $Y"
p=$X
case $a1 in M*)p="Five ${Y::12}";s="but only four $Y";;O*)p="${d::11} herself";s="and all of $Z";;Tw*)p=${X/s};s="$e1 none of the $a2 ducks $e6";;Th*)s="$W one $e4 duck $e6";;Fo*)s="$W two $Z";;Fi*)s="$W three $Z";;esac
echo $p $b;echo $c;echo $d;echo $s

Experimente online!

Experimente online!


2

05AB1E , 134 bytes

“€µ‚•„í†ìˆÈ“#’ „ê Ðœs’δJ樅î¥Ðœº¶s‚ìðδJD…€³€É δ쨦“€ƒ€Ÿ€‚€€““€³Šª€‚€€“‚’ „ê Ðœs ’δJ셋邃.δJU.•4Ôāl•|н2èk©è.ª?I„ 
ý#3.$17£ðý„ 
¶:,X®è?

Experimente online!

Desde que eu sou relativamente novo em 05AB1E, isso talvez possa ser muito praticado

                ### Preparation of the output strings ###
“€µ‚•„í†ìˆÈ“        push "one two three four five"
#                   split that by spaces
’ „ê Ðœs’           push " little ducks"
δJ                  join each number with " little ducks"
ć¨                  separate "one little ducks" and drop the "s"
…î¥Ðœº¶             push "mother duck herself"
s                   swap it with "one little duck"
‚ì                  prepend both strings to the list ["mother duck herself", "one little duck", "two little ducks" ... ]
ðδJ                 append a space to each list entry
D                   duplicate it
…€³€É               push "but only "
δì                  prepend "but only " to each list entry
¨¦                  drop the first and last list entry
“€ƒ€Ÿ€‚€€“          push "and all of the"
“€³Šª€‚€€“          push "but none of the"
‚                   push the two strings into a list
’ „ê Ðœs ’δJ        append " little ducks " to each
ì                   prepend it to the sentence list ["and all of the little ducks ", "but none of the little ducks ", "but only one little duck " ...]
…‹é‚ƒ.              push "came back."
δJ                  append that to each list entry
U                   save that list in X for later use

                ### Determine which verse has to be answered ###
.•4Ôāl•             push "eoruvt"
|н2è                get the third letter of the input
k                   get the index of that letter in "eoruvt". Now we know which verse we must return
©                   save that index in ® for later use

                ### Print the answer strings ###
è.ª?                print that index of the first sentence list (first three words of answer)
I„                  join the four input strings by <space><newline>
ý
#                   split that by spaces
3.$                 cut off the first three words
17£                 keep only the next 17 words
ðý                  join remaining words by spaces
„ 
¶:                  replace <space><newline> by only <newline>
,                   print that ("went out ... Quack\",") 
X®è?                print the last line of answer

1

Perl 6 , 247 bytes

{S:i/ne\sl.*?<(s//}o{m/..(.)(\S*)**3%\s(.**92).*(.**11)/;[(my$l=" little ducks")~$3 XR~"Mother duck herself$2and all of the","One{$l~=$2}but none of the","Five{$l~="but only "}four","Four{$l}three","Three{$l}two","Two{$l}one"]["eotvur".index($0)]}

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.


1

Carvão , 156 bytes

≔⌕tvuroe§θ²δ§⪪”↶0∨↘»≔xj➙⌈´βXPNLA‽⟦O⧴&▷V'¦³≧ψZρ⊞t”¶δF‹δ⁵”↶↧V4ⅉH‴G%”F‹δ⁴s⮌…⮌θ¹⁸⸿η⸿ζ⸿§⪪”}∧h⁴NQ≕Q^⪫ΦG✂q'ⅉMG./_⸿s⁵6P⁴″⊟±NNpOfBz↷Fι‖TM→⁻γ?k⁴ς!d⁵º'E,θ}x§-υ”¶δ✂ε±¹¹

Experimente online! Link é a versão detalhada do código. Explicação:

≔⌕tvuroe§θ²δ

Veja o terceiro caractere da primeira linha para descobrir qual versículo queremos.

§⪪”↶0∨↘»≔xj➙⌈´βXPNLA‽⟦O⧴&▷V'¦³≧ψZρ⊞t”¶δF‹δ⁵”↶↧V4ⅉH‴G%”F‹δ⁴s⮌…⮌θ¹⁸

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, imprima little ducke, sconforme 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.

§⪪”}∧h⁴NQ≕Q^⪫ΦG✂q'ⅉMG./_⸿s⁵6P⁴″⊟±NNpOfBz↷Fι‖TM→⁻γ?k⁴ς!d⁵º'E,θ}x§-υ”¶δ✂ε±¹¹

Para a última linha, é mais golfista incluir little ducksna lista de alternativas por algum motivo, mas os últimos 11 caracteres ainda são copiados da entrada.


1

tinta , 353 bytes

=d(v)
~temp n=(v?"Fi")+(v?"F")*4+(v?"Th")+(v?"T")*2+(v?"O")
{n-1:{n:{n-5:{n-4:{n-3:One|Two}|Three}|Four}|Five} little duck{n-2:s}|Mother duck herself} went out one day,
over the hills and up away,
Mother Duck said "Quack Quack Quack Quack",
{n-1:but {n-2:only {n:{n-5:{n-4:one|two}|three}|four}|none of the}|and all of the} little duck{n-3:s} came back.

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, Te Onão ocorrem em todos os outros lugares, e você pode distinguir o segundo eo quarto verso de o primeiro e o terceiro também verificando Fie Threspectivamente.

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 Quacks 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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.