คอมพิวเตอร์จะไม่ลิ้มรสคุกกี้ที่สดชื่น


11

แรงบันดาลใจจากgithub.com/JackToaster/Reassuring-Parable-Generatorในการเปิดแรงบันดาลใจจากxkcd.com/1263 คำที่เป็นไปได้นั้นมาจากreassuring.cfgของที่เก็บนั้น

แนะนำให้ดู reassuring.cfg (ใช้การกระทำที่ 12)เพื่อดูไวยากรณ์ที่ตรงกับเอาต์พุต (ผลลัพธ์คือรายการของสตริงทั้งหมดที่ตรงกับไวยากรณ์)

ภารกิจ:โปรแกรมต้องออกของคุณทั้งหมด 7,968 กรณีสายของข้อความที่แน่นอนที่มีอยู่ใน Pastebin pastebin.com/2SNAJ1VH สำเนาของ pastebin จะถูกบันทึกไว้ในเครื่อง Wayback

นี่คือตัวอย่างของ 33 บรรทัดที่สร้างแรงบันดาลใจจาก pastebin:

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

ในการแข่งขันในรหัสนี้จะต้องเขียนโปรแกรมแยกวิเคราะห์สำหรับอินพุตเพียงเพื่อแสดงรายการที่ไม่ซ้ำกันฮ่า ๆ
Magic Octopus Urn

สำหรับการอ้างอิงลิงก์ TIO ไปยังโซลูชัน Bubblegum นั้นยาวเกินกว่าจะตอบได้ รหัสแหล่งที่มาคือ 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

JavaScript (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เนื่องจากฟังก์ชั่นใน JavaScript ยังเป็นวัตถุ) จากนั้นลูปจะถูกต่อท้ายอีกหนึ่งอัน

ตัวอย่างเช่นโปรแกรมย่อยที่สร้างขึ้นสำหรับการ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.
";

ลองขุดอีกหนึ่งไบต์ถ้าทำได้

ungolfed

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

คำอธิบาย

เอาต์พุตสามารถแบ่งออกเป็น 48 ชิ้นแต่ละ 166 บรรทัด ภายในแต่ละกลุ่มแต่ละบรรทัดเริ่มต้นด้วยหนึ่งในนั้นComputers|A computer|No computerตามด้วยหนึ่งใน 14 ความสามารถเชิงลบ (สำหรับComputersและA computer) หรือ 9 No computerความสามารถในเชิงบวก (สำหรับ)
ฉันเข้ารหัสชิ้นส่วนเหล่านี้เป็น 6 บิต (3 วิชาที่แตกต่างกัน -> 2 บิตที่ต่ำกว่าปุ่มบวกและลบแบ่งปันคีย์ -> 4 บิตด้านบน) และ (อาจเห็นได้ชัดเจน) เพิ่ม 65 เพื่อใช้ค่าเป็นรหัส ASCII

ภายในกลุ่มเหล่านี้มี 8 คำกริยา / คำคุณศัพท์สำหรับ 11 อาหารที่แตกต่างกันและ 13 ชุดที่แตกต่างกันสำหรับ 6 ศิลปะที่แตกต่างกันเสมอในลำดับเดียวกัน; เพื่อให้พวกเขาสามารถลูปผ่านโดยใช้คีย์ verb / adjective เพื่อกำหนดว่าฉันต้องแสดงรายการอาหารหรือเครื่องดื่มในลูปถัดไป

ยังคงมีเล่ห์เหลี่ยมหนึ่งส่วน: หมวกบางอันต้องการรูปแบบกริยาของคำกริยา; และคำกริยาบางส่วนสูญเสียการeเปลี่ยนแปลง ดัชนีหมวกบอกว่าจำเป็นหรือไม่
(และขอบคุณลำดับของบิตในการเข้ารหัสฉันสามารถใช้อักขระ ASCII สำหรับการเปรียบเทียบ)
แต่อย่างไร หลังจากเล่นกลกับ regexes อยู่พักหนึ่งฉันก็แค่ใส่1ที่ที่eจะต้องถูกแทนที่ด้วยingและ0ที่ingจะต้องมีการผนวกและให้strtrทำงาน

นั่นเป็นเรื่องราวของเวอร์ชั่นที่ไม่ได้รับการยกย่องข้างต้น (1,199 ไบต์บรรจุ)


การเล่นกอล์ฟส่วนใหญ่ประกอบด้วย 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 ฉันต้องการใช้%`ขั้นตอนเพื่อหลีกเลี่ยงทั้งหมด$%'¶$%`แต่ด้วยเหตุผลบางอย่างที่ไม่ได้ทำสิ่งที่ฉันต้องการ แก้ไข: บันทึกแล้ว 57 ไบต์ขอบคุณ @ fireflame241


ยังมีที่ว่างสำหรับการบีบอัด: ingและ `Ito 'แต่ละตัวถูกใช้หลายครั้ง ทุกคนเรียกร้องให้1, 2และ5 จะนำหน้าและตามด้วยช่องว่างเหล่านี้จึงสามารถนำไปทดแทน ในทำนองเดียวกัน6และ7มักจะตามด้วยระยะเวลา 3ดูเหมือนจะใช้เพียงครั้งเดียว
fireflame241

@ fireflame241 ฉันไม่สามารถปรับเปลี่ยนตัวเลขได้เพราะพวกเขาจำเป็นต้องทำซ้ำการแทนที่หลายครั้ง แต่ขอบคุณสำหรับความคิดอื่น ๆ !
Neil

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.