컴퓨터는 상쾌한 쿠키를 맛보지 않을 것입니다


11

에서 영감을 github.com/JackToaster/Reassuring-Parable-Generator 차례로에서 영감을 xkcd.com/1263 . 가능한 단어는 해당 저장소 의 reassuring.cfg 에서 파생됩니다 .

출력이 일치하는 문법을 보려면 reassuring.cfg (12 번째 커밋 사용) 를 살펴보십시오 (출력은 문법과 일치하는 모든 문자열의 목록입니다).

작업 : 프로그램은 pastebin pastebin.com/2SNAJ1VH에 포함 된 정확한 텍스트의 대 / 소문자를 구분하여 7968 줄을 모두 출력해야합니다 . Pastbin 사본은 Wayback Machine에 저장됩니다.

다음은 pastebin에서 33 개의 동기 부여 선 샘플입니다.

Computers can't enjoy a salad.
Computers can't enjoy a cake.
Computers can't enjoy a ice cream cone.
Computers can't enjoy a meal.
Computers can't enjoy a drink.
Computers can't enjoy a steak.
Computers can't enjoy a chicken dinner.
Computers can't enjoy a piece of cake.
Computers can't enjoy a piece of pie.
Computers can't enjoy a cookie.
Computers can't enjoy a sandwich.
Computers can't taste a salad.
Computers can't taste a cake.
Computers can't taste a ice cream cone.
Computers can't taste a meal.
Computers can't taste a drink.
Computers can't taste a steak.
Computers can't taste a chicken dinner.
Computers can't taste a piece of cake.
Computers can't taste a piece of pie.
Computers can't taste a cookie.
Computers can't taste a sandwich.
Computers can't experience eating a salad.
Computers can't experience eating a cake.
Computers can't experience eating a ice cream cone.
Computers can't experience eating a meal.
Computers can't experience eating a drink.
Computers can't experience eating a steak.
Computers can't experience eating a chicken dinner.
Computers can't experience eating a piece of cake.
Computers can't experience eating a piece of pie.
Computers can't experience eating a cookie.
Computers can't experience eating a sandwich.

도전 규칙 :

  • 라인 출력은 원하는 방식으로 주문할 수 있지만 7968을 모두 포함해야합니다.
  • 출력은 문자열 목록이 아닌 단일 플랫 문자열이어야합니다.
  • 프로그램은 입력을받지 않거나 비어있는 사용되지 않은 입력을 받아 들여야합니다.
  • 귀하의 프로그램은 온라인 소스에서 데이터를 가져올 수 없습니다.
  • 단일 후행 줄 바꿈은 선택 사항입니다.

이것은 이므로 가장 짧은 코드가 승리합니다.



4
No computer {can} {action}.두 번 반복되고 Computers {cannot_present}"컴퓨터를 사용할 수 없습니다"와 같은 문구를 생성합니다. 의도적인가?
darrylyeo

pastebin의 명백한 실수는 모든 프로그램의 출력에 포함되어야합니다 (과거 프로그램의 사양은 변경할 수 없음). reassuring.cfg는 최소한 아주 정확한 샘플 문법입니다.
fireflame241

이 ID에서 경쟁하려면 입력 항목에 대한 구문 분석기를 작성해야합니다.
매직 문어 Urn

참고로 Bubblegum 솔루션에 대한 TIO 링크 가 너무 길어서 답을 구할 수 없습니다. 소스 코드는 23270 바이트입니다.
musicman523

답변:


7

Zsh , 765 바이트

이것은 내가 zsh로 작성한 첫 번째 일 수 있지만 배열을 중괄호 확장으로 변환 할 수있는 매우 편리한 기능을 가지고 있습니다 (그렇지만 편리하지는 않지만 ... ). 로 실행합니다 zsh -P(+1 바이트로 계산) RC_EXPAND_PARAM.

a=able\ to
b=" be $a"
d=wonderful
i=ing\ a
o=omputer
n="No c$o "
r=ever
p=capable\ of
u=will
w=$u\ n$r
x=experienc
e=(\ {{{enjoy,tast,$x'ing eat'}$i,tast$i\ {delicious,fresh,tasty,refreshing,$d}}\ {salad,cake,'ice cream cone',meal,drink,steak,chicken\ dinner,'piece of '{cake,pie},cookie,sandwich},{understand$i,{enjoy,$x}$i{,\ {beautiful,$d,{inspir,amaz}ing,superb}}}\ {son{net,g},poem,story,play,'piece of music'}}.)
f=(${e:s/cing/ce/:s/sting/ste/:s/ding/d/:s/ying/y})
l=($w won\'t$b {$w,n$r\ $u}{$b,' have the ability to'})
v=($l "won't $r$b")
k=({ca,wo}n\'t $l is{"n't ",\ un}$a)
c=(C$o\s A\ c$o)
printf %s\\n $c\ $k$f C$o's '$v$f $n{can,is\ $a,$u\ $r$b,"is $r going to",{can,$u}\ $r}$f{,} $c\ {is{\ in,"n't "}$p,"cannot $x"e}$e $n{{is,$u\ be}\ $p,"can $x"e}$e

온라인으로 사용해보십시오!


4

자바 스크립트 (ES6), 1234 1091 바이트

시작하기에 좋은 바이트 수입니다! 그 거대한 끈을 내려 놓을 시간입니다.

f=

_=>(G=`beautiful|wonderful|inspiring|amazing|superb
sonnet|poem|story|play|song${p=`|piece of `}music
cake${p}cake${p}pie|salad|ice cream cone|meal|drink|steak|chicken dinner|cookie|sandwich
delicious|fresh|tasty|refreshing|wonderful
can|is ${a=`able to`}|is ever going to|can ever|will ever${b=` be `+a}|will ever
is ${C=`capable of`}|will be ${C}|can${E=` ${e=`experience`}
${w=`will never`}${b}|${w}${h=` have the ability to|never will`}${h}${b}|won't${b}|${w}|won't`} ever${b}
isn't ${C}|is in${C}|cannot${E}|can't|isn't ${a}|is un${a}`.split`
`.map(l=>l.split`|`),F=S=>[].concat(...S.split`|`.map(s=>eval(s.match(/\d/g).map(n=>`for(f[${n}]of G[${n}])`).join``+`A.push(s.replace(/\\d/g,n=>' '+f[n]));A`,A=[]))),G[9]=F(p=`enjoy a2|taste a2|${e} eating a2|taste a32|enjoy a1|${e} a1|enjoy a01|understand a1|${e} a01`),G[9]=F(p=`${e=`enjoy`} a2|taste a2|${e} eating a2|taste a32|enjoy a1|${e} a1|enjoy a01|understand a1|${e} a01`),G[0]=F(p.replace(/([^g])e? (a|e)/g,'$1ing $2')),F(`C${o=`omputer`}s89.|A c${o}89.|C${o}s69.|No c${o}49.|C${o}s70.|A c${o}70.|No c${o}50.|No c${o}49.`).join`
`)

document.write('<pre>'+f())

덜 골프 :

f=

_=>(

G=`beautiful|wonderful|inspiring|amazing|superb
sonnet|poem|story|play|song${p=`|piece of `}music
cake${p}cake${p}pie|salad|ice cream cone|meal|drink|steak|chicken dinner|cookie|sandwich
delicious|fresh|tasty|refreshing|wonderful
can|is ${a=`able to`}|is ever going to|can ever|will ever${b=` be `+a}|will ever
is ${C=`capable of`}|will be ${C}|can${E=` ${e=`experience`}
${w=`will never`}${b}|${w}${h=` have the ability to|never will`}${h}${b}|won't${b}|${w}|won't`} ever${b}
isn't ${C}|is in${C}|cannot${E}|can't|isn't ${a}|is un${a}`.split`
`.map(l=>l.split`|`),

F=S=>[].concat(...S.split`|`.map(s=>eval(s.match(/\d/g).map(n=>`for(f[${n}]of G[${n}])`).join``+`A.push(s.replace(/\\d/g,n=>' '+f[n]));A`,A=[]))),

G[9]=F(p=`enjoy a2|taste a2|${e} eating a2|taste a32|enjoy a1|${e} a1|enjoy a01|understand a1|${e} a01`),
G[9]=F(p=`${e=`enjoy`} a2|taste a2|${e} eating a2|taste a32|enjoy a1|${e} a1|enjoy a01|understand a1|${e} a01`),

G[0]=F(p.replace(/([^g])e? (a|e)/g,'$1ing $2')),

F(`C${o=`omputer`}s89.|A c${o}89.|C${o}s69.|No c${o}49.|C${o}s70.|A c${o}70.|No c${o}50.|No c${o}49.`).join`
`

)

document.write('<pre>'+f())


어떻게?

(이것은 지금까지 내가 가장 좋아하는 골프 중 하나입니다!)

문법은 다음 G과 같이 평가 되는 배열에 저장됩니다 .

[["beautiful","wonderful","inspiring","amazing","superb"],
 ["sonnet","poem","story","play","song","piece of music"],
 ["salad","cake","ice cream cone","meal","drink","steak","chicken dinner","piece of cake","piece of pie","cookie","sandwich"],
 ["delicious","fresh","tasty","refreshing","wonderful"],
 ["is capable of","can experience","will be capable of"],
 ["can","is able to","is ever going to","can ever","will ever be able to","will ever"],
 ["will never be able to","will never have the ability to","never will have the ability to","never will be able to","won't ever be able to","will never","won't be able to"],
 ["is incapable of","isn't capable of","cannot experience"],
 ["can't","won't","will never","won't be able to","will never be able to","will never have the ability to","never will have the ability to","never will be able to","isn't able to","is unable to"]]

F문자열을 구분 기호로 나누고 |반복 하는 함수입니다 . 여태까지는 그런대로 잘됐다.

F=S=>[].concat(...S.split`|`.map( ... )),

이제이 내부 기능은 어떻게 되나요?

s=>eval(
    s.match(/\d/g).map(n=>`for(F[${n}]of G[${n}])`).join``+
    `A.push(s.replace(/\\d/g,n=>F[n]));A`,
    A=[]
)

먼저 배열을 초기화합니다 A. 그리고 우리가 전달 된 문자열에있는 모든 숫자를 발견 s하고 서브 프로그램 구축 : 각 숫자를 사용하여 n, 우리는 생성 for- of의 항목을 반복하는 것을 루프 G[n](의 속성으로 저장 F자바 스크립트 함수 이후는, 또한 객체이다)를. 그런 다음 루프가 차례로 추가됩니다.

예를 들어, 생성 된 하위 프로그램 s="1 2 3"은 다음과 같이 시작됩니다.

for(F[1]of G[1])for(F[2]of G[2])for(F[3]of G[3])

각 반복에서 서브 프로그램은 각 숫자를에 s대응하는 대체로 대체하고에 저장 F[n]하며 결과는로 푸시됩니다 A. 서브 프로그램이 작성 eval되고 A내재적으로 리턴됩니다.

for(F[1]of G[1])for(F[2]of G[2])for(F[3]of G[3])A.push(s.replace(/\d/g,n=>F[n]));A

을 사용 F하여 나머지 프로그램은 단순히 존재하는 생산 규칙에서 나머지 문법을 작성합니다. 대체는의 단일 숫자 색인으로 간단히 정의됩니다 G.


좋은 것! 그러나 함수가 호출되지 않으면 충돌이 발생합니다 f. 따라서 f=바이트 수에 추가해야합니다.
Arnauld

(이것은 F대신 에 재사용하여 해결할 수 있다고 생각합니다 f.)
Arnauld

@Arnauld 잘 잡아라.
darrylyeo

4

PHP, 877 바이트

아 그거 재미 있었어!

for($p="piece of ";$c="AEIMQUY]aeBFJNRVZ^bfQUY]iIMCGKOSWmqunrvoswCGKOSW"[$m++];)foreach([409,T19,"71 eat59",T19delicious,T1916,T19Ty,T19re165,T1914,409,719,40912,40914,409105,409115,40913,understand09,71912,71914,719105,719115,71913]as$i=>$v)foreach($i<8?[salad,cake,"ice cream cone",meal,drink,steak,"chicken dinner",$p.cake,$p.pie,cookie,sandwich]:[sonnet,poem,story,play,song,$p.music]as$u)echo trim(strtr([C17s,"A c17","No c17"][$o=3&$d=ord($c)-65]." ".($o&2?[6,is3,"is 8 go5 to","6 8","2 8 be3","2 8",11=>"is 15","6 7e","2 be 15"]:["6't",$t="won't",$w="2 n8","$t be3","2 n8 be3",$w.$z=" have the ability to","n8 2$z","n8 2 be3","isn't3","is unable to","$t 8 be3","is in15","isn't 15","6not 7e"])[$d/4]." $v",($c>l?[ing,ing]:["",e])+[2=>will," able to",enjoy,ing,can,experienc,ever," a ",inspir,amaz,beautiful,superb,wonderful,"capable of",fresh,omputer,T=>tast]))," $u.
";

가능하다면 한 바이트 더 파고 들으십시오.

언 골프

while($c="AEIMQUY]aeBFJNRVZ^bfQUY]iIMCGKOSWmqunrvoswCGKOSW"[$p++])
    foreach(["enjoy0 a","tast1 a","experienc1 eating a","tast1 a delicious","tast1 a fresh","tast1 a tasty","tast1 a refreshing","tast1 a wonderful",
    "enjoy0 a","experienc1 a","enjoy0 a beautiful","enjoy0 a wonderful","enjoy0 a inspiring","enjoy0 a amazing","enjoy0 a superb",
    "understand0 a","experienc1 a beautiful","experienc1 a wonderful","experienc1 a inspiring","experienc1 a amazing","experienc1 a superb"]as$i=>$v)
        foreach($i<8
            ?[salad,cake,"ice cream cone",meal,drink,steak,"chicken dinner","piece of cake","piece of pie",cookie,sandwich]
            :[sonnet,poem,story,play,song,"piece of music"]
        as$u)
            echo[Computers,"A computer","No computer"][$o=3&$d=ord($c)-65]," ",
                ($o&2
                    ?[can,"is able to","is ever going to","can ever","will ever be able to","will ever",11=>"is capable of","can experience","will be capable of"]
                    :["can't","won't","will never","won't be able to","will never be able to","will never have the ability to","never will have the ability to","never will be able to","isn't able to","is unable to","won't ever be able to","is incapable of","isn't capable of","cannot experience"]
                )[$d/4]," ",
                strtr($v,$c>l?[ing,ing]:["",e]),
                " $u.\n"
            ;

설명

출력은 각각 166 라인의 48 청크로 분할 될 수 있습니다. 각 청크 내에서 각 줄은 Computers|A computer|No computer14 개의 음수 (for ComputersA computer) 또는 9 개의 양수 (for No computer) 기능 중 하나로 시작 합니다.
이 청크를 각각 6 비트 (3 개의 다른 주제-> 하위 2 비트; 양수 및 음수 캡 공유 키-> 상위 4 비트)로 인코딩했으며 값을 ASCII 코드로 사용하기 위해 65를 추가했습니다.

이 청크 내에서 11 가지 다른 음식에 대한 8 개의 동사 / 형용사 조합과 6 개의 다른 예술에 대한 13 가지의 다른 조합은 항상 같은 순서로; 동사 / 형용사 키를 사용하여 다음 루프에서 음식이나 음료를 나열해야하는지 간단히 확인할 수 있습니다.

한 가지 까다로운 부분이 남았습니다. 일부 대문자에는 동사의 형태가 필요합니다. 그리고 동사 중 일부 e는 변환 에서을 잃습니다 . 한도 지수는 그것이 필요한지 아닌지를 알려줍니다.
(그리고 인코딩의 비트 순서 덕분에 간단히 비교를 위해 ASCII 문자를 사용할 수 있습니다).
그러나 어떻게? 잠시 동안 정규 표현식으로 저글링 한 후 간단히 1위치 e를 바꿔야 ing0위치 ing와 추가 strtr해야 할 위치를 넣고 작업을 수행하십시오.

그것이 위의 ungolfed 버전의 이야기입니다. (1199 바이트 압축)


골프는 3 단계로 주로 구성 :

  1. 가장 많이 사용 된 문자 시퀀스는 변수에 저장되었습니다.
  2. strtr변수를로 이동하기 위해 주제를 제외한 모든 항목으로 확장되었습니다 strtr.
  3. 대부분의 서열은 변수에서로 이동되었습니다 strtr.

19 번째 단어 tast인을 대문자로 바꾸어 두 개의 인용 부호를 제거했습니다.


동사 / 형용사 조합을 인코딩하면 어떻게 될지 궁금합니다.
어쩌면 나는 Zsh를 이길 수 있었다. 하지만 시도해 볼만한 것이 있는지 잘 모르겠습니다.


1

레티 나, 1249 1192 바이트


CFs 1 5.¶A cF 1 5.¶C O nG beH 5.¶C O nGKtheJto 5.¶C nG OKtheJto 5.¶C nG O beH 5.¶C won't G beH 5.¶C O nG 5.¶C won't beH 5.¶nNo cF 3 5.¶C 2 6.¶A cF 2 6.¶nNo cF 4 6.¶nNo cF 3 5.
1
can't$%'¶$%`won't$%'¶$%`O nG$%'¶$%`won't beH$%'¶$%`O nG beH$%'¶$%`O nGKtheJto$%'¶$%`nG OKtheJto$%'¶$%`nG O beH$%'¶$%`isn'tH$%'¶$%`is unIto
2
is incapIof$%'¶$%`isn't capIof$%'¶$%`cannot De
3
can$%'¶$%`isH$%'¶$%`is G goQ to$%'¶$%`can G$%'¶$%`O G beH$%'¶$%`O G
4
is capIof$%'¶$%`can De$%'¶$%`O be capIof
5
E a 8$%'¶$%`Le a 8$%'¶$%`De eatQ a 8$%'¶$%`Le a 7 8$%'¶$%`E a 9$%'¶$%`De a 9$%'¶$%`E a B 9$%'¶$%`P a 9$%'¶$%`De a B 9
6
EQ a 8$%'¶$%`LQ a 8$%'¶$%`DQ eatQ a 8$%'¶$%`LQ a 7 8$%'¶$%`EQ a 9$%'¶$%`DQ a 9$%'¶$%`EQ a B 9$%'¶$%`PQ a 9$%'¶$%`DQ a B 9
7
delicious$%'¶$%`fresh$%'¶$%`Ly$%'¶$%`refreshQ$%'¶$%`wonderful
8
salad$%'¶$%`cake$%'¶$%`ice cream cone$%'¶$%`meal$%'¶$%`drink$%'¶$%`steak$%'¶$%`chicken dinner$%'¶$%`Mof cake$%'¶$%`Mof pie$%'¶$%`cookie$%'¶$%`sandwich
9
sonnet$%'¶$%`poem$%'¶$%`story$%'¶$%`play$%'¶$%`song$%'¶$%`Mof music
B
beautiful$%'¶$%`wonderful$%'¶$%`inspirQ$%'¶$%`amazQ$%'¶$%`superb
D
experienc
E
enjoy
F
omputer
G
ever
H
 Ito
I
able 
J
 ability 
K
 have 
L
tast
M
piece 
O
will
P
understand
Q
ing

출력이 TIO 제한을 초과합니다. 나는 %`모든 것을 피하기 위해 단계 를 사용하고 싶었지만 $%'¶$%`어떤 이유로 든 내가 원하는 것을하지 않습니다. 편집 : @ fireflame241 덕분에 57 바이트를 절약했습니다.


여전히 압축의 여지가 있습니다 ing.`Ito`는 각각 여러 번 사용됩니다. 호출 할 때마다 1, 2그리고는 5 이러한 대체 투입 할 수 있도록, 공간 앞에와 따른다. 이와 유사하게, 6그리고 7항상 뒤에 마침표된다. 3한 번만 사용 된 것으로 보입니다.
fireflame241

@ fireflame241 대체를 여러 번 반복해야하기 때문에 숫자를 수정할 수 없지만 다른 아이디어에 감사드립니다!
Neil

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