Güven verici parables


27

Oldukça az sayıda insan burada muhtemelen hevesli XKCD okuyucularıdır. Bu yüzden, size Megan'ın kolayca yapabileceği bir şeyi yapması için sizi zorlayacağımı düşünüyorum: Bilgisayarların asla yapamayacağı konusunda binlerce güven verici paralüt üreten bir senaryo hazırlayın.

XKCD # 1263

Senaryonun

  • Herhangi bir dilde yazılabilir
  • Kod golf oynamalıdır
  • stdinTükettiği paralelerin sayısına bir giriş (on veya dil eşdeğeri) almanız gerekir ( bunun aşmayacağını MAX_INTveya eşdeğeri sayılmayacağını varsayabilirsiniz ).
  • Rastgele oluşturulmuş bir dizi benzetir.

Benzetmeler aşağıdaki gibidir

  • İle başlar 'Computers will never '
  • Daha sonra, programı optimize etmek serbestçe seçebilir, ancak 16 benzersiz İngilizce fiiller biri olmalıdır içerir code-golfve understand.
  • Sonra, yine programınızı optimize etmek serbestçe seçebilir, ancak 16 benzersiz İngiliz isimlerin biri olmalıdır içerir a saladve an octopus.
  • Daha sonra, programı optimize etmek serbestçe seçebilir, ancak 16 benzersiz İngiliz hükümlerin biri olmalıdır içerir for funve after lunch.
  • Yeni satır ( \nveya eşdeğeri) karakterde biter

Yani, eğer girdi ise 2geçerli bir çıktı olacaktır.

Computers will never code-golf a salad for lunch
Computers will never hug a tree in vain

Programın büyüklüğü, karakterlere değil, bayt cinsinden sayılır (bu nedenle unicode anlamsız). Standart boşluklara izin verilmez.

Bu benim ilk zorluğum, bu yüzden bazı açık değişiklikler yapmam gerekirse, lütfen yorum yapın.

Düzenleme: Sözlük 'sıkıştırma' teşvik etmek için sözlük boyutunu bayt sayısından çıkarmayı düşünüyorum. Bu uzaktan uygulanabilir olup olmadığını gelecekteki cevaplarından göreceğim; eğer öyleyse, bir ikramiye güvenebilirsiniz.


4
Bu boyutun bayt olarak sayılmasını ve standart boşluklara izin verilmemesini eklemek isteyebilirsiniz .
matsjoyce

Kalan 14 fiil / isim / cümleyi kendimiz seçebiliyor muyuz?
Doktor

@Optimizer "... programını optimize etmek için özgürce seçebilirsin ..."
Martin Ender

5
Çok kısa ancak tamamen bilinmeyen sözcüklerin kullanılmasını önlemek için sözlük boyutunu çıkarmayı desteklerdim ( burada olduğu gibi ).
Falko

2
@ matsjoyce: Baytları saymak varsayılandır. Standart boşluklara sahip olmanın amacı, bunlardan bahsetmenin gerekmediğidir.
Dennis,

Yanıtlar:


6

CJam, 238 232 (veya 209) bayt

ri{'C"!fmQ$h/q6fW*LC*hBd11(kA>.TfqJ0++#<>A]XThJkY b~os;vMg_D-}zYX%_,PozNxe5_8`}$H;2IUZ]&$c+m~HJ*|!n\A^:W-*O\"V-/8Kg ,_b(N#M/1Zh6*%\#t22'#|\"BJN=Za2_.R"32f-96b28b" -"'{,W%+f=)/(\[G/~["for ""after "]\m*\(a\"a "f{\+}+\]{mr0=}%S*N}*

Bu zaten gönderilen cevaplardan birçok fiil / isim / cümle kullanır, ancak bazıları da yeni. Baz bazı ekstra baytları tıraş etmek için karakterleri dönüştürdüm.

Baz dönüştürülmüş dize, 24 baytlık daha fazla golf oynayabilir ( 209 baytlık bir çözüm elde etmek için ; tüm karakterlerin 255'ten küçük ASCII koduna sahip olması nedeniyle, bayt sayısı yerine karakter sayımını göz önünde bulundurmanız gerektiğine dikkat edin) ) ancak dizginin sadece yazdırılabilir ASCII karakterlerinden oluşmasını istedim.

Sadece referans için, işte 209 bayt versiyonu:

ri{'C"9óßÂ/ÃC eG?dcÅoø£gaC#Yä©Ï¡áq¶hm)ð­aâ%ØNo=óÏrbÁz´¾;q·u¬&ñ*±äô©@6W±U¹¥¢)·«Åx¶óV¬¬dhja¼ ª\"r[çË74Äãгî,ó3gÈ$AïL"32f-222b28b" -"'{,W%+f=)/(\[G/~["for ""after "]\m*\(a\"a "f{\+}+\]{mr0=}%S*N}*

STDIN'den yazdırılacak satır sayısını alır:

12

Çıktı:

Computers will never code-golf an octopus for fun
Computers will never code-golf a bag after za
Computers will never eat a hem after tip
Computers will never eat an octopus for tip
Computers will never get a fax for you
Computers will never dry a gym for za
Computers will never get a guy for tip
Computers will never do a pen for fun
Computers will never see a bar after you
Computers will never tax a pen for ex
Computers will never get a hem for lunch
Computers will never win a pen for ex

Burada çevrimiçi deneyin


19

İşte biraz farklı bir yaklaşım:

Python, 368 308 297 bayt

EDIT, aslında bu sefer golf oynamıştım. 60 karakter traş oldu.

from random import*
from en import*
C=choice
v=["code-golf","understand","go","do"]
n=["salad","octopus","fun","lunch"]
for f,l in("verbs",v),("nouns",n):exec"l.append(str(C(wordnet.all_"+f+"()))[:-4]);"*12
exec'print"Computers will never",C(v),noun.article(C(n)),C(("for","after")),C(n);'*input()

En gurur duyduğum golf numarası:

for f,l in("all_verbs",v),("all_nouns",n):

Python'un bunu yapabileceğini bile bilmiyordum! İşte daha basit bir açıklama:

for (a, b) in ((0, 1), (1, 2), (2, 3)):

a ve b'yi 0 ve 1'e, ardından 1 ve 2'ye ve ardından 2 ve 3'e atar.


Bu, NodeBox'un dil kitaplığını kullanarak bir fiil / isim / cümle listesi oluşturur ve ardından rasgele onlardan seçer.

Bu kütüphane rastgele kelimeler (bu nedenle 368 bayt) oluşturmak için harika değildir, ancak bu yaklaşımla ilgili güzel şey onunla oldukça rastgele bazı güven verici paralütler almanızdır. İşte demek istediğim.

Computers will never attempt a syria for synchronization.
Computers will never understand a salad for change of mind.
Computers will never brim an electric company for synchronization.
Computers will never pivot a dusk for fun.
Computers will never bedaze an electric company for genus osmerus.
Computers will never brim a salad for vital principle.
Computers will never attempt an erythroxylum after lunch.
Computers will never understand an uuq for water birch.
Computers will never brim an ictiobus for change of mind.
Computers will never brim an ictiobus for 17.
Computers will never lie in an octopus for change of mind.
Computers will never happen upon a toothpowder for water birch.
Computers will never typeset an electric company for change of mind.
Computers will never brim a french oceania after lunch.
Computers will never bring out an ictiobus for glossodia.
Computers will never bedazzle an animal fancier for ash cake.
Computers will never attempt a dusk for genus osmerus.
Computers will never understand an animal fancier for genus osmerus.
Computers will never accredit a prickly pear cactus for 17.
Computers will never typeset an erythroxylum for water birch.

Ama hey, başkalarının programlarının "Bilgisayarlar asla kül pastası için bir hayvan meraklısı olmayacak" demesini üreteceğini sanmıyorum.

İşte bir ungolfed versiyonu (574 bytes):

import random
import en

v = ["code-golf", "understand"]#list of verbs
n = ["a salad", "an octopus"]#list of nouns
c = ["for fun", "after lunch"]#list of clauses
for i in range(14):
    v.append(str(random.choice(en.wordnet.all_verbs()))[:-4])
    n.append(en.noun.article(str(random.choice(en.wordnet.all_nouns()))[:-4]))
    c.append("for "+str(random.choice(en.wordnet.all_verbs()))[:-4])

N=input("Enter the number of reassuring phrases you want: ")
for i in range(N):
    print "Computers will never"+' '+random.choice(v)+' '+random.choice(n)+' '+random.choice(c )+'.' 

Ve son olarak ama kesinlikle en az değil, işte önümüzdeki 10 - 15 yıl içerisinde gerçekten popüler olan tutku cümleleri olacağını tahmin ettiğim en sevdiğim güven verici parabilgilerimden bazıları.

Computers will never move around a methenamine for godwin austen.
Computers will never conk an adzuki bean for bitterwood tree.
Computers will never jaywalk a cross-dresser for fun.
Computers will never hyperbolize an accessory after the fact for norfolk island pine.
Computers will never dissolve a salad for earth wax.
Computers will never acetylise an incontrovertibility for dictatorship.
Computers will never reciprocate a strizostedion vitreum glaucum for commelinaceae.
Computers will never goose an action replay for star chamber.
Computers will never veto a bottom lurkers for jackboot.
Computers will never reciprocate a visual cortex for oleaginousness.
Computers will never baptise a special relativity after lunch.
Computers will never understand a gipsywort for citrus tangelo.
Computers will never get it a brand-name drug for electronic computer.
Computers will never deforest a paperboy after lunch.
Computers will never bundle up a nazi for repurchase.
Computers will never elapse a bernhard riemann for counterproposal.

ve benim kişisel favorim:

Computers will never romanticise a cockatoo parrot for cross-fertilization.

6
Bilgisayarların geri alım için hiçbir zaman bir
naziyi bir araya getirmeyeceğinden eminim

Henüz ince dişli bir tarakla ya da bir şey ile bu bir yere gitmiş değil, ama yanılmıyorsam from random import choice as Colabilirfrom random import*;C=choice
undergroundmonorail

ayrıca iki kez sahip for i in ' '*(something)olduğunuzdan, iki bayt arasında inve' '
undergroundmonorail

Evet, bunun daha da ileriye atılacağına eminim. Sıkıştırmak için çok çaba sarf etmedim. Gerçekten ezmek istediğimi düşünüyorum, rastgele kelime seçimine daha uygun bir kütüphane bulmalıyım.
DJMcMayhem

6

JavaScript ES6, 331 336 bayt

n=prompt(a='')
r=s=>s+Math.random()*16>>0
p=q=>'OctopusSaladCutCueBatJamKidPenDogFanHemDotTaxSowDyeDigCode-golfUnderstandLunchFunMeYouUsItAdsPaZaMenTwoIceJamWarRumWax'.match(/[A-Z][^A-Z]+/g)[q].toLowerCase()
while(n-->0)y=r(0),z=r(18),a+=`Computers will never ${p(r(2))} a${y?'':'n'} ${p(y)} ${z<18?'afte':'fo'}r ${p(z)}
`
alert(a)

Listeyi kısaltmak için hem fiil hem de isim olarak çalışan kelimeler seçtim, ancak izin verilip verilmediğini bana bildirin. Yukarıda Stack Snippets'i (ES5 kullanacak şekilde biçimlendirilmiş) veya http://jsfiddle.net/5eq4knp3/2/ adresinde deneyin . İşte bir örnek çıktı:

Computers will never hem a cut for ads
Computers will never dot a pen after lunch
Computers will never code-golf a bat for free
Computers will never sow a dog for me
Computers will never cut an octopus for fun

Dünya'da bir za nedir?
Beta Çürüme

3
@ BetaDecay Pizza için.
NinjaBearMonkey 26:14

1
@MarkGabriel Listedeki sdiğer konuşma bölümlerinden atlamak için 0 ile 16 arasında rasgele bir sayı döndüren bir işlevdir . İki tild bit bit NOT operatörleridir ve bunu yapmak için daha kısa bir yol olarak işlev görürler Math.floor().
NinjaBearMonkey

1
@MarkGabriel ECMAScript 6 işlevlerini böyle temsil eder. r=s=>12aynı function r(s){return 12}, sadece daha kısa. Ayrıca MDN'deki dokümanlara bakınız .
NinjaBearMonkey

1
@MarkGabriel Ayrıntılı cevaplar için, bkz. SO'lar Javascript'te ~ ~ (“double tilde”) ne yapar? ve Javascript'te F = a => ne anlama geliyor? ~~bir tür gibidir Math.floor(ancak negatif sayılar için farklı davranır) ve =>sınırlandırılmış bir ES6 stili işlev tanımıdır this.
apsillers

5

Python - 390 385 383

from pylab import*
S=str.split
n=input()
while n:n-=1;i,j,k=randint(0,16,3);print"Computers will never",S("buy cut dry eat fax get pay rob see sue tax tow wax win code-golf understand")[i],"a"+"n"*(j<1),S("octopus salad bag bar bee bow boy bra dad fax gym guy hat man mom pet")[j],"for "*(k>2)+S("after lunch,naked,ever,fun,me,you,us,tip,gas,cash,air,oil,beer,love,food,dope",",")[k]

Rastgele örnek çıktı:

Computers will never pay an octopus for oil
Computers will never cut a bra for beer
Computers will never eat a bee for us
Computers will never rob a pet for you
Computers will never tax a pet for tip
Computers will never buy a salad for cash
Computers will never sue a boy naked
Computers will never see a bar for you
Computers will never wax a bra for beer
Computers will never sue an octopus for us

umm ... iyon bir fiil değildir.
John Dvorak

@JanDvorak: Oooops ... Sabit!
Falko

2
Neden daha kısa bir fiil kullanmıyorsunuz? Söyleyin, dikin ...
John Dvorak

@JanDvorak: Evet, değiştirdim. Ancak, emin golf içerik, birçok olmadığından ne kadar uzak değilim daha kısa kelimeler kimse o olabilir kullanın. Ancak sonuç çok sıkıcı olurdu.
Falko

1
Hem 'for + ...' hem de bir listedeki zarfları (çıplak) eklemek hoş bir dokunuş. Umduğum şey buydu - bilgisayarımın asla soyulmayacağına dair güven verici buluyorum.
Sanchises,

2

Perl - 366

@w="Code-golfUnderstandBeDoTieSeeSawEatCutCapSitSetHateZapSipLoveSaladOctopusSeaBeeCatDogHatBatJobManLapCapRapMapDotAnt0fun1that1noon1work0good0sure0reason0nothing0you1you1lunch1all0me0nowToday1me"=~s/\d/("For ","After ")[$&]/reg=~/([A-Z][^A-Z]+)/g;print"Computers will never ".lc"$w[rand 16] a".$w[16+rand 16]=~s/^[AO]?/(n)[!$&]." $&"/re." $w[32+rand 16]
"for 1..<>

İşte bir test:

$ perl ./parables.pl <<<3
Computers will never do an ant after noon
Computers will never do a lap after all
Computers will never love an octopus for sure

1

CJam, 353 317 301 bayt

Falko'nun kelime listesini adalet için kullanıyorum, bu yüzden golf oynamadaki tek fark içerikten değil dillerden kaynaklanıyor (insanlar da içeriği golfe atmaya başlarsa kelime listesini değiştirebilirim).

"Computers will never ""buy
cut
dry
eat
fax
get
pay
rob
see
sue
tax
tow
wax
win
code-golf
understand"N/[" an octopus"" a ""salad
bag
bar
bee
bow
boy
bra
dad
fax
gym
guy
hat
man
mom
pet"{N/\f{\+}~]}:F~S["after lunch""naked""ever""for ""fun
me
you
us
tip
gas
cash
air
oil
beer
love
food
dope"Fm*m*m*mr0=

N sayısını yazdırmak için girişi okumuyorsunuz.
İyileştirici

@Optimizer Ah, bunu tamamen göz ardı ettim. Bir saniyede tamir ediyorum.
Martin Ender

0

NetLogo, 396

Ayrıca Falko'nun kelime listesini iki istisna dışında (programın uzunluğunu değiştirmeyen) kullandım.

to f let a["after lunch""ever""alone"]type(word"Computers will never "one-of["buy""cut""dry""eat""fax""get""pay""rob""see""sue""tax""tow""wax""win""code-golf""understand"]" a"one-of["n ocotpus"" salad"" bag"" bar"" bee"" bow"" boy"" bun"" dad"" fax"" gym"" guy"" hat"" man"" mom"" pet"]" "one-of fput word"for "one-of["fun""me""you""us""tip""gas""cash""air""oil""beer""love""food""dope"]a"\n")end

“Programı” nasıl tanımladığınıza bağlı olarak, ilk beş ve son üç karakteri, böylece 388'lik bir puanı kaldırabilirsiniz.

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.