เป็ดเป็ดหายไป!


40

นี่คือ (ค่อนข้างน่ากลัว) เพลงเป็ดน้อยห้าตัว (ไม่นาน):

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.

งานของคุณคือไม่ส่งออกเพลงนี้ คุณควรใช้ข้อหนึ่งและส่งออกข้อต่อไป (ข้อต่อไปของข้อสุดท้ายคือข้อแรก)

กฎระเบียบ

  • ไม่มีช่องว่างมาตรฐานกรุณา
  • อินพุต / เอาต์พุตจะดำเนินการผ่านวิธีการอินพุต / เอาต์พุตมาตรฐานของเรา
  • แน่นอนกลอนจะต้องออกมาและควรจะมีความแตกต่างเมื่อเทียบกับเนื้อเพลง อินพุตจะไม่แตกต่างกันเมื่อเปรียบเทียบกับเนื้อเพลงด้วย

ตัวอย่าง

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.

ที่คาดว่าจะ

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.

ที่คาดว่าจะ

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
ฉันจำคำพูดของสิ่งนี้แตกต่างกันเล็กน้อยเมื่อฉันยังเด็กดวงจันทร์หลายดวงที่ผ่านมา แต่ฉันก็จำได้ว่าถูกทำร้ายด้วยมัน! เป็ดตัวนั้นหายไปไหนกันตลอดวัน! ทำไมไม่มีใครออกตามหาพวกเขา! และแม่ที่ขาดความรับผิดชอบแบบไหนที่สามารถสูญเสียลูกจำนวนมากและปล่อยให้พวกเขาที่เหลือเล่น! สยองขวัญ!
ปุย

8
ซ้ำที่เป็นไปได้ ล้อเล่น :)
คืน

7
คุณแค่ทำให้ฉันตกใจ
_

2
เนื้อเพลงนั่นทำให้แน่ใจว่าฉันต้องผ่านรถไฟเหาะแห่งอารมณ์
Num Lock

2
ฉันฟังวิดีโอ YouTube ที่ฉันโพสต์ที่นี่เมื่อวานนี้สองครั้งแค่สองครั้ง ตอนนี้เพลงนั้นถูกฝังลงในสมองของฉันไม่ว่าฉันจะไปที่ไหนไม่ทำอะไรฉันจะได้ยินมันต่อไป! ช่วยด้วย
คืน

คำตอบ:


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

เรียกใช้และแก้ไขข้อบกพร่อง

ข้อทั้งหมดเป็นกรณีทดสอบ


1
เมื่อคุณเรียกใช้งานด้วย "เป็ดตัวน้อย" มันตอบสนอง "เป็ดน้อยและเป็ดตัวน้อยของเป็ดตัวน้อยกลับมา" ในบรรทัดสุดท้าย
Dorian

1
ข้อผิดพลาดได้รับการแก้ไขโดยไม่มีขนาด จริงๆแล้วมันเกี่ยวกับค่าใช้จ่าย 2 ไบต์และการหักล้างการประหยัด 2 ไบต์ที่อื่นถึงแม้ว่าไบต์นั้นค่อนข้างยากที่จะวัดที่นี่เนื่องจากการเปลี่ยนแปลงไม่ได้อยู่ในแนวเดียวกันภายในตัวอักษรสตริงที่บีบอัดหรือแม้แต่ในโปรแกรมสุดท้าย
เรียกซ้ำ

19

JavaScript (ES9), 227 ไบต์

สิ่งนี้คล้ายกับรุ่นโหนดด้านล่าง แต่ใช้สูตรที่ใช้parseInt()แทนBuffer()การระบุข้อเข้า

นี่คือES2018 (aka ES9) เพราะเราใช้นิพจน์ทั่วไปกับ/sแฟล็ก ( 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)

ลองออนไลน์!

อย่างไร?

ในรุ่นนี้เราแยกวิเคราะห์ข้ออินพุตทั้งหมดเป็นฐาน 30 ( 0ถึงt) และดำเนินการ bitwise AND กับ 7 การแยกวิเคราะห์หยุดอักขระที่ไม่ถูกต้องตัวแรกซึ่งนำไปสู่:

 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 ไบต์

บันทึก 2 ไบต์ขอบคุณ @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)

ลองออนไลน์!

อย่างไร?

อักขระที่สามของแต่ละข้อสามารถใช้เป็นตัวระบุที่ไม่ซ้ำกันได้ ด้วยการใช้รหัส ASCII modulo 9 เราจะได้รับ:

 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

โองการผลผลิตมีการเข้ารหัสด้วยแม่แบบต่อไปนี้:

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

โดยที่แต่ละหลักถูกแทนที่ด้วยสตริงตามตารางต่อไปนี้:

 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 '

ที่นิพจน์ปกติ/ w.*\n/sแยกส่วนทั่วไปนี้จากอินพุต:

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

ในที่สุดเราก็เพิ่มสุดท้าย 11 " came back."ตัวของท่านซึ่งเป็น



1
@Shaggy ทำได้ดีมาก ขอบคุณ!
Arnauld

2
เป็นเพียงการโพสต์ความคิดเห็นอื่นเพื่อแนะนำexecเมื่อหน้าโหลดใหม่ จิตใจที่ดี ... !
ปุย

11

Python 3 , 267 263 254 ไบต์

บันทึกได้ 4 ไบต์ด้วย @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(':')

ลองออนไลน์!

ทำงานโดยการเปลี่ยนชิ้นส่วนที่เกี่ยวข้องด้วยชิ้นส่วนที่เกี่ยวข้องของข้อต่อไป

หลังจากการ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สำรอง2 , 252 ไบต์

โดย @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(':')

ลองออนไลน์!


for a in zip(T,T[-2:]+T):s=s.replace(*a)สำหรับ 264 ไบต์
ovs

หรือlambda s:reduce(lambda s,a:s.replace(*a),zip(T,T[-2:]+T),s)สำหรับ 262 ไบต์ในหลาม 2
OVS

@ovs ขอบคุณฉันได้รับมันถึง 263 ด้วย reodering บางสิ่งและใช้T[2:]แทนT[-2:]
Black Owl Kai

9

QuadR , 257 242 ไบต์

-14 ขอบคุณ Black Owl Kai, -1 ขอบคุณ 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

ลองออนไลน์!




7

Java 10, 347 ไบต์

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

ลองออนไลน์

คำอธิบาย:

[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 ไบต์

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

ผมVARCHAR(MAX)โวลต์ , ต่อกฎ IO ของเรา

หลังจากสองสามไบต์ประหยัด REPLACEดำเนินการต่อไปนี้เป็น SQL แบบไดนามิก:

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

ใช้ CASESTUFFคำสั่งและคำสั่งเพื่อแทรก / เขียนอักขระที่ตำแหน่งที่แสดง

การแก้ไข :

  1. แทนที่ต้นฉบับ (ด้านล่าง) ด้วยกลยุทธ์ที่แตกต่างอย่างสิ้นเชิง
  2. บันทึกสองไบต์โดยเปลี่ยนเป็น LEFTแทนที่SUBSTRINGและกำจัดช่องว่าง
  3. บันทึก 6 ไบต์ด้วยการเปลี่ยนตัวแปรเป็นCHARและย้ายตัวอักษรพิเศษไปเป็นวินาทีREPLACE (ขอบคุณ @CDC!)

นี่คือรุ่นแรกของฉันโดยใช้วิธีการที่แตกต่างกัน (หลังการเปลี่ยนรูปแบบ):

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_SPLITและPARSENAMEใช้เพื่อแยกสตริงออกเป็นแถวและคอลัมน์ผ่าน-และ.ตัวคั่น

คอลัมน์แรกเป็นอักขระสำคัญที่จับคู่กับตัวอักษรตัวที่ 3 ของข้อป้อนข้อมูล (ขอบคุณสำหรับความคิด @ Night2) ที่สองและสามคือการเปลี่ยนที่กำลังดำเนินการสำหรับข้อที่


ทางออกแรกหากคุณใช้ "CHAR (700)" แทน "VARCHAR (MAX)" คุณสามารถบันทึกได้ 3 ไบต์ นอกจากนี้ใน "เป็ดน้อย" ของคุณคุณสามารถทำ "เป็ดน้อย" แทนและลบ e ก่อนหน้า # สำหรับการเปลี่ยนแต่ละครั้งเพื่อรับอีก 3
CDC

BTW ทางออกที่สนุกจริงๆ ฉันใช้ฟอร์แมตข้อความเพื่อเข้าใกล้คุณมาก แต่ไม่มาก
CDC

คำแนะนำที่ดี @CDC ขอบคุณ!
BradC

6

Python 2 , 1034 ไบต์

นี่คือรหัสของฉัน! มันมีพจนานุกรมง่าย ๆ หลังจากเรียกใช้รหัสนี้คุณสามารถป้อนกลอนใด ๆ และมันจะออกข้อต่อไป

PS: ฉันยังใหม่กับช่องนี้และนี่คือโพสต์แรกของฉัน ฉันชอบความท้าทายนี้มากเลยตัดสินใจลองดู โปรดแก้ไขให้ฉันด้วย

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
ยินดีต้อนรับสู่เว็บไซต์! โดยปกติเราจะนับพจนานุกรมเป็นส่วนหนึ่งของแหล่งที่มา ส่วนหนึ่งของความท้าทายคือพยายามทำสิ่งนี้ให้เล็กที่สุด นอกจากนี้ยังมีวิธีที่คุณสามารถย่อให้สั้นลงได้ 1) เนื่องจากคุณไม่ได้รับคะแนนใด ๆ ในการอ่านคุณสามารถใช้ชื่อตัวแปรอักขระเดียว (เช่นxหรือa) 2) Python ค่อนข้างอนุญาตกับช่องว่างดังนั้นฉันจะลองลบช่องว่างของคุณด้วย =ตัวอย่างเช่นคุณไม่จำเป็นต้องมีช่องว่างรอบ ๆ สุดท้ายเรามีหน้าสำหรับการเล่นกอล์ฟในไพ ธ อนคุณสามารถไปที่เกมของคุณ
ข้าวสาลี Wizard

ว้าว @ SriotchilismO'Zaic! นั่นเป็นประโยชน์ .. ขอขอบคุณ! :)
Prachiti Prakash Prabhu

1
คุณสามารถตีกอล์ฟนี้ได้อย่างง่ายดายโดยลบช่องว่างและตัวแปรที่ไม่จำเป็นออกโดยหลีกเลี่ยงการนำเข้าsysโดยใช้เช่นการraw_input()ย่อคีย์พจนานุกรม ฯลฯ คุณควรนำส่วนที่ซ้ำกันของเพลงออกมาและเพิ่มแยกจากกัน
Jo King

@ โจกิ้งที่ฉันพูดถึงนี่เป็นโพสต์แรกของฉันและฉันไม่ได้คิดมากในเรื่องนี้ แค่อยากลองดู แต่ตอนนี้ฉันเข้าใจแล้ว โพสต์ถัดไปของฉันจะดีกว่าและสั้นกว่านี้มากขอบคุณพวกคุณทุกคนช่วยฉันออกไป! :)
Prachiti Prakash Prabhu

6

PHP (7.4), 253 247 ไบต์

-6 ไบต์โดยการปรับปรุงวิธีการสร้างอาร์เรย์การแทนที่ด้วยความช่วยเหลือเพิ่มเติมจาก "การเอาออกภายในอาร์เรย์"

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

ลองออนไลน์!

สิ่งนี้จะสร้างอาร์เรย์ของการแทนที่ที่เป็นไปได้ทั้งหมด (12 ใช้ + 2 ไม่ได้ใช้) ในkey=>valueรูปแบบ ตัวอย่าง: ['Mother duck herself' => 'Five little ducks', etc...]จากนั้นเพียงแค่แทนที่พวกเขาโดยใช้strtr strtr

สิ่งเดียวที่น่าสนใจคือการใช้"Unpacking Inside Array"ครั้งแรกของฉันซึ่งเป็นคุณสมบัติใหม่ใน PHP 7.4


PHP , 264 ไบต์

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

ลองออนไลน์!

ฉันเก็บคำต่าง ๆ ของแต่ละข้อไว้ในอาเรย์แล้ว ฉันค้นหาข้อใดที่อินพุตใช้อักขระที่สามของอินพุตเนื่องจากเป็นค่าเฉพาะ ( vuroet) จากนั้นฉันก็แทนที่คำต่าง ๆ ของข้อนั้นด้วยคำที่ต่างกันในข้อต่อไป




3

PowerShell , 356 343 340 336 ไบต์

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

ลองมันออนไลน์

รุ่นที่อ่านเพิ่มเติมได้:

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 ไบต์

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

ลองออนไลน์!

+"$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

ขอบคุณ@Arnauld3rd charสำหรับ


2

Japt v2.0a0, 143 ไบต์

พยายามเข้ารหัสข้อเดียวด้วยการแทนที่ แต่ในที่สุดการปรับใช้โซลูชันของ Arnauld ก็จบลงด้วยความสั้นลง มีความคิดอื่นที่อาจหวังว่าจะสั้นลงอีกครั้ง แต่ไม่รู้ว่าเมื่อไหร่ฉันจะลองทำดู

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

ลองใช้ - รวมข้อทั้งหมด


2

Bash , 373 355 ไบต์

ไม่มีอะไรบ้าเกินไปที่นี่ การลดจำนวนไบต์ที่ง่ายเพียงเล็กน้อยคือการแทนที่ตัวแปรสองตัวอักษร (a1, a2, a3, e1..e6) ด้วยอักขระตัวเดียว

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

ลองออนไลน์!

ลองออนไลน์!


2

05AB1E , 134 ไบต์

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

ลองออนไลน์!

เนื่องจากฉันค่อนข้างใหม่กับ 05AB1E นี่อาจเป็นเรื่องที่เล่นกอล์ฟได้มาก

                ### 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 ไบต์

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

ลองออนไลน์!

สามารถเล่นกอล์ฟได้อย่างแน่นอนโดยเฉพาะ 5 องค์ประกอบสุดท้ายในรายการในแบบฟอร์ม"num $l num-1"หรือ regex เริ่มต้นที่ตรงกับส่วนที่ถูกต้องของอินพุตเก่า


1

ถ่าน 156 ไบต์

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

ลองออนไลน์! การเชื่อมโยงคือการใช้รหัสเวอร์ชันอย่างละเอียด คำอธิบาย:

≔⌕tvuroe§θ²δ

ดูตัวละครตัวที่สามของบรรทัดแรกเพื่อหาข้อที่เราต้องการ

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

เอาท์พุทส่วนแรกของบรรทัดแรกโดยการจัดทำดัชนีในรายการของสตริงFive, Four, Three, Two, ,One Mother duck herselfจากนั้นพิมพ์little duckและsตามความเหมาะสมตามด้วยอักขระ 18 ตัวสุดท้ายของบรรทัดอินพุต (ซึ่งมักจะเหมือนกันในแต่ละข้อ)

⸿η⸿ζ⸿

เส้นสองเส้นตรงกลางจะเหมือนกันทุกข้อ

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

สำหรับบรรทัดสุดท้ายมันจะกลายเป็นนักกอล์ฟที่จะรวมlittle ducksไว้ในรายการทางเลือกด้วยเหตุผลบางอย่าง แต่ตัวละคร 11 ตัวสุดท้ายยังคงถูกคัดลอกจากอินพุต


1

หมึก 353 ไบต์

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

ลองออนไลน์!

ครั้งแรกที่ใช้ substring การตรวจสอบจะคิดออกว่ากลอนเรากำลังอยู่ใน - ที่ขอบคุณง่ายพอต่อโครงสร้างเงินทุนของตัวเลขที่เริ่มต้น - F, TและOไม่ได้เกิดขึ้นในสถานที่อื่น ๆ และคุณสามารถเห็นความแตกต่างที่สองและบทกวีที่สี่จาก ที่หนึ่งและสามโดยตรวจสอบด้วยFiและThตามลำดับ

จากนั้นเราก็ทำในสิ่งที่หมึกทำได้ดีที่สุดและพิมพ์ข้อความธรรมดาที่มีเงื่อนไข ฉันพยายามใช้คำสั่งสวิตช์ในตอนแรก แต่ในขณะที่มันดูดีขึ้นจริง ๆ แล้วมันก็จบลงได้นานกว่า
คุณคิดว่าQuackมันน่าจะเหมาะกับการใช้ตัวแปรสิ่งที่เกิดขึ้นกับสตริงซ้ำหลายครั้ง แต่ตัวแปรมีค่าใช้จ่ายเพียงพอที่ทุกครั้งที่ฉันพยายามจะทำนั้นทำให้รหัสยาวขึ้น อาจเป็นสัญญาณที่ฉันไม่ควรเล่นกอล์ฟด้วยหมึก

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.