Máy tính sẽ không bao giờ nếm một cookie làm mới


11

Lấy cảm hứng từ github.com/JackToaster/R assuring-Parable-Generator , lần lượt lấy cảm hứng từ xkcd.com/1263 . Các từ có thể được bắt nguồn từ r assuring.cfg của kho lưu trữ đó.

Có một cái nhìn vào r assuring.cfg (sử dụng cam kết thứ 12) được đề xuất để xem ngữ pháp mà đầu ra khớp với (Đầu ra là danh sách tất cả các chuỗi khớp với ngữ pháp).

Nhiệm vụ: Chương trình của bạn phải xuất ra tất cả 7968 dòng phân biệt chữ hoa chữ thường của văn bản chính xác có trong pastebin pastebin.com/2SNAJ1VH . Một bản sao của pastebin được lưu trong Wayback Machine

Dưới đây là mẫu 33 dòng động lực từ 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.

Quy tắc thử thách:

  • Đầu ra của dòng có thể được sắp xếp theo bất kỳ cách nào bạn muốn, nhưng phải bao gồm tất cả 7968 trong số chúng.
  • Đầu ra phải là một chuỗi phẳng đơn, không phải là một danh sách các chuỗi.
  • Chương trình của bạn sẽ chấp nhận không có đầu vào hoặc đầu vào không sử dụng trống.
  • Chương trình của bạn có thể không lấy dữ liệu từ bất kỳ nguồn trực tuyến nào.
  • Một dòng mới duy nhất là tùy chọn.

Đây là , vì vậy mã ngắn nhất sẽ thắng.



4
No computer {can} {action}.được lặp lại hai lần và Computers {cannot_present}tạo ra các cụm từ như "Máy tính không có khả năng". Cố ý?
darrylyeo

Bất kỳ lỗi rõ ràng nào trong pastebin phải được đưa vào đầu ra cho tất cả các chương trình (chúng tôi không thể thay đổi thông số kỹ thuật cho các chương trình trong quá khứ). Việc trấn an.cfg chỉ là một ngữ pháp mẫu ít nhất là khá chính xác.
fireflame241

Để cạnh tranh trong Id này, phải viết một trình phân tích cú pháp cho đầu vào chỉ để liệt kê các lol độc đáo.
Bạch tuộc ma thuật Urn

Để tham khảo, liên kết TIO đến giải pháp Bubblegum quá dài để đưa ra câu trả lời. Mã nguồn là 23270 byte.
sĩ523

Câu trả lời:


7

Zsh , 765 byte

Đây có thể là điều đầu tiên tôi từng viết bằng zsh, nhưng nó có tính năng cực kỳ tiện lợi là có thể chuyển đổi các mảng thành mở rộng dấu ngoặc (mặc dù nó không thuận tiện như nó nên là ). Chạy với zsh -P(được tính là +1 byte), bật 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

Hãy thử trực tuyến!


4

JavaScript (ES6), 1234 1091 byte

Đó là một số byte tốt đẹp để bắt đầu! Thời gian để chơi golf xuống chuỗi lớn.

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

Ít chơi gôn hơn:

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


Làm sao?

(Đây là một trong những sân golf yêu thích nhất của tôi mọi thời đại!)

Ngữ pháp được lưu trữ trong mảng G, đánh giá điều này:

[["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"]]

Flà một hàm phân tách một chuỗi bởi dấu phân cách |và lặp qua nó. Càng xa càng tốt.

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

Bây giờ những gì đang xảy ra với chức năng bên trong này?

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=[]
)

Đầu tiên chúng ta khởi tạo một mảng A. Sau đó, chúng ta thấy tất cả các chữ số trong chuỗi thông qua svà xây dựng một tiểu chương trình: Sử dụng mỗi chữ số n, chúng tôi tạo ra một for- ofvòng lặp đó lặp qua các mục trong G[n](được lưu trữ như tài sản của F, vì chức năng trong JavaScript là cũng các đối tượng). Các vòng lặp sau đó được nối tiếp nhau.

Ví dụ: chương trình con được tạo để s="1 2 3"bắt đầu như thế này:

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

Trên mỗi lần lặp, chương trình con thay thế từng chữ số sbằng sự thay thế tương ứng, được lưu trữ F[n]và kết quả được đẩy đến A. Chương trình con là evaled và Ađược trả lại ngầm.

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

Sử dụng F, phần còn lại của chương trình chỉ đơn giản là xây dựng phần còn lại của ngữ pháp từ các quy tắc sản xuất đã tồn tại; thay thế được xác định đơn giản bởi một chỉ số một chữ số trong G.


Đẹp quá Nhưng điều này dường như sụp đổ nếu chức năng không được gọi f. Vì vậy, f=nên được thêm vào số byte.
Arnauld

(Tôi nghĩ điều này có thể được khắc phục bằng cách sử dụng lại Fthay vì f.)
Arnauld

@Arnauld Bắt tốt.
darrylyeo

4

PHP, 877 byte

Ah đó là niềm vui!

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

Hãy thử đào thêm một byte nếu bạn có thể.

vô dụng

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

giải trình

Đầu ra có thể được chia thành 48 khối của 166 dòng mỗi dòng. Trong mỗi đoạn, mỗi dòng bắt đầu với một Computers|A computer|No computertrong số 14 khả năng tiêu cực (cho ComputersA computer) hoặc 9 No computerkhả năng tích cực (cho ).
Tôi đã mã hóa các khối này thành 6 bit mỗi bit, (3 đối tượng khác nhau -> 2 bit thấp hơn; khóa chia sẻ mũ dương và âm -> 4 bit trên) và (có thể rõ ràng) đã thêm 65 để sử dụng các giá trị làm mã ASCII.

Trong các khối này, 8 kết hợp động từ / tính từ cho 11 loại thực phẩm khác nhau và 13 kết hợp khác nhau cho 6 nghệ thuật khác nhau, luôn theo cùng một thứ tự; vì vậy chúng chỉ đơn giản có thể được lặp qua, sử dụng khóa động từ / tính từ để xác định thời tiết tôi phải liệt kê thực phẩm hoặc đồ uống trong vòng lặp tiếp theo.

Một phần khó khăn vẫn còn: Một số mũ yêu cầu hình thức gerund của động từ; và một số động từ mất một etrong sự chuyển đổi. Chỉ số giới hạn cho biết thời tiết có cần thiết hay không.
(và nhờ vào thứ tự các bit trong mã hóa, tôi chỉ có thể sử dụng ký tự ASCII để so sánh).
Nhưng bằng cách nào? Sau khi tung hứng với regexes một thời gian, tôi chỉ cần đặt một 1vị trí ephải thay thế ingvà một 0nơi ingphải được nối thêm và strtrthực hiện công việc.

Đó là câu chuyện về phiên bản không có người ở trên. (Đóng gói 1199 byte)


Việc chơi gôn bao gồm chủ yếu theo 3 bước:

  1. Chuỗi ký tự được sử dụng nhiều nhất được lưu trữ cho các biến.
  2. strtrđã được mở rộng cho tất cả mọi thứ trừ chủ đề để di chuyển các biến sang strtr.
  3. Hầu hết các chuỗi đã được chuyển từ các biến sang strtr.

Từ thứ 19 tast, đã được thay thế bằng một chữ in hoa để loại bỏ một vài dấu ngoặc kép.


Tôi tự hỏi điều gì sẽ xảy ra nếu tôi cũng mã hóa các kết hợp động từ / tính từ.
Có lẽ tôi có thể đánh bại Zsh; nhưng tôi không chắc chắn nếu tôi tự hỏi đủ để thử.


1

Võng mạc, 1249 1192 byte


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

Đầu ra vượt quá giới hạn TIO. Tôi muốn sử dụng các %`giai đoạn để tránh tất cả $%'¶$%`nhưng vì một số lý do không làm những gì tôi muốn. Chỉnh sửa: Đã lưu 57 byte nhờ @ fireflame241.


Vẫn còn một số chỗ để nén: ingvà `Ito` được sử dụng nhiều lần. Mỗi cuộc gọi đến 1, 25 được bắt đầu và theo sau bởi một khoảng trắng, vì vậy chúng có thể được đưa vào thay thế. Tương tự, 67luôn luôn được theo sau bởi một khoảng thời gian. 3dường như chỉ được sử dụng một lần.
fireflame241

@ fireflame241 Tôi không thể sửa đổi các chữ số vì chúng cần lặp lại thay thế nhiều lần nhưng cảm ơn vì những ý tưởng khác!
Neil

0

Bong bóng , 23353 byte

Vâng Hầu hết câu trả lời sẽ không phù hợp với câu trả lời vì vậy ... Cả mã và liên kết TIO đều ở dạng bột nhão.

(một hexdump của mã)

Liên kết TIO (đầu ra vượt quá giới hạn của TIO)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.