Vịt, vịt, đi rồi!


40

Đây là bài hát (khá đáng sợ) Năm con vịt nhỏ (nó không dài):

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.

Nhiệm vụ của bạn không phải là xuất ra bài hát này. Bạn nên lấy một câu và xuất ra câu tiếp theo (câu tiếp theo của câu cuối là câu đầu tiên).

Quy tắc

  • Không có sơ hở tiêu chuẩn, xin vui lòng.
  • Đầu vào / đầu ra sẽ được thực hiện thông qua các phương thức đầu vào / đầu ra tiêu chuẩn của chúng tôi.
  • Các chính xác câu phải được xuất ra, và không nên có sự khác biệt khi so sánh với lời bài hát. Đầu vào sẽ không khác khi so sánh với lời bài hát.

Ví dụ

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.

Kỳ vọng:

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.

Kỳ vọng:

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
Tôi nhớ những từ này hơi khác khi tôi còn trẻ, nhiều mặt trăng trước đây. Nhưng tôi cũng nhớ đã bị chấn thương bởi nó! Những chú vịt con bị mất tích trong những ngày đó ở đâu?! Tại sao không ai ra ngoài tìm kiếm chúng?! Và kiểu người mẹ vô trách nhiệm nào đã làm mất quá nhiều đứa trẻ và cứ để những đứa trẻ còn lại ra ngoài chơi?! Kinh dị!
Xù xì

8
Có thể trùng lặp . Đùa thôi :)
Night2

7
Bạn vừa hóa đá tôi.
A _

2
Lời bài hát đó chắc chắn đã khiến tôi trải qua một chuyến tàu lượn cảm xúc.
Num Lock

2
Tôi đã nghe video YouTube tôi đã đăng ở đây ngày hôm qua, hai lần, chỉ hai lần. Bây giờ bài hát đó được đưa vào não tôi, bất cứ nơi nào tôi đi, bất cứ điều gì tôi làm, tôi tiếp tục nghe nó! Help ...
Night2

Câu trả lời:


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

Chạy và gỡ lỗi nó

Tất cả các câu thơ như trường hợp thử nghiệm


1
Khi bạn chạy nó với "Một con vịt nhỏ", nó sẽ phản hồi "con vịt nhỏ của con vịt nhỏ đã quay trở lại." trong dòng cuối cùng.
Dorian

1
Các lỗi đã được sửa chữa miễn phí về kích thước. Nó thực sự là về chi phí 2 byte và bù đắp khoản tiết kiệm 2 byte ở nơi khác, mặc dù các byte rất khó đo lường ở đây, vì các thay đổi không được căn chỉnh chính xác trong các chuỗi ký tự nén hoặc thậm chí trong chương trình cuối cùng.
đệ quy

19

JavaScript (ES9), 227 byte

Đây là giống với phiên bản Node dưới đây nhưng sử dụng một công thức dựa trên parseInt()thay vì Buffer()để xác định các câu đầu vào.

Đây là ES2018 (còn gọi là ES9) vì chúng tôi đang sử dụng biểu thức chính quy với /scờ ( dot ALL ).

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)

Hãy thử trực tuyến!

Làm sao?

Trong phiên bản này, chúng tôi phân tích toàn bộ câu đầu vào là cơ sở 30 ( 0đến t) và thực hiện theo bit VÀ với 7. Việc phân tích cú pháp dừng trên ký tự không hợp lệ đầu tiên, dẫn đến:

 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

Đã lưu 2 byte nhờ @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)

Hãy thử trực tuyến!

Làm sao?

Ký tự thứ ba của mỗi câu đầu vào có thể được sử dụng như một định danh duy nhất. Bằng cách lấy mã ASCII modulo 9, chúng tôi nhận được:

 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

Các câu đầu ra được mã hóa với các mẫu sau:

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

Trong đó mỗi chữ số được thay thế bằng một chuỗi theo bảng sau:

 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 '

Trường hợp biểu thức chính quy / w.*\n/strích phần chung này từ đầu vào:

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

Cuối cùng chúng ta đã thêm 11 ký tự cuối cùng của đầu vào " came back.".



1
@Shaggy Hoàn thành tốt. Cảm ơn!
Arnauld

2
Chỉ cần đăng một bình luận khác để đề xuất execkhi trang tải lại. Những đầu óc vĩ đại ... !
Xù xì

11

Python 3 , 267 263 254 byte

4 byte được lưu nhờ @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(':')

Hãy thử trực tuyến!

Hoạt động bằng cách thay thế các phần có liên quan bằng các phần tương ứng của câu thơ tiếp theo.

Sau khi preinitialisation, 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 thay thế 2 , 252 byte

bởi @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(':')

Hãy thử trực tuyến!


for a in zip(T,T[-2:]+T):s=s.replace(*a)cho 264 byte.
trứng

Hoặc lambda s:reduce(lambda s,a:s.replace(*a),zip(T,T[-2:]+T),s)cho 262 byte trong Python 2.
ovs

@ovs Cảm ơn, tôi đã nhận được nó tới 263 với việc sắp xếp lại một số thứ và sử dụng T[2:]thay vìT[-2:]
Black Owl Kai


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

Hãy thử trực tuyến.

Giải trình:

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

tôiVARCHAR(MAX)v

Sau một vài lần lưu byte REPLACE, thực thi như sau SQL động:

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

Sử dụng một CASEcâu lệnh và STUFFlệnh để chèn / ghi đè các ký tự tại các vị trí được liệt kê.

CHỈNH SỬA :

  1. Thay thế bản gốc (bên dưới) bằng một chiến lược hoàn toàn khác
  2. Đã lưu hai byte bằng cách chuyển sang LEFTthay vì SUBSTRINGvà loại bỏ một khoảng trắng
  3. Đã lưu 6 byte bằng cách thay đổi biến thành CHARvà chuyển một chữ cái phụ sang chữ thứ hai REPLACE(cảm ơn, @CDC!)

Đây là phiên bản đầu tiên của tôi, sử dụng một phương pháp khác (thay thế sau, được định dạng):

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_SPLITPARSENAMEđược sử dụng để ngắt một chuỗi thành các hàng và cột thông qua -.dấu phân cách.

Cột đầu tiên là một ký tự chính được khớp với chữ cái thứ 3 của câu thơ đầu vào (cảm ơn vì ý tưởng, @ Night2). Thứ hai và thứ ba là sự thay thế đang được thực hiện cho câu đó.


Giải pháp đầu tiên, nếu bạn sử dụng "CHAR (700)" thay vì "VARCHAR (MAX)", bạn có thể lưu 3 byte. Ngoài ra, trong "con vịt nhỏ" của bạn, thay vào đó bạn có thể thực hiện "e little duck" và xóa e trước # trên mỗi lần thay thế để nhận thêm 3.
CDC

BTW, giải pháp thực sự thú vị. Tôi đã sử dụng định dạng để đến gần bạn, nhưng không hoàn toàn.
CDC

Đề xuất tốt, @CDC, cảm ơn!
BradC

6

Python 2 , 1034 byte

Đây là mã của tôi! Nó sử dụng một từ điển đơn giản. Sau khi chạy mã này, bạn có thể nhập bất kỳ câu nào và nó sẽ xuất ra câu tiếp theo.

PS: Tôi mới biết về kênh này và đây là bài viết đầu tiên của tôi. Tôi thực sự thích thử thách này nên đã quyết định thử. Xin vui lòng để sửa cho tôi.

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
Chào mừng đến với trang web! Thông thường chúng ta sẽ tính từ điển là một phần của nguồn. Một phần của thử thách sẽ là thử và làm cho nó nhỏ nhất có thể. Cũng có một vài cách bạn có thể rút ngắn điều này. 1) Vì bạn không nhận được bất kỳ điểm nào để có thể đọc được, bạn có thể sử dụng tên biến ký tự đơn (ví dụ xhoặc a) 2) Python khá dễ cho phép với khoảng trắng, vì vậy tôi cũng sẽ thử xóa một số khoảng trắng của bạn. Ví dụ, bạn không cần không gian xung quanh =. Cuối cùng, chúng tôi có một trang để chơi gôn bằng trăn mà bạn có thể truy cập để chơi trò chơi của mình.
Thuật sĩ lúa mì

wow @ SriotchilismO'Z cổ! thật hữu ích..cảm ơn bạn! :)
Prachiti Prakash Mitchhu

1
Bạn có thể dễ dàng đánh gôn bằng cách loại bỏ các khoảng trắng và biến không cần thiết, tránh nhập sysbằng cách sử dụng raw_input(), ví dụ: rút ngắn khóa của từ điển, v.v. Bạn chắc chắn nên lấy ra các phần lặp lại của bài hát và thêm chúng một cách riêng biệt
Jo King

@JoKing như tôi đã đề cập đây là bài viết đầu tiên của tôi và tôi đã không nghĩ nhiều về điều này. Chỉ muốn cho nó một thử, nhưng bây giờ tôi có ý tưởng. Bài đăng tiếp theo của tôi sẽ tốt hơn nhiều và ngắn hơn nhiều so với bài này - tất cả là nhờ các bạn..cảm ơn tôi! :)
Prachiti Prakash Mitchhu

6

PHP (7.4), 253 247 byte

-6 byte bằng cách cải thiện cách mảng thay thế được xây dựng với nhiều trợ giúp hơn từ "Giải nén bên trong mảng".

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

Hãy thử trực tuyến!

Điều này tạo ra một mảng của mọi sự thay thế có thể (12 được sử dụng + 2 không sử dụng) trong một key=>valueđịnh dạng. Ví dụ: ['Mother duck herself' => 'Five little ducks', etc...]và sau đó chỉ thay thế những người sử dụng strtr .

Điều thú vị duy nhất là lần đầu tiên tôi sử dụng "Giải nén bên trong mảng" , một tính năng mới trong 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);

Hãy thử trực tuyến!

Tôi đã lưu trữ các từ khác nhau của mỗi câu trong một mảng. Tôi tìm thấy câu thơ đầu vào đang sử dụng ký tự thứ ba của đầu vào vì nó là duy nhất ( vuroet). Sau đó, tôi chỉ cần thay thế các từ khác nhau của câu đó bằng các từ khác nhau của câu tiếp theo.


5

Sạch , 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

Hãy thử trực tuyến!



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

Hãy thử trực tuyến .

Phiên bản dễ đọc hơn:

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

Hãy thử trực tuyến!

Tôi đã sử dụng lực lượng vũ phu để tìm biểu thức +"$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

Cảm ơn @Arnauld cho 3rd char.


2

Japt v2.0a0, 143 byte

Đã thử mã hóa một câu thơ duy nhất bằng các thay thế nhưng cuối cùng, việc điều chỉnh giải pháp của Arnauld cuối cùng lại ngắn hơn. Có một ý tưởng khác có thể, hy vọng, sẽ hoạt động ngắn hơn một lần nữa nhưng không biết khi nào tôi sẽ thử nó.

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

Hãy thử nó - bao gồm tất cả các câu thơ


2

Bash , 373 355 byte

Không có gì quá điên rồ ở đây. Việc giảm một vài byte dễ dàng sẽ là thay thế các biến có hai ký tự (a1, a2, a3, e1..e6) bằng các biến ký tự đơn.

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

Hãy thử trực tuyến!

Hãy thử trực tuyến!


2

05AB1E , 134 byte

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

Hãy thử trực tuyến!

Vì tôi còn khá mới với 05AB1E, nên điều này có thể được đánh gôn rất nhiều

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

Hãy thử trực tuyến!

Chắc chắn có thể chơi được, đặc biệt là 5 yếu tố cuối cùng trong danh sách trong biểu mẫu "num $l num-1"hoặc biểu thức chính quy bắt đầu khớp với các phần bên phải của đầu vào cũ.


1

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

Hãy thử trực tuyến! Liên kết là phiên bản dài dòng của mã. Giải trình:

≔⌕tvuroe§θ²δ

Nhìn vào ký tự thứ ba của dòng đầu tiên để biết chúng ta muốn câu nào.

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

Đầu ra phần đầu của dòng đầu tiên của chỉ mục vào danh sách các chuỗi Five, Four, Three, Two, One, Mother duck herself. Sau đó in little duckskhi thích hợp, theo sau là 18 ký tự cuối cùng của dòng đầu vào (luôn giống nhau trên mỗi câu).

⸿η⸿ζ⸿

Hai dòng giữa luôn giống nhau trên mỗi câu.

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

Đối với dòng cuối cùng, hóa ra là golfier để đưa little ducksvào danh sách thay thế vì một số lý do, nhưng 11 ký tự cuối cùng vẫn được sao chép từ đầu vào.


1

mực , 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.

Hãy thử trực tuyến!

Thứ nhất, sử dụng substring kiểm tra để tìm ra những gì thơ chúng ta đang ở - đó là dễ dàng đủ nhờ vào giá trị vốn hóa của các con số lúc bắt đầu - F, TOkhông xảy ra ở bất kỳ nơi khác, và bạn có thể phân biệt thứ hai và câu thứ tư từ thứ nhất và thứ ba bằng cách kiểm tra FiThtương ứng.

Sau đó, chúng tôi chỉ làm những gì mực làm tốt nhất và in văn bản đơn giản với các điều kiện. Tôi đã thử sử dụng các câu lệnh chuyển đổi lúc đầu, nhưng trong khi nó trông đẹp hơn, nó thực sự đã kết thúc lâu hơn.
Bạn sẽ nghĩ rằng Quacks sẽ là một nơi tốt để sử dụng các biến, với một chuỗi được lặp lại một bó, nhưng các biến có đủ chi phí mà mọi cách tôi cố gắng làm cho mã dài hơn. Có lẽ đó là một dấu hiệu tôi không nên chơi golf bằng mực.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.