Canard, canard, parti!

40

Voici la chanson (assez effrayante) de Cinq petits canards (elle n'est pas longue):

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.

Votre tâche n'est pas de sortir cette chanson. Vous devriez prendre un verset et sortir le prochain verset (le prochain verset du dernier verset est le premier verset).

Règles

  • Aucune lacune standard, s'il vous plaît.
  • Les entrées / sorties seront prises via nos méthodes d’entrée / sortie standard.
  • Le verset exact doit être sorti, et il ne devrait y avoir aucune différence par rapport aux paroles de la chanson. L'entrée ne sera pas différente si elle est comparée aux paroles de la chanson.

Exemples

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.

Attendu:

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.

Attendu:

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.
UNE
la source
22
Je me souviens que les mots à ce sujet étaient légèrement différents quand j'étais jeune, il y a beaucoup de lunes. Mais je me souviens aussi d'avoir été traumatisé par ça! Où étaient ces canetons manquants pendant tous ces jours?! Pourquoi personne ne les cherchait?! Et quelle sorte de mère irresponsable parvient à perdre autant d'enfants et continue à les laisser jouer?! L'horreur!
Shaggy le
8
Doublon possible . Je plaisante :)
Night2 le
7
Tu viens de me pétrifier.
A̲̲
2
Les paroles de cette chanson m'ont sûrement fait traverser des montagnes russes d'émotions.
Verrouillage numérique le
3
Quelle est la raison pour laquelle la capitalisation sur "Mère canard" et "Mère canard" est différente dans les 2 endroits où elle est utilisée dans le dernier verset?
Chill

Réponses:

3

Stax , 115 111 octets

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

Exécuter et déboguer

Tous les versets comme cas de test

récursif
la source
1
Quand vous le lancez avec "Un petit canard", il répond "petit canard, un petit canard des petits canards est revenu". dans la dernière ligne.
Dorian
1
Le bogue a été corrigé gratuitement. Il s'agissait en fait d'un coût de 2 octets et de compenser les économies de 2 octets réalisées ailleurs, bien que les octets soient difficiles à mesurer ici, car les modifications ne sont pas alignées exactement dans les littéraux de chaîne compressés, ni même dans le programme final.
récursif
19

JavaScript (ES9), 227 octets

Ceci est similaire à la version de nœud ci-dessous mais utilise une formule basée sur parseInt()au lieu d' Buffer()identifier le verset d'entrée.

Il s’agit de ES2018 (alias ES9) car nous utilisons une expression régulière avec l’ /sindicateur ( 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)

Essayez-le en ligne!

Comment?

Dans cette version, nous analysons l'intégralité du vers d'entrée en base 30 ( 0à t) et effectuons un ET au niveau des bits avec 7. L'analyse s'arrête sur le premier caractère non valide, ce qui conduit à:

 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 octets

2 octets sauvés grâce à @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)

Essayez-le en ligne!

Comment?

Le troisième caractère de chaque verset peut être utilisé comme identifiant unique. En prenant son code ASCII modulo 9, on obtient:

 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

Les versets en sortie sont codés avec les modèles suivants:

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

Où chaque chiffre est remplacé par une chaîne selon le tableau suivant:

 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 '

Où l'expression régulière / w.*\n/sextrait cette partie commune de l'entrée:

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

Nous ajoutons enfin les 11 derniers caractères de l’entrée, c’est-à-dire " came back.".

Arnauld
la source
231
Shaggy le
1
@Shaggy Bien fait. Merci!
Arnauld le
2
Vient de poster un autre commentaire à suggérer execlorsque la page rechargée. Grands esprits ... !
Shaggy le
11

Python 3 , 267 263 254 octets

4 octets sauvegardés grâce à @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(':')

Essayez-le en ligne!

Fonctionne en remplaçant les parties pertinentes par les parties respectives du verset suivant.

Après la préinitialisation, T est ['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'].

Alternative Python 2 , 252 octets

par @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(':')

Essayez-le en ligne!

Black Owl Kai
la source
for a in zip(T,T[-2:]+T):s=s.replace(*a)pour 264 octets.
ovs le
Ou lambda s:reduce(lambda s,a:s.replace(*a),zip(T,T[-2:]+T),s)pour 262 octets en Python 2.
OVS
@ovs Merci, je l'ai eu à 263 en réordonnant certaines choses et en utilisant à la T[2:]place deT[-2:]
Black Owl Kai
9

QuadR , 257 242 octets

-14 grâce à Black Owl Kai, -1 grâce à Kevin Cruijssen

ive
Four
hree
Two( little duck)s
One little( duck)
Mother( duck) herself
four
two( little duck)s
only on(e little duck)
but none
and all of the
our
Three
wo
One\1
Mother\1 herself
Five little\1s
three
one\1
none of th\1s
and all
but only four

Essayez-le en ligne!

Adam
la source
1
243 octets
Black Owl Kai
1
242 octets
Kevin Cruijssen le
7

Java 10, 347 octets

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;}

Essayez-le en ligne.

Explication:

Nous remplaçons d’abord toutes les pièces une à une par des nombres entiers dans la plage [dix,21], puis ces nombres entiers retournent à leurs remplacements. La raison en est que nous procédons en deux étapes, car nous remplacerions autrement les remplacements.

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
Kevin Cruijssen
la source
7

T-SQL, 407 390 388 382 octets

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

L'entrée se fait via une table pré-existante jeavec VARCHAR(MAX)champv, selon nos règles IO .

Après quelques octets REPLACE, exécutez les opérations suivantes en tant que SQL dynamique:

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

Utilise une CASEinstruction et des STUFFcommandes pour insérer / écraser des caractères aux positions répertoriées.

EDITS :

  1. Remplacez l'original (ci-dessous) par une stratégie totalement différente
  2. Sauvegardé deux octets en basculant sur au LEFTlieu deSUBSTRING et en éliminant un espace
  3. Sauvegardé 6 octets en changeant variable CHARet en déplaçant une lettre supplémentaire dans la seconde REPLACE(merci, @CDC!)

Voici ma première version, utilisant une méthode différente (post-remplacement, formatée):

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_SPLITet PARSENAMEsont utilisés pour diviser une chaîne en lignes et en colonnes via -et des .séparateurs.

La première colonne est un personnage clé qui est comparé à la 3ème lettre du verset d'entrée (merci pour l'idée, @ Night2). Les deuxième et troisième sont les remplacements effectués pour ce verset.

BradC
la source
Première solution, si vous utilisez "CHAR (700)" au lieu de "VARCHAR (MAX)", vous pouvez économiser 3 octets. Toujours dans votre "petit canard", vous pouvez à la place faire "e petit canard" et retirer le n ° avant chaque # pour obtenir un autre 3.
CDC
BTW, solution vraiment amusante. J'ai utilisé formatmessage pour me rapprocher de vous, mais pas tout à fait.
CDC
Bonnes suggestions, @CDC, merci!
BradC
6

Python 2 , 1034 octets

Ceci est mon code! Il utilise un dictionnaire simple. Après avoir exécuté ce code, vous pouvez entrer n’importe quel verset et le prochain verset en sortira.

PS: Je suis nouveau sur cette chaîne et ceci est mon premier post. J'ai vraiment aimé ce défi alors j'ai décidé de l'essayer. S'il vous plaît n'hésitez pas à me corriger.

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]]
Prachiti Prakash Prabhu
la source
11
Bienvenue sur le site! Habituellement, nous considérons le dictionnaire comme faisant partie de la source. Une partie du défi consisterait à essayer de réduire autant que possible ce problème. Il y a aussi plusieurs façons de réduire cela. 1) Puisque vous n'obtenez pas de points pour être lisible, vous pouvez utiliser des noms de variable à caractère unique (par exemple xou a) 2) Python est assez permissif avec les espaces blancs et j'essaierais donc de supprimer également certains de vos espaces blancs. Par exemple, vous n'avez pas besoin d'espaces =. Enfin, nous avons une page pour jouer au golf en python que vous pouvez visiter pour améliorer votre jeu.
Wheat Wizard le
wow @ SriotchilismO'Zaic! c'est utile..merci! :)
Prachiti Prakash Prabhu le
1
Vous pouvez facilement jouer cela en supprimant les espaces et les variables inutiles, en évitant d'importer, syspar exemple raw_input()en raccourcissant la clé du dictionnaire, etc. Vous devez absolument supprimer les sections répétées de la chanson et les ajouter séparément
Jo King
@JoKing, comme je l'ai mentionné, est mon tout premier message et je n'y ai pas beaucoup réfléchi. Je voulais juste essayer, mais je comprends maintenant l'idée. Mon prochain post va être beaucoup mieux et plus court que celui-ci - tout ça grâce à vous, aidez-moi, aidez-moi! :)
Prachiti Prakash Prabhu le
6

PHP (7.4), 253 247 octets

-6 octets en améliorant la manière dont le tableau de remplacements est construit avec davantage d’aide à partir de "Déballage à l’intérieur des tableaux".

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

Essayez-le en ligne!

Cela crée un tableau de tous les remplacements possibles (12 utilisés + 2 non utilisés) dans un key=>valueformat. Exemple: ['Mother duck herself' => 'Five little ducks', etc...]et remplace simplement ceux qui utilisent strtr .

La seule chose intéressante est ma toute première utilisation de "Unpacking inside arrays", une nouvelle fonctionnalité de PHP 7.4.


PHP , 264 octets

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

Essayez-le en ligne!

J'ai stocké différents mots de chaque verset dans un tableau. Je trouve quel verset l’entrée utilise le troisième caractère de l’entrée car il est unique ( vuroet). Ensuite, je remplace simplement différents mots de ce verset par des mots différents du prochain verset.

Nuit2
la source
5

Propre , 352 octets

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

Essayez-le en ligne!

Οurous
la source
5

C # (compilateur interactif Visual C #) , 262 octets

x=>$@"{l[g=x[2]*37%724%7]}{g-5:; little} duck{g-4: herself;s;\} went out one day,
{(x=x.Split('\n'))[1]}
{x[2]}
{g-5:and;but} {g-4:all;only;none} {(g>3?"of the":l[g+1].ToLower())} little duc{g%3:ks;;k} came back.";var l=" Four Three Two One Mother".Split();int g

Essayez-le en ligne!

Incarnation de l'ignorance
la source
3

PowerShell , 356 343 340 336 octets

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

Essayez-le en ligne .

Version plus lisible:

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
Andrei Odegov
la source
3

PowerShell , 265 263 255 251 246 octets

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

Essayez-le en ligne!

J'ai utilisé la force brute pour trouver l'expression +"$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

Merci @Arnauld pour le 3rd char.

mazzy
la source
2

Japt v2.0a0, 143 octets

J'ai essayé d'encoder un seul vers avec des remplacements, mais finalement, l'adaptation de la solution d'Arnauld a été plus courte. Ayez une autre idée qui, espérons-le, fonctionnera à nouveau plus rapidement, mais vous ne savez pas quand je pourrai l'essayer.

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

Essayez-le - comprend tous les versets

Hirsute
la source
2

Bash , 373 355 octets

Rien de trop fou ici. Une réduction facile de quelques octets consisterait à remplacer les variables à deux caractères (a1, a2, a3, e1..e6) par des variables à un caractère.

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

Essayez-le en ligne!

Essayez-le en ligne!

spuck
la source
2

05AB1E , 134 octets

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

Essayez-le en ligne!

Depuis que je suis relativement nouveau à 05AB1E, cela peut être beaucoup joué au 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
Dorian
la source
1

Perl 6 , 247 octets

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

Essayez-le en ligne!

Définitivement golfable, en particulier les 5 derniers éléments de la liste du formulaire "num $l num-1", ou la regex de départ qui correspond aux bonnes parties de l’ancienne entrée.

Jo King
la source
1

Charbon de bois , 156 octets

≔⌕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§-υ”¶δ✂ε±¹¹

Essayez-le en ligne! Le lien est vers la version verbeuse du code. Explication:

≔⌕tvuroe§θ²δ

Regardez le troisième caractère de la première ligne pour déterminer quel verset nous voulons.

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

Sortie de la première partie de la première ligne par indexation dans la liste de chaînes Five, Four, Three, Two, One, Mother duck herself. Imprimez ensuite little ducket, sle cas échéant, suivi des 18 derniers caractères de la ligne de saisie (qui sont toujours les mêmes sur chaque verset).

⸿η⸿ζ⸿

Les deux lignes du milieu sont toujours les mêmes sur chaque verset.

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

Pour la dernière ligne, il s'avère plus compliqué d'inclure little ducksla liste des alternatives pour une raison quelconque, mais les 11 derniers caractères sont toujours copiés à partir de l'entrée.

Neil
la source
1

encre , 353 octets

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

Essayez-le en ligne!

Tout d' abord, les utilisations contrôles de sous - chaînes comprendre ce verset que nous sommes - qui est assez facile grâce à la capitalisation des chiffres au début - F, Tet One se produit pas dans d'autres endroits, et vous pouvez distinguer les deuxième et quatrième verset le premier et le troisième en vérifiant égalementFi et Threspectivement.

Ensuite, nous faisons simplement ce que l’encre fait de mieux et imprimons du texte brut contenant des conditionnelles. Au début, j’ai essayé d’utiliser des instructions switch, mais cela a semblé plus agréable, mais cela a fini par être plus long.
Vous penseriez que Quacks serait un bon endroit pour utiliser des variables, avec une chaîne répétée, mais les variables sont suffisamment longues pour que le code soit plus long à chaque fois que j'ai essayé de le faire. Peut-être que c'est un signe que je ne suis pas supposé jouer au golf à l'encre.

Sara J
la source