Качка, качка, пішла!


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
Я пам’ятаю, що слова до цього були дещо іншими, коли я був молодим, багато місяців тому. Але я також пам’ятаю, що від цього травмувався! Де були ці зниклі каченята за всі ті дні ?! Чому їх ніхто не шукав ?! І яка така безвідповідальна мати примудряється втратити стільки дітей і продовжує випускати решту з них ?! Жах!
Кудлатий


7
Ви просто скам'янили мене.
А _

2
Ця пісня напевно переконала мене пройти через гірку емоцій.
Num Lock

2
Я слухав відео YouTube, яке я опублікував тут учора, двічі, всього двічі. Тепер ця пісня вбудована в мій мозок, куди б я не поїхав, все, що я роблю, я продовжую її чути! Довідка ...
Night2,

Відповіді:


3

Стакс , 115 111 байт

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

Запустіть і налагоджуйте його

Всі вірші як тестові справи


1
Коли ви запускаєте його з "Одна маленька качка", вона відповідає "маленька качка маленька качка маленьких качок повернулася". в останньому рядку
Доріан

1
Виправлено помилку за розміром. Йшлося насправді про 2-байтну вартість та компенсацію 2-байтової економії в іншому місці, хоча байти тут важко виміряти, оскільки зміни не точно вирівнюються в байтах стислих рядкових літералів або навіть у кінцевій програмі.
рекурсивний

19

JavaScript (ES9), 227 байт

Це схоже на версію вузла нижче, але використовує формулу, засновану на parseInt()замість того, Buffer()щоб визначити вхідний вірш.

Це ES2018 (він же 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) та виконуємо побіжно І з 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 по модулю 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 Чудово зроблено. Спасибі!
Арнольд

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 байти.
ов

Або lambda s:reduce(lambda s,a:s.replace(*a),zip(T,T[-2:]+T),s)для 262 байтів у Python 2.
до

@ovs Спасибі, я отримав це на 263, переробляючи деякі речі та використовуючи T[2:]замість цьогоT[-2:]
Чорна сова Кай

9

QuadR , 257 242 байт

-14 подяк Чорній Сові Кай, -1 завдяки Кевіну Крейсейну

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

iVARCHAR(MAX)v .

Через пару байт-економії REPLACEs, виконує такі, як динамічний 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

Використовує CASEзаяву іSTUFF команди для вставки / перезапису символів у перелічених позиціях.

ЗМІНИ :

  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 байти. Також у своїй "маленькій качці" ви можете замість цього зробити "маленьку качку" і видалити е перед # на кожній заміні, щоб отримати ще 3.
CDC

До речі, дуже цікаве рішення. Я використовував формат повідомлення, щоб дуже наблизитися до вас, але не зовсім.
CDC

Гарні пропозиції, @CDC, дякую!
BradC

6

Пітон 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 досить проникливий з пробілами, тому я б спробував також видалити деякі ваші пробіли. Наприклад, вам не потрібні місця навколо =. Нарешті, у нас є сторінка для гри в гольф в пітон, яку ви можете відвідати до своєї гри.
Пшеничний майстер

вау @ шріотчилізмO'Zaic! це корисно .. дякую! :)
Прачіті Пракаш Прабху

1
Ви можете легко переграти це, видаливши зайві пробіли та змінні, уникаючи імпорту sysза допомогою напрraw_input() , скорочення ключа словника і т. Д. Ви, безумовно, повинні вийняти повторені розділи пісні і додати їх окремо
Jo King

@JoKing, як я вже згадував, це мій перший пост, і я не дуже замислювався над цим. Просто хотів спробувати, але зараз я зрозумів, Мій наступний пост буде набагато кращим і коротшим за це - все завдяки вам, хлопці. Допоможіть мені! :)
Прачіті Пракаш Прабху

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 .

Єдине цікаве - це моє перше в історії використання "Розпакування всередині масивів", що є новою функцією в 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). Тоді я просто замінюю різні слова цього вірша різними словами наступного вірша.


5

Чисто , 352 байти

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

Спробуйте в Інтернеті!



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

Дякую @Arnauld за 3rd char.


2

Japt v2.0a0, 143 байт

Спробувавши кодування одного вірша замінами, але, врешті-решт, адаптація рішення Арнальда виявилася коротшою. Майте ще одну ідею, яка може, сподіваємось, знову випрацювати коротше, але не знаю, коли я змушусь її спробувати.

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", або початковий регулярний вираз, який відповідає правильним частинам старого вводу.


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.

Спробуйте в Інтернеті!

По- перше, використання подстрок перевірки , щоб з'ясувати , що вірш ми в - це досить легко завдяки капіталізації чисел на початку - F, Tі Oне зустрічаються в інших місцях, і ви можете виділити другий і четвертий вірш із перший і третій також шляхом перевірки FiіTh відповідно відповідно.

Тоді ми просто робимо те, що найкраще виконує чорнило, і друкуємо звичайний текст, прописаний умовними умовами. Я спробував використати заяви переключення спочатку, але, хоча це виглядало приємніше, воно фактично закінчилося довше.
Ви б могли подумати, що Quacks буде гарним місцем для використання змінних, що, якщо рядок повторюється купою, але змінні надходять з достатньою накладними витратами, що кожен спосіб, коли я намагався це зробити, збільшував код. Можливо, це знак, що я не повинен гольфувати чорнилом.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.