Pato, pato, se fue!


40

Aquí está la canción (bastante aterradora) de los cinco patitos (no es larga):

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.

Su tarea no es emitir esta canción. Debe tomar un verso y sacar el siguiente verso (el siguiente verso del último verso es el primer verso).

Reglas

  • No hay lagunas estándar, por favor.
  • La entrada / salida se tomará a través de nuestros métodos de entrada / salida estándar.
  • Se debe emitir el verso exacto , y no debe haber diferencias en comparación con la letra de la canción. La entrada no será diferente cuando se compara con la letra de la canción también.

Ejemplos

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
Recuerdo que las palabras para esto eran ligeramente diferentes cuando era joven, hace muchas lunas. ¡Pero también recuerdo estar traumatizado por eso! ¿Dónde estaban esos patitos desaparecidos durante todos esos días? ¿Por qué nadie los estaba buscando? ¿Y qué clase de madre irresponsable logra perder tantos hijos y sigue dejando que el resto juegue? ¡El horror!
Shaggy

8
Posible duplicado . Es broma :)
Noche2

77
Me acabas de petrificar.
A̲̲

2
La letra de esa canción me hizo pasar por una montaña rusa de emociones.
Num Lock

3
¿Alguna razón por la cual las mayúsculas en "Mother duck" y "Mother Duck" son diferentes en los 2 lugares que se usan en el último verso?
Relájate el

Respuestas:


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âó╪¡

Ejecutar y depurarlo

Todos los versos como casos de prueba


1
Cuando lo ejecutas con "Un patito", responde "patito y el patito de los patitos volvió". en la ultima linea.
Dorian

1
El error se ha solucionado sin costo en tamaño. En realidad, se trataba de un costo de 2 bytes y de un ahorro de 2 bytes en otros lugares, aunque los bytes son un poco difíciles de medir aquí, ya que los cambios no están alineados exactamente en bytes dentro de los literales de cadena comprimidos, o incluso en el programa final.
recursivo el

19

JavaScript (ES9), 227 bytes

Esto es similar a la versión de Nodo a continuación, pero utiliza una fórmula basada en parseInt()lugar de Buffer()identificar el verso de entrada.

Esto es ES2018 (también conocido como ES9) porque estamos usando una expresión regular con la /sbandera ( 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)

Pruébalo en línea!

¿Cómo?

En esta versión, analizamos todo el verso de entrada como base 30 ( 0a t) y realizamos un bit Y con 7. El análisis se detiene en el primer carácter no válido, lo que lleva 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 gracias 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)

Pruébalo en línea!

¿Cómo?

El tercer carácter de cada verso de entrada se puede usar como un identificador único. Al tomar su código ASCII módulo 9, obtenemos:

 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

Los versos de salida están codificados con las siguientes plantillas:

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

Donde cada dígito se reemplaza con una cadena de acuerdo con la siguiente tabla:

 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 '

Donde la expresión regular / w.*\n/sextrae esta parte común de la entrada:

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

Finalmente agregamos los últimos 11 caracteres de la entrada, que es " came back.".



1
@Shaggy Bien hecho. ¡Gracias!
Arnauld

2
Estaba publicando otro comentario para sugerir execcuándo se volvió a cargar la página. Grandes mentes ... !
Shaggy

11

Python 3 , 267 263 254 bytes

4 bytes guardados gracias 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(':')

Pruébalo en línea!

Funciona reemplazando las partes relevantes por las partes respectivas del siguiente verso.

Después de la preinicialización, Tes ['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(':')

Pruébalo en línea!


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

O lambda s:reduce(lambda s,a:s.replace(*a),zip(T,T[-2:]+T),s)de 262 bytes en Python 2.
OvS

@ovs Gracias, llegué a 263 reordenando algunas cosas y usando en T[2:]lugar 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;}

Pruébalo en línea.

Explicación:

[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(@)

yoVARCHAR(MAX)v

Después de un par de bytes que guardan bytes REPLACE, ejecuta lo siguiente 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

Utiliza una CASEinstrucción y STUFFcomandos para insertar / sobrescribir caracteres en las posiciones enumeradas.

EDICIONES :

  1. Reemplazar original (abajo) con una estrategia completamente diferente
  2. Ahorró dos bytes cambiando a en LEFTlugar de SUBSTRINGy eliminando un espacio
  3. Se guardaron 6 bytes cambiando la variable CHARy moviendo una letra adicional a la segunda REPLACE(¡gracias, @CDC!)

Aquí está mi primera versión, usando un método diferente (post-reemplazo, formateado):

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_SPLITy PARSENAMEse utilizan para romper una cadena en filas y columnas vía -y .separadores.

La primera columna es un personaje clave que se compara con la tercera letra del verso de entrada (gracias por la idea, @ Night2). El segundo y el tercero son los reemplazos que se realizan para ese versículo.


Primera solución, si usa "CHAR (700)" en lugar de "VARCHAR (MAX)" puede guardar 3 bytes. También en su "patito", en su lugar puede hacer "patito" y eliminar el e antes del # en cada reemplazo para obtener otro 3.
CDC

Por cierto, una solución muy divertida. Usé formato de mensaje para acercarme mucho a ti, pero no del todo.
CDC

Buenas sugerencias, @CDC, gracias!
BradC

6

Python 2 , 1034 bytes

Este es mi código! Emplea un diccionario simple. Después de ejecutar este código, puede ingresar cualquier verso y generará el siguiente verso.

PD: Soy nuevo en este canal y esta es mi primera publicación. Realmente me gustó este desafío, así que decidí probarlo. Por favor, siéntase libre de corregirme.

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
Bienvenido al sitio! Por lo general, contaríamos el diccionario como parte de la fuente. Parte del desafío sería tratar de hacer esto lo más pequeño posible. También hay algunas maneras de acortar esto. 1) Dado que no obtiene ningún punto por ser legible, puede usar nombres de variables de un solo carácter (por ejemplo, xo a) 2) Python es bastante permisivo con espacios en blanco, por lo que trataría de eliminar algunos de sus espacios en blanco también. Por ejemplo, no necesitas espacios alrededor =. Por último, tenemos una página para jugar golf en Python que puedes visitar para mejorar tu juego.
Wheat Wizard

wow @ SriotchilismO'Zaic! eso es útil ... gracias! :)
Prachiti Prakash Prabhu

1
Puede jugar golf fácilmente eliminando espacios en blanco y variables innecesarios, evitando importar sys usando raw_input(), por ejemplo , acortando la clave del diccionario, etc. Definitivamente, debe sacar las secciones repetidas de la canción y agregarlas por separado
Jo King

@JoKing, como mencioné, esta es mi primera publicación y no pensé mucho en esto. Solo quería intentarlo, pero ahora tengo la idea. Mi próxima publicación será mucho mejor y más corta que esta, todo gracias a ustedes ... ¡me ayudaron! :)
Prachiti Prakash Prabhu

6

PHP (7.4), 253 247 bytes

-6 bytes mejorando la forma en que se construye la matriz de reemplazos con más ayuda de "Desempaquetar dentro de las matrices".

<?=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]]));

Pruébalo en línea!

Esto crea una matriz de cada posible reemplazo (12 usados ​​+ 2 sin usar) en un key=>valueformato. Ejemplo: ['Mother duck herself' => 'Five little ducks', etc...]y luego simplemente reemplaza los que usan strtr .

Lo único interesante es mi primer uso de "Desempaquetar dentro de arreglos", que es una nueva característica en 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);

Pruébalo en línea!

He almacenado diferentes palabras de cada verso en una matriz. Encuentro qué verso la entrada está usando el tercer carácter de la entrada, ya que es única ( vuroet). Luego simplemente reemplazo las diferentes palabras de ese versículo con diferentes palabras del siguiente versículo.


5

Limpiar , 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

Pruébalo en línea!



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

Pruébalo en línea .

Versión más legible:

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

Pruébalo en línea!

Usé la fuerza bruta para encontrar la expresión +"$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

Gracias @Arnauld por el 3rd char.


2

Japt v2.0a0, 143 bytes

Intenté codificar un solo verso con reemplazos pero, al final, adaptar la solución de Arnauld terminó siendo más corto. Tengo otra idea que, con suerte, podría funcionar de nuevo, pero no sé cuándo voy a intentarlo.

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 § `]

Pruébalo : incluye todos los versos


2

Bash , 373 bytes

Nada demasiado loco aquí. Una reducción fácil de pocos bytes sería reemplazar las variables de dos caracteres (a1, a2, a3, e1..e6) con las de un solo carácter.

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

Pruébalo en línea!

Pruébalo en línea!


2

05AB1E , 134 bytes

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

Pruébalo en línea!

Como soy relativamente nuevo en 05AB1E, esto puede ser mucho golf

                ### 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)]}

Pruébalo en línea!

Definitivamente golfable, especialmente los últimos 5 elementos de la lista en el formulario "num $l num-1", o la expresión regular inicial que coincide con las partes correctas de la entrada anterior.


1

Carbón , 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§-υ”¶δ✂ε±¹¹

Pruébalo en línea! El enlace es a la versión detallada del código. Explicación:

≔⌕tvuroe§θ²δ

Mire el tercer carácter de la primera línea para determinar qué versículo queremos.

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

Salida de la primera parte de la primera línea de la indexación en la lista de cadenas Five, Four, Three, Two, One, Mother duck herself. Luego imprima little ducky ssegún corresponda, seguido de los últimos 18 caracteres de la línea de entrada (que siempre son los mismos en cada verso).

⸿η⸿ζ⸿

Las dos líneas del medio son siempre las mismas en cada verso.

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

Para la última línea resulta más golfista incluir little ducksen la lista de alternativas por alguna razón, pero los últimos 11 caracteres aún se copian de la 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.

Pruébalo en línea!

Primero, usa controles de subcadena para descubrir en qué verso estamos, eso es bastante fácil gracias a las mayúsculas de los números al principio F, Ty Ono ocurre en ningún otro lugar, y puede distinguir el segundo y cuarto verso de el primero y el tercero al verificar FiyTh respectivamente.

Luego, hacemos lo que mejor hace la tinta e imprimimos texto sin formato con puntos condicionales. Al principio intenté usar sentencias de cambio, pero si bien se veía mejor, en realidad terminó por más tiempo.
Uno pensaría que el Quacks sería un buen lugar para usar variables, ya que una cadena se repite un montón, pero las variables vienen con suficiente sobrecarga que cada forma que intenté hacer hizo que el código fuera más largo. Tal vez sea una señal de que no se supone que debo jugar al golf con tinta.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.