Утка, утка, ушла!


40

Вот (довольно страшная) песня Five little ducks (она не длинная):

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

3
Любая причина, что заглавные буквы на "Материнской утке" и "Материнской утке" отличаются в 2 местах, которые это использует в последнем стихе?
Холод

Ответы:


3

Stax , 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
@ Шэгги Отлично сделано. Благодарность!
Арно,

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

@ovs Спасибо, я получил 263 за то, что переписал некоторые вещи и использовал T[2:]вместо нихT[-2:]
Black Owl Кай

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

Ввод осуществляется через уже существующую таблицу яс VARCHAR(MAX)полемv, соответствии с нашими правилами IO .

После пары сохраняющих байты 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используются для разбиения строки на строки и столбцы с помощью- и .разделители.

Первый столбец - это ключевой символ, который сопоставляется с третьей буквой входного стиха (спасибо за идею, @ Night2). Второе и третье - замены, выполняемые для этого стиха.


Первое решение: если вы используете «CHAR (700)» вместо «VARCHAR (MAX)», вы можете сохранить 3 байта. Также в вашей «маленькой утке» вместо этого вы можете сделать «маленькую утку» и убрать е перед # на каждой замене, чтобы получить еще 3.
CDC

Кстати, действительно забавное решение. Я использовал форматирование сообщений, чтобы приблизиться к вам, но не совсем.
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 довольно разрешительный с пробелами, поэтому я бы попытался удалить некоторые из ваших пробелов. Например, вам не нужны места вокруг =. Наконец, у нас есть страница для игры в гольф на питоне, которую вы можете посетить, чтобы улучшить свою игру.
Пшеничный волшебник

вау @ SriotchilismO'Zaic! это полезно .. спасибо! :)
Прачити Пракаш Прабху

1
Вы можете легко изменить это, удалив ненужные пробелы и переменные, избегая импорта sys, используя, например raw_input(), укорочение ключа словаря и т. Д. Вы должны определенно вынуть повторяющиеся фрагменты песни и добавить их отдельно
Jo King

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

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

Баш , 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соответственно.

Тогда мы просто делаем то, что чернила делают лучше всего, и печатаем простой текст, заправленный условными обозначениями. Сначала я попытался использовать операторы switch, но, хотя это выглядело лучше, на самом деле это длилось дольше.
Вы могли бы подумать, что Quacks будет хорошим местом для использования переменных, например, когда строка повторяется несколько раз, но переменные идут с достаточными накладными расходами, что каждый способ, который я пытался сделать, делал код длиннее. Может быть, это признак того, что я не должен играть в гольф чернилами.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.