Ördek, ördek, gitti!


40

İşte (oldukça korkutucu) Beş küçük ördek şarkısı (uzun değil):

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.

Görevin bu şarkıyı çıkarmak değil. Bir ayeti almalı ve bir sonraki ayeti çıkarmalısınız (son ayetin bir sonraki ayeti ilk ayettir).

kurallar

  • Standart boşluklar yok, lütfen.
  • Giriş / çıkış standart giriş / çıkış yöntemlerimizle alınacaktır.
  • Kesin ayet outputted gerekir ve şarkı sözleri ile karşılaştırıldığında fark olmamalıdır. Giriş, şarkı sözleri ile karşılaştırıldığında da farklı olmayacak.

Örnekler

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.

Beklenen:

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.

Beklenen:

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
Aylar önce, gençken bunun biraz farklı olduğunu hatırlıyorum. Ama bununla travma geçirdiğini de hatırlıyorum! Kayıp ördeklerin hepsi o günler için neredeydi? Neden kimse onları aramıyordu? Nasıl bir sorumsuz anne bu kadar çok çocuğunu kaybetmeyi başarabiliyor ve geri kalanlarının oyun oynamasına izin veriyor ?! Korku!
Shaggy

8
Olası kopya . Sadece şaka :)
Night2

7
Az önce beni taşladın.
_

2
Bu şarkı sözleri beni bir sürü duygu altından geçirmemi sağladı.
Num Lock

2
Dün burada iki kez, sadece iki kez yayınladığım YouTube videosunu dinledim. Şimdi bu şarkı beynime gömülü, gittiğim her yere, yaptığım her şeyi duymaya devam ediyorum! Yardım ...
Gece2

Yanıtlar:


3

Stax , 115 111 bayt

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

Koş ve hata ayıkla

Test durumları olarak tüm ayetler


1
"Bir küçük ördek" ile çalıştırdığınızda, "küçük ördeklerin küçük ördek ve küçük ördek ördekleri geri döndü" yanıtını veriyor. Son satırda.
Dorian

1
Hata, boyutsuz olarak düzeltildi. Aslında 2 baytlık bir maliyetle ilgiliydi ve ve baytların ölçülmesi zor olsa da, 2 baytlık tasarrufları başka bir yerde dengelemek, değişikliklerin tam olarak bayt olmadığından, sıkıştırılmış dize değişmezleri içinde, hatta son programda bile değildi.
özyinelemeli

19

JavaScript (ES9), 227 bayt

Bu, aşağıdaki Düğüm sürümüne benzer, ancak girdi ayetini tanımlamak parseInt()yerine temel alan bir formül kullanır Buffer().

Bu ES2018 (aka ES9) çünkü /sbayrakla ( dotAll ) düzenli bir ifade kullanıyoruz .

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)

Çevrimiçi deneyin!

Nasıl?

Bu versiyonda, girişin tüm ayetini taban 30 ( 0to t) olarak ayrıştırırız ve bit yönünde VE 7 ile gerçekleştiririz.

 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 bayt

@Shaggy sayesinde 2 bayt kaydedildi

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)

Çevrimiçi deneyin!

Nasıl?

Her giriş ayetinin üçüncü karakteri benzersiz bir tanımlayıcı olarak kullanılabilir. ASCII kod modulo 9'u alarak şunları elde ederiz:

 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

Çıktı ayetleri aşağıdaki şablonlarla kodlanmıştır:

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

Her hanenin aşağıdaki tabloya göre bir dizeyle değiştirildiği yer:

 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 '

Düzenli ifadenin / w.*\n/sbu ortak bölümü girdiden aldığı yer:

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

Sonunda, girişin son 11 karakterini ekliyoruz " came back.".



1
@Shaggy Güzel bitti. Teşekkürler!
Arnauld

2
execSayfa yeniden yüklendiğinde önermek için başka bir yorum yazıyordum. Büyük beyinler ... !
Shaggy

11

Python 3 , 267 263 254 bayt

@Ovs sayesinde 4 bayt kurtarıldı

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

Çevrimiçi deneyin!

İlgili parçaları bir sonraki ayetin ilgili kısımlarıyla değiştirerek çalışır.

Preinitialisation sonra Tise ['8', '9', 'and all of the little ducks', 'One little duck', 'but none of the little ducks', 'Two little ducks', 'but only one little duck', 'Three little ducks', 'but only two little ducks', 'Four little ducks', 'but only three little ducks', 'Five little ducks', 'but only four little ducks', 'Mother duck herself'].

Alternatif Python 2,252 bayt

@ovs tarafından

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

Çevrimiçi deneyin!


for a in zip(T,T[-2:]+T):s=s.replace(*a)264 bayt için
ovs

Veya lambda s:reduce(lambda s,a:s.replace(*a),zip(T,T[-2:]+T),s)Python 2. 262 byte için
Ovs

@ovs Teşekkürler, 263'e bazı şeyleri yeniden alıp T[2:]yerine kullanmakla aldımT[-2:]
Black Owl Kai


7

Java 10, 347 bayt

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

Çevrimiçi deneyin.

Açıklama:

[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 bayt

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

benVARCHAR(MAX)v

Bir kaç bayt tasarruftan sonra REPLACE, aşağıdakileri dinamik SQL olarak çalıştırır:

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

Listelenen konumlarda karakter eklemek / üzerine yazmak için bir CASEifade ve STUFFkomutlar kullanır .

EDİTLER :

  1. Orijinali (aşağıda) tamamen farklı bir strateji ile değiştirin
  2. Boşluk LEFTyerine geçiş yapıp onu SUBSTRINGkaldırarak iki bayt kurtardı
  3. Değişkeni değiştirerek CHARve ikinci bir harfe hareket ettirerek 6 bayt kurtarıldı REPLACE(teşekkürler, @CDC!)

İşte benim ilk versiyonum, farklı bir yöntem kullanarak (değiştirme sonrası, formatlanmış):

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_SPLITve PARSENAMEbir dizgiyi satır ve sütunlara -ve .ayırıcılara ayırmak için kullanılır.

İlk sütun, giriş ayetinin 3. harfine karşılık gelen anahtar bir karakterdir (fikir için teşekkürler, @ Night2). İkinci ve üçüncü, bu ayet için yapılan değişikliklerdir.


İlk çözüm, "VARCHAR (MAX)" yerine "CHAR (700)" kullanıyorsanız, 3 bayt tasarruf edebilirsiniz. Ayrıca "küçük ördek" inizde, "küçük ördek" yerine "e küçük ördek" yapabilir ve başka bir 3 elde etmek için her değiştirme işleminden önce e sayısını kaldırabilirsiniz.
CDC

BTW, gerçekten eğlenceli bir çözüm. Size çok yaklaşmak için biçimlendirme kullandım, ama tam olarak değil.
CDC

İyi öneriler, @CDC, teşekkürler!
BradC

6

Python 2,1034 bayt

Bu benim kodum! Basit bir sözlük kullanır. Bu kodu çalıştırdıktan sonra, herhangi bir ayeti girebilirsiniz ve bir sonraki ayeti yazacaktır.

Not: Bu kanalda yeniyim ve bu benim ilk gönderim. Bu meydan okumayı çok beğendim, denemeye karar verdim. Lütfen beni düzeltmek için çekinmeyin.

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
Siteye Hoşgeldiniz! Genellikle sözlüğü kaynağın bir parçası olarak sayardık. İşin zorluğunun bir kısmı, bunu mümkün olduğu kadar küçük yapmaktır. Bunu kısaltmanın birkaç yolu var. 1) Okunabilir olmak için herhangi bir puan almadığınız için, tek karakterli değişken isimlerini kullanabilirsiniz (örn. xVeya a) 2) Python, boşlukla oldukça izinlidir, bu yüzden boşluklarınızı da kaldırmayı denerim. Mesela etrafta boşluklara ihtiyacınız yok =. Son olarak biz sahip sayfasını oyununuz kadar size ziyaret edebilirsiniz python golf için.
Buğday Sihirbazı

vay @ SriotchilismO'Zaic! bu yararlı .. teşekkür ederim! :)
Prachiti Prakash Prabhu

1
Gereksiz boşlukları ve değişkenleri kaldırarak, sysörneğin raw_input(), anahtar kelimeyi kısaltarak, vb. Kullanarak içe aktarmayı önleyerek kolayca golf yapabilirsiniz . Şarkının tekrarlanan bölümlerini kesinlikle çıkarmalı ve ayrı ayrı eklemelisiniz
Jo King

@JoKing dediğim gibi bu benim ilk gönderim ve bu konuda fazla düşünmedim. Sadece denemek istedim ama şimdi anlıyorum. Bir sonraki yazım bundan çok daha iyi ve daha kısa olacak - hepsi için teşekkürler. :)
Prachiti Prakash Prabhu

6

PHP (7.4), 253 247 bayt

-6 bayt değiştirme dizisi "dizileri açma" dan daha fazla yardımı ile inşa edilmesini geliştirerek.

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

Çevrimiçi deneyin!

Bu, bir key=>valueformatta mümkün olan her değiştirme (12 kullanılmış + 2 kullanılmamış) dizisini oluşturur . Örnek:['Mother duck herself' => 'Five little ducks', etc...] ve sonra sadece strtr kullananları değiştirir .

Tek ilginç şey ilk defa "Dizilerin içinde açmak" kullanımı. olan, PHP 7.4'teki yeni bir özellik olan olan .


PHP , 264 bayt

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

Çevrimiçi deneyin!

Her ayette farklı kelimeleri bir dizide sakladım. Girişin hangi ayetin benzersiz olduğunu ( vuroet) olduğu gibi girişin üçüncü karakterini kullandığını tespit ediyorum . Sonra basitçe bu ayetin farklı sözlerini bir sonraki ayetin farklı sözleriyle değiştirdim.


5

Temiz , 352 bayt

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

Çevrimiçi deneyin!



3

PowerShell , 356 343 340 336 bayt

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

Çevrimiçi deneyin .

Daha okunabilir sürüm:

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 bayt

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

Çevrimiçi deneyin!

İfadeyi bulmak için kaba kuvveti kullandım +"$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 için teşekkürler 3rd char.


2

Japt v2.0a0, 143 bayt

Değiştirmeleri olan tek bir ayeti kodlamaya çalıştım ama sonunda Arnauld'un çözümünü uyarlamak daha kısa sürdü . Başka bir fikrim var, umarım tekrar daha kısa sürede çalışabilir ancak ne zaman deneyeceğimi bilmiyorum.

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

Deneyin - tüm ayetleri içerir


2

Bash , 373 355 bayt

Burada çok çılgın bir şey yok. Basit bir kaç baytlık azaltma, iki karakterli değişkenleri (a1, a2, a3, e1..e6) tek karakterli değişkenlerle değiştirmek olacaktır.

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

Çevrimiçi deneyin!

Çevrimiçi deneyin!


2

05AB1E , 134 bayt

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

Çevrimiçi deneyin!

05AB1E için nispeten yeni olduğum için, bu muhtemelen çok fazla golf oynayabilir

                ### 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 bayt

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

Çevrimiçi deneyin!

Kesinlikle golf oynamak, özellikle formdaki listede yer alan son 5 eleman "num $l num-1"veya eski girişin doğru kısımlarına uyan başlangıç regex'i .


1

Mangal kömürü , 156 bayt

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

Çevrimiçi deneyin!Bağlantı, kodun ayrıntılı bir versiyonudur. Açıklama:

≔⌕tvuroe§θ²δ

İstediğimiz dizeyi bulmak için ilk çizginin üçüncü karakterine bakın.

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

Çıktı dizeleri listesine endeksleme tarafından ilk satırın ilk bölümü Five, Four, Three, Two, One, Mother duck herself. Sonra yazdır little duckves uygun şekilde, ardından girdi satırının son 18 karakterini (her ayette her zaman aynı olan) izleyin.

⸿η⸿ζ⸿

Ortadaki iki çizgi her ayette daima aynıdır.

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

Son satırda little ducks, bazı nedenlerden dolayı alternatifler listesine dahil edilmek üzere golfçü olduğu ortaya çıkıyor , ancak son 11 karakter hala girdiden kopyalanıyor.


1

mürekkep , 353 bayt

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

Çevrimiçi deneyin!

İlk olarak, çekler alt dize kullanır anlamaya ne konum ayet - başında sayıların harf kolay yeterince sayesinde olduğunu - F, Tve Odiğer herhangi bir yerde meydana gelmez ve ikinciye ve dördüncü ayet ayırt edebilir ayrıca kontrol ederek birinci ve üçüncüFi ve Thsırasıyla .

Sonra mürekkebin en iyisini yaptığını yaparız ve koşullu metinlerden oluşan düz metinler basarız. İlk başta switch ifadelerini kullanmayı denedim, ancak bu daha hoş görünmekle birlikte aslında daha uzun sürdü. S değişkenleri kullanmak için iyi bir yer
olacağını düşünürsünüz Quack, ne bir dize bir demet tekrarlanırsa, ama değişkenler baştan aşağı gelsin, bunu yapmaya çalıştığım her şey daha uzun sürdü. Belki de bu, mürekkeple golf oynamamamın bir işaretidir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.