Bebek, bebek, pergi!

40

Inilah lagu Lima bebek kecil (tidak terlalu menakutkan):

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.

Tugas Anda bukan untuk menghasilkan lagu ini. Anda harus mengambil satu ayat dan mengeluarkan ayat berikutnya (ayat berikutnya dari ayat terakhir adalah ayat pertama).

Aturan

  • Tolong, jangan ada celah standar.
  • Input / output akan diambil melalui metode input / output standar kami.
  • The tepat Ayat harus dikeluarkan, dan tidak boleh ada perbedaan bila dibandingkan dengan lirik lagu. Input tidak akan berbeda jika dibandingkan dengan lirik lagu juga.

Contohnya

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.

Diharapkan:

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.

Diharapkan:

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.
SEBUAH
sumber
22
Saya ingat kata-kata ini sedikit berbeda ketika saya masih muda, beberapa bulan yang lalu. Tapi saya juga ingat trauma dengan itu! Di mana bebek-bebek yang hilang itu selama ini ?! Kenapa tidak ada yang mencari mereka ?! Dan ibu macam apa yang tidak bertanggung jawab berhasil kehilangan begitu banyak anak dan terus membiarkan mereka yang lain bermain ?! Menyeramkan!
Shaggy
8
Kemungkinan duplikat . Just kidding :)
Night2
7
Anda baru saja membatu saya.
A̲̲
2
Lirik lagu itu benar-benar membuat saya melalui roller coaster emosi.
Num Lock
3
Adakah alasan penggunaan huruf kapital pada "Bebek Induk" dan "Induk Bebek" berbeda di 2 tempat yang digunakan dalam ayat terakhir?
Dinginkan

Jawaban:

3

Stax , 115 111 byte

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

Jalankan dan debug itu

Semua ayat sebagai kasus uji

rekursif
sumber
1
Ketika Anda menjalankannya dengan "Satu bebek kecil", ia menjawab "bebek kecil kecil dan bebek kecil akan kembali." di baris terakhir.
Dorian
1
Bug telah diperbaiki tanpa biaya ukuran. Itu sebenarnya tentang biaya 2-byte, dan dan mengimbangi penghematan 2-byte di tempat lain, meskipun byte agak sulit untuk diukur di sini, karena perubahannya tidak persis sejajar dengan byte string literal yang dikompresi, atau bahkan dalam program akhir.
Rekursif
19

JavaScript (ES9), 227 byte

Ini mirip dengan versi Node di bawah ini tetapi menggunakan rumus berdasarkan parseInt()bukan Buffer()untuk mengidentifikasi ayat input.

Ini adalah ES2018 (alias ES9) karena kami menggunakan ekspresi reguler dengan /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)

Cobalah online!

Bagaimana?

Dalam versi ini, kami mem-parsing seluruh ayat input sebagai basis 30 ( 0ke t) dan melakukan bitwise AND dengan 7. Penguraian berhenti pada karakter pertama yang tidak valid, yang mengarah ke:

 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 byte

Disimpan 2 byte berkat @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)

Cobalah online!

Bagaimana?

Karakter ketiga dari setiap ayat masukan dapat digunakan sebagai pengidentifikasi unik. Dengan mengambil kode ASCII modulo 9, kita mendapatkan:

 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

Ayat-ayat output dikodekan dengan template berikut:

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

Di mana setiap digit diganti dengan string sesuai dengan tabel berikut:

 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 '

Di mana ekspresi reguler / w.*\n/smengekstrak bagian umum ini dari input:

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

Kami akhirnya menambahkan 11 karakter terakhir dari input, yaitu " came back.".

Arnauld
sumber
231
Shaggy
1
@ Shaggy Bagus sekali. Terima kasih!
Arnauld
2
Baru saja memposting komentar lain untuk menyarankan execketika halaman dimuat ulang. Pikiran besar ...!
Shaggy
11

Python 3 , 267 263 254 byte

4 byte disimpan berkat @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(':')

Cobalah online!

Bekerja dengan mengganti bagian yang relevan dengan bagian masing-masing dari ayat berikutnya.

Setelah preinitialisation, Tadalah ['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'].

Alternatif Python 2 , 252 byte

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

Cobalah online!

Black Owl Kai
sumber
for a in zip(T,T[-2:]+T):s=s.replace(*a)untuk 264 byte.
Ovs
Atau lambda s:reduce(lambda s,a:s.replace(*a),zip(T,T[-2:]+T),s)untuk 262 byte dalam Python 2.
Ov
@ovs Terima kasih, saya mendapatkannya di 263 dengan mengubah nama beberapa hal dan menggunakan T[2:]bukannyaT[-2:]
Black Owl Kai
9

QuadR , 257 242 byte

-14 Terima kasih kepada Black Owl Kai, -1 terima kasih kepada 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

Cobalah online!

Adám
sumber
1
243 byte
Black Owl Kai
1
242 byte
Kevin Cruijssen
7

Java 10, 347 byte

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

Cobalah online.

Penjelasan:

[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
Kevin Cruijssen
sumber
7

T-SQL, 407 390 388 382 byte

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

sayaVARCHAR(MAX)v

Setelah beberapa byte-saving REPLACEs, jalankan yang berikut ini sebagai SQL dinamis:

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

Menggunakan CASEpernyataan dan STUFFperintah untuk memasukkan / menimpa karakter di posisi yang tercantum.

EDIT :

  1. Ganti yang asli (di bawah) dengan strategi yang sama sekali berbeda
  2. Menyimpan dua byte dengan beralih ke LEFTalih-alih SUBSTRINGdan menghilangkan spasi
  3. Disimpan 6 byte dengan mengubah variabel ke CHARdan memindahkan surat tambahan ke yang kedua REPLACE(terima kasih, @CDC!)

Ini versi pertamaku, menggunakan metode berbeda (pasca penggantian, diformat):

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_SPLITdan PARSENAMEdigunakan untuk memecah string menjadi baris dan kolom melalui -dan .pemisah.

Kolom pertama adalah karakter kunci yang cocok dengan huruf ke-3 dari ayat input (terima kasih atas idenya, @ Night2). Yang kedua dan ketiga adalah penggantian yang dilakukan untuk ayat itu.

BradC
sumber
Solusi pertama, jika Anda menggunakan "CHAR (700)" alih-alih "VARCHAR (MAX)" Anda dapat menghemat 3 byte. Juga di "bebek kecil" Anda, Anda dapat melakukan "e bebek kecil" dan menghapus e sebelum # pada setiap penggantian untuk mendapatkan 3.
CDC
BTW, solusi yang sangat menyenangkan. Saya menggunakan formatmessage untuk menjadi sangat dekat dengan Anda, tetapi tidak cukup.
CDC
Saran bagus, @CDC, terima kasih!
BradC
6

Python 2 , 1034 byte

Ini kode saya! Ini menggunakan kamus sederhana. Setelah menjalankan kode ini, Anda dapat memasukkan ayat apa saja dan akan menampilkan ayat berikutnya.

PS: Saya baru di saluran ini dan ini adalah posting pertama saya. Saya sangat menyukai tantangan ini jadi memutuskan untuk mencobanya. Silakan mengoreksi saya.

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
sumber
11
Selamat datang di situs ini! Biasanya kami akan menghitung kamus sebagai bagian dari sumber. Bagian dari tantangannya adalah mencoba dan membuat ini sekecil mungkin. Ada juga beberapa cara Anda dapat mempersingkat ini. 1) Karena Anda tidak mendapatkan poin untuk dibaca, Anda dapat menggunakan nama variabel karakter tunggal (misalnya xatau a) 2) Python cukup permisif dengan spasi putih jadi saya akan mencoba menghapus beberapa spasi putih Anda juga. Misalnya Anda tidak memerlukan ruang di sekitar =. Terakhir Kami memiliki halaman untuk bermain golf dengan python yang dapat Anda kunjungi untuk meningkatkan permainan Anda.
Wheat Wizard
wow @ SriotchilismO'Zaic! itu membantu..terimakasih! :)
Prachiti Prakash Prabhu
1
Anda dapat dengan mudah bermain golf ini dengan menghapus spasi dan variabel yang tidak perlu, menghindari mengimpor sysdengan menggunakan mis. raw_input(), Memperpendek kunci kamus, dll. Anda harus paling jelas mengambil bagian berulang dari lagu dan menambahkannya secara terpisah
Jo King
@JoKing seperti yang saya sebutkan ini adalah posting pertama saya dan saya tidak terlalu memikirkan hal ini. Hanya ingin mencobanya, tetapi sekarang saya dapat idenya. Posting saya berikutnya akan menjadi jauh lebih baik dan lebih pendek dari ini - semua terima kasih kepada kalian..membantu saya keluar! :)
Prachiti Prakash Prabhu
6

PHP (7.4), 253 247 byte

-6 byte dengan meningkatkan bagaimana array penggantian dibangun dengan bantuan lebih lanjut dari "Membongkar array dalam".

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

Cobalah online!

Ini menciptakan array dari setiap kemungkinan penggantian (12 digunakan + 2 tidak digunakan) dalam key=>valueformat. Contoh: ['Mother duck herself' => 'Five little ducks', etc...]lalu ganti yang menggunakan strtr .

Satu-satunya hal yang menarik adalah penggunaan pertama saya dari "Unpacking inside array" yang merupakan fitur baru di PHP 7.4.


PHP , 264 byte

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

Cobalah online!

Saya telah menyimpan kata-kata berbeda dari setiap ayat dalam sebuah array. Saya menemukan ayat mana input menggunakan karakter ketiga input karena unik ( vuroet). Kemudian saya hanya mengganti kata-kata berbeda dari ayat itu dengan kata-kata berbeda dari ayat berikutnya.

Night2
sumber
5

Bersih , 352 byte

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

Cobalah online!

Suram
sumber
5

C # (Visual C # Interactive Compiler) , 262 byte

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

Cobalah online!

Perwujudan Ketidaktahuan
sumber
3

PowerShell , 356 343 340 336 byte

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

Cobalah online .

Versi yang lebih mudah dibaca:

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
sumber
3

PowerShell , 265 263 255 251 246 byte

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

Cobalah online!

Saya menggunakan kekuatan kasar untuk menemukan ekspresi +"$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

Terima kasih @Arnauld untuk 3rd char.

mazzy
sumber
2

Japt v2.0a0, 143 byte

Mencoba meng-encode satu ayat dengan penggantian tetapi, pada akhirnya, mengadaptasi solusi Arnauld akhirnya menjadi lebih pendek. Punya ide lain yang mungkin, semoga, berhasil lebih pendek lagi tetapi tidak tahu kapan saya akan mencobanya.

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

Cobalah - sertakan semua ayat

Shaggy
sumber
2

Bash , 373 355 byte

Tidak ada yang terlalu gila di sini. Reduksi beberapa byte yang mudah akan menggantikan variabel dua karakter (a1, a2, a3, e1..e6) dengan yang karakter tunggal.

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

Cobalah online!

Cobalah online!

berdesis
sumber
2

05AB1E , 134 byte

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

Cobalah online!

Karena saya relatif baru di 05AB1E, ini mungkin bisa banyak 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
sumber
1

Perl 6 , 247 byte

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

Cobalah online!

Jelas golf, terutama 5 elemen terakhir dalam daftar dalam formulir "num $l num-1", atau regex awal yang cocok dengan bagian kanan input lama.

Jo King
sumber
1

Arang , 156 byte

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

Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:

≔⌕tvuroe§θ²δ

Lihatlah karakter ketiga dari baris pertama untuk mengetahui ayat mana yang kita inginkan.

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

Output bagian pertama dari baris pertama dengan pengindeksan ke dalam daftar string Five, Four, Three, Two, One, Mother duck herself. Kemudian cetak little duckdan sjika perlu, diikuti oleh 18 karakter terakhir dari baris input (yang selalu sama pada setiap ayat).

⸿η⸿ζ⸿

Dua baris tengah selalu sama pada setiap ayat.

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

Untuk baris terakhir ternyata menjadi golfier untuk dimasukkan little ducksdalam daftar alternatif karena beberapa alasan, tetapi 11 karakter terakhir masih disalin dari input.

Neil
sumber
1

tinta , 353 byte

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

Cobalah online!

Pertama, gunakan pemeriksaan substring untuk mencari tahu apa ayat kita - itu cukup mudah berkat kapitalisasi angka di awal - F, Tdan Otidak terjadi di tempat lain, dan Anda dapat membedakan ayat kedua dan keempat dari yang pertama dan ketiga dengan juga memeriksa FidanTh masing masing.

Lalu kami hanya melakukan apa yang dilakukan tinta dengan sangat baik dan mencetak teks biasa yang ditandai dengan persyaratan. Saya mencoba menggunakan pernyataan switch pada awalnya, tetapi sementara itu tampak lebih bagus, itu sebenarnya berakhir lebih lama.
Anda akan berpikir bahwa Quacks akan menjadi tempat yang baik untuk menggunakan variabel, apa dengan string yang diulang banyak, tetapi variabel datang dengan overhead yang cukup bahwa setiap cara saya mencoba melakukan itu membuat kode lebih lama. Mungkin itu pertanda aku tidak seharusnya main golf dengan tinta.

Sara J
sumber