Bilgisayarlar asla ferahlatıcı bir çerezi tatmayacak


11

Esinlenerek github.com/JackToaster/Reassuring-Parable-Generator , sırayla esinlenerek xkcd.com/1263 . Olası kelimeler bu deponun reassuring.cfg dosyasından türetilmiştir .

Çıktının eşleştiğini dilbilgisini görmek için reassuring.cfg dosyasına (12. komutu kullanın) göz atmanız önerilir (Çıktı dilbilgisi ile eşleşen tüm dizelerin listesidir).

Görev: Programınız, pastebin.com/2SNAJ1VH macununda bulunan tam metnin 7968 büyük / küçük harfe duyarlı satırlarının tümünü çıktılamalıdır . Hamuru bir kopyası Wayback Machine'e kaydedilir

İşte 33'den motive edici çizgi örneği:

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.

Zorluk kuralları:

  • Hat çıkışı istediğiniz şekilde sipariş edilebilir, ancak bunların 7968'inin tamamı dahil edilmelidir.
  • Çıktı, bir dize listesi olarak değil, tek bir düz dize olmalıdır.
  • Programınız hiçbir girişi veya boş bir kullanılmamış girişi kabul etmelidir.
  • Programınız herhangi bir çevrimiçi kaynaktan veri alamayabilir.
  • Tek bir sondaki yeni satır isteğe bağlıdır.

Bu , bu yüzden en kısa kod kazanır.



4
No computer {can} {action}.iki kez tekrarlanır ve Computers {cannot_present}"Bilgisayarlar yetersizdir" gibi ifadeler üretir. Kasıtlı?
darrylyeo

Hamurdaki görünür hatalar tüm programlar için çıktıya dahil edilmelidir (geçmiş programların özelliklerini değiştiremeyiz). Reassuring.cfg sadece en azından oldukça doğru olan bir örnek dilbilgisidir.
fireflame241

Bu kimliği rekabet etmek için sadece uniques lol listelemek için girdi için bir ayrıştırıcı yazmak zorunda.
Sihirli Ahtapot Urn

Referans olarak, Bubblegum çözümüne TIO bağlantısı bir cevap koymak için çok uzun. Kaynak kodu 23270 bayttır.
musicman523

Yanıtlar:


7

Zsh , 765 bayt

Bu, zsh ile yazdığım ilk şey olabilir, ancak dizileri genişletmeleri desteklemek için inanılmaz derecede kullanışlı bir özelliğe sahiptir (olması gerektiği kadar uygun olmasa da… ). Açılan zsh -P(+1 bayt olarak sayılır) ile çalıştırın 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

Çevrimiçi deneyin!


4

JavaScript (ES6), 1234 1091 bayt

Bu, başlamak için güzel bir bayt sayımıdır! Şu büyük ipte golf oynama zamanı.

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

Daha az golf:

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


Nasıl?

(Bu şimdiye kadar tüm zamanların en sevdiğim golf biridir!)

Dilbilgisi şu şekilde Gdeğerlendirilen dizide saklanır :

[["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, bir dizeyi ayırıcı tarafından böler ve bu dizgiyi |yineler. Çok uzak çok iyi.

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

Şimdi bu iç işlevde neler oluyor?

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

İlk önce bir dizi başlatırız A. Daha sonra iletilen dizedeki tüm rakamları buluruz sve bir alt program oluştururuz: Her bir rakamı kullanarak n, içindeki girişler arasında yinelenen bir for- ofdöngüsü oluştururuz G[n]( FJavaScript'teki işlevler de nesneler olduğu için). Ardından ilmekler arka arkaya eklenir.

Örneğin, için oluşturulan alt program şöyle s="1 2 3"başlar:

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

Her bir yinelemede, alt program her bir basamağı yerine skarşılık gelen değiştirmeyle değiştirir, depolanır F[n]ve sonuç itilir A. Alt program evaldüzenlenir ve Adolaylı olarak döndürülür.

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

Kullanarak F, programın geri kalanı dilbilgisinin geri kalanını zaten var olan üretim kurallarından oluşturur; yerine basit bir şekilde tek basamaklı bir dizin ile tanımlanır G.


Güzel bir! Ancak, işlev çağrılmazsa bu çöküyor gibi görünüyor f. Bu nedenle, f=bayt sayısına eklenmelidir.
Arnauld

(Bunun Fyerine yeniden kullanarak düzeltilebileceğini düşünüyorum f.)
Arnauld

@ Arnauld İyi yakaladım.
darrylyeo

4

PHP, 877 bayt

Ah eğlenceliydi!

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

Mümkünse bir bayt daha kazmayı denemekten çekinmeyin.

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

açıklama

Çıktı, her biri 166 satırlık 48 parçaya bölünebilir. Her bir yığın içinde, her satır Computers|A computer|No computer14 negatif ( Computersve A computer) veya 9 pozitif (için No computer) kapasiteden biri ile başlar.
Bu parçaları her biri 6 bit olarak kodladım (3 farklı konu -> daha düşük 2 bit; pozitif ve negatif kapaklar tuşları paylaşıyor -> üst 4 bit) ve (muhtemelen belirgin) değerleri ASCII kodları olarak kullanmak için 65 ekledim.

Bu parçalar içinde 11 farklı gıda için 8 fiil / sıfat kombinasyonu ve 6 farklı sanat için 13 farklı kombinasyon, her zaman aynı sırada; böylece bir sonraki döngüde yiyecekleri veya içecekleri listelemek isteyip istemediğimi belirlemek için fiil / sıfat anahtarını kullanarak basitçe döngüye girebilirler.

Zor bir kısım kaldı: Bazı kapaklar fiilin gerund formunu gerektirir; ve bazı fiiller edönüşümde kaybeder . Kapak endeksi gerekli olup olmadığını söyler.
(ve kodlamadaki bit sırası sayesinde karşılaştırma için ASCII karakterini kullanabilirim).
Ama nasıl? Bir süre regexes ile hokkabazlık sonra, ben sadece bir koyun 1nerede ebulunur ile değiştirilmesi ingve 0nerede ingbulunur eklenecek ve izin strtrişi yapmak.

Bu yukarıdaki çözümsüz versiyonun hikayesi. (1199 bayt paketlenmiş)


Golf 3 adımda esas olarak oluşmuştur:

  1. En çok kullanılan karakter dizileri değişkenlere kaydedildi.
  2. strtrdeğişkenleri taşımak için konu dışındaki her şeye genişletildi strtr.
  3. Dizilerin çoğu değişkenlerden konumuna taşındı strtr.

19. kelime, tastbirkaç tırnak işaretinden kurtulmak için büyük harfle değiştirildi.


Fiil / sıfat kombinasyonlarını da kodlarsam ne olacağını merak ediyorum.
Belki Zsh'ı yenebilirim; ama deneyecek kadar merak ettiğimden emin değilim.


1

Retina, 1249 1192 bayt


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

Çıktı TIO sınırlamalarını aşıyor. Her %`şeyden kaçınmak için aşamaları kullanmak istedim $%'¶$%`ama nedense istediğimi yapmıyor. Düzenleme: @ fireflame241 sayesinde 57 bayt kaydedildi.


Sıkıştırma için hala bir yer var: ingve Ito'nun her biri birkaç kez kullanılıyor. Yapılan her çağrı 1, 2ve 5 bu ikame içine konabilir, böylece önünde bir boşluk ve izlemektedir. Benzer şekilde 6ve 7her zaman bir nokta gelir. 3yalnızca bir kez kullanıldığı anlaşılıyor.
fireflame241

@ fireflame241 Rakamları değiştiremiyorum çünkü yerine koymalarını birkaç kez tekrarlamaları gerekiyor, ancak diğer fikirler için teşekkürler!
Neil

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.