오리, 오리!


40

다음은 (quite scary) 5 마리의 작은 오리 노래입니다 (길이는 아님).

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
가능한 중복 . 농담 :)
Night2

7
당신은 방금 나를 화나게했습니다.
A _

2
그 노래 가사는 확실히 감정의 롤러 코스터를 통과하게 만들었습니다.
Num Lock

2
어제 여기에 게시 한 YouTube 비디오를 두 번, 두 번 들었습니다. 이제 그 노래가 내 뇌에 내장되어 있습니다. 어디를 가든, 내가하는 모든 일을 계속 듣고 있습니다! 도움말 ...
Night2

답변:


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
"작은 오리"로 실행하면 "작은 오리의 작은 오리가 돌아 왔습니다."라고 응답합니다. 마지막 줄에.
Dorian

1
버그는 무료로 수정되었습니다. 압축 된 문자열 리터럴 또는 최종 프로그램에서 변경 사항이 정확하게 바이트 정렬되지 않기 때문에 실제로는 2 바이트 비용과 다른 곳에서 2 바이트 절약을 상쇄했습니다. 여기서는 바이트를 측정하기가 어렵습니다.
재귀

19

자바 스크립트 (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을 사용하여 비트 단위 AND를 수행합니다. 구문 분석은 첫 번째 유효하지 않은 문자에서 중지되며

 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

자바 스크립트 (Node.js) ,  233231  227 바이트

@Shaggy 덕분에 2 바이트 절약

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 멋지게 끝냈습니다. 감사!
Arnauld

2
exec페이지 를 새로 고침 할 때 다른 의견을 게시했습니다 . 좋은 마음 ...!
얽히고 설킨

11

파이썬 3 , 267263254 바이트

@ovs 덕분에 4 바이트 절약

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

대체 파이썬 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)파이썬 2에서 262 바이트입니다.
ovs

@ovs 고마워, 나는 물건을 재정렬하고 T[2:]대신 사용하여 263에 도달했습니다T[-2:]
Black Owl Kai


7

자바 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, 407390 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

몇 바이트 절약 후 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

CASE명령문과 STUFF명령을 사용 하여 나열된 위치에 문자를 삽입 / 덮어 씁니다.

EDITS :

  1. 원본 (아래)을 완전히 다른 전략으로 교체
  2. 공백 LEFT대신 에 전환 SUBSTRING하고 공간을 제거하여 2 바이트 절약
  3. 변수를 변경 CHAR하고 추가 문자를 두 번째 문자로 이동하여 6 바이트를 절약했습니다 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_SPLITPARSENAME행과 열을 통해에 캐릭터 중단하는 데 사용됩니다 -.분리기.

첫 번째 열은 입력 구절의 세 번째 문자와 일치하는 핵심 문자입니다 (@ Night2 아이디어 덕분). 두 번째와 세 번째는 그 구절에 대한 대체품입니다.


첫 번째 해결책은 "VARCHAR (MAX)"대신 "CHAR (700)"을 사용하면 3 바이트를 절약 할 수 있습니다. 또한 "작은 오리"에서, 대신 "e 작은 오리"를하고 교체 할 때마다 # 전에 e를 제거하여 또 다른 3을 얻을 수 있습니다.
CDC

BTW, 정말 재미있는 솔루션. 나는 formatmessage를 사용하여 당신에게 매우 가까웠 지 만 아주 아닙니다.
CDC

좋은 제안, @CDC, 감사합니다!
BradC

6

파이썬 2 , 1034 바이트

이것은 내 코드입니다! 간단한 사전을 사용합니다. 이 코드를 실행 한 후 어떤 구절을 입력하면 다음 구절이 출력됩니다.

추신 : 저는이 채널을 처음 사용하며 이것이 첫 번째 게시물입니다. 나는이 도전을 정말로 좋아했기 때문에 시도해보기로 결정했습니다. 자유롭게 고쳐주세요.

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)을 사용할 수 있습니다. 예를 들어 주위에 공백이 필요하지 않습니다 =. 마지막으로 파이썬으로 골프를 즐기기위한 페이지 가 있습니다.
밀 마법사

와우 @ SriotchilismO'Zaic! 도움이되었습니다. 감사합니다! :)
Prachiti Prakash Prabhu

1
불필요한 공백과 변수를 제거 sys하여 예를 들어 raw_input()사전의 키를 짧게하는 등의 방법으로 가져 오기 를 피함으로써 쉽게 골프를 칠 수 있습니다 . 노래의 반복 된 부분을 꺼내서 별도로 추가해야합니다
Jo King

@ JoKing은 내가 언급 한 첫 번째 게시물이며 이것에 대해 많이 생각하지 않았습니다. 시도해보고 싶었지만 이제 아이디어를 얻었습니다. 다음 게시물은 이것보다 훨씬 더 좋고 짧아 질 것입니다. 여러분 모두에게 감사합니다. :)
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을 사용하는 것을 바꿉니다 .

유일한 흥미로운 점은 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 바이트

대체로 단일 구절을 인코딩하려고 시도했지만 결국 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

배쉬 , 373355 바이트

여기서 너무 미친 것도 없습니다. 적은 바이트 감소는 두 문자 변수 (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

펄 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다른 곳에서 발생하지 않습니다, 당신은에서 두 번째와 네 번째 구절을 구별 할 수있다 제하며 확인하여 제 FiTh각각.

그런 다음 잉크가 가장 잘 작동하는 것을 수행하고 조건부와 함께 일반 텍스트를 인쇄합니다. 처음에는 switch 문을 사용해 보았지만 더 멋지게 보이지만 실제로는 더 길어졌습니다. s는 변수를 사용하기에 좋은 장소
라고 생각할 Quack것입니다. 문자열이 여러 번 반복되는 것입니다.하지만 변수는 내가 시도하는 모든 방법으로 코드를 더 길게 만들 수있는 충분한 오버 헤드가 있습니다. 어쩌면 그것은 잉크로 골프를해서는 안되는 신호 일 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.