มั่นใจอุปมา


27

ไม่กี่คนที่นี่อาจเป็นผู้อ่าน XKCD ตัวยง ดังนั้นฉันคิดว่าฉันขอท้าให้พวกคุณทำในสิ่งที่เมแกนสามารถทำได้อย่างง่ายดาย: สร้างสคริปต์ที่สร้างอุปมาเรื่องความมั่นใจนับพันเกี่ยวกับสิ่งที่คอมพิวเตอร์ไม่สามารถทำได้

XKCD # 1263

สคริปต์ของคุณ

  • สามารถเขียนได้ทุกภาษา
  • จะต้องมีรหัส - golfed
  • จะต้องป้อนข้อมูล ( stdinหรือเทียบเท่าภาษาของคุณ) กับจำนวนของคำอุปมาที่จะคายออก (คุณสามารถถือว่าสิ่งนี้จะไม่เกินMAX_INTหรือเทียบเท่า)
  • จะส่งออกคำอุปมาที่สร้างแบบสุ่มจำนวนหนึ่ง

คำอุปมามีดังนี้

  • เริ่มต้นด้วย 'Computers will never '
  • ถัดไปซึ่งเป็นหนึ่งใน 16 คำกริยาภาษาอังกฤษที่ไม่ซ้ำกันซึ่งคุณสามารถเลือกได้อย่างอิสระเพื่อเพิ่มประสิทธิภาพของโปรแกรมของคุณ แต่ต้องรวมถึงการและcode-golfunderstand
  • ถัดไปซึ่งเป็นหนึ่งใน 16 คำนามภาษาอังกฤษที่ไม่ซ้ำกันอีกครั้งซึ่งคุณสามารถเลือกได้อย่างอิสระเพื่อเพิ่มประสิทธิภาพของโปรแกรมของคุณ แต่ต้องรวมถึงการและa saladan octopus
  • ถัดไปซึ่งเป็นหนึ่งใน 16 ข้อภาษาอังกฤษที่ไม่ซ้ำกันซึ่งคุณสามารถเลือกได้อย่างอิสระเพื่อเพิ่มประสิทธิภาพของโปรแกรมของคุณ แต่ต้องรวมถึงการและfor funafter lunch
  • ลงท้ายด้วยอักขระขึ้นบรรทัดใหม่ ( \nหรือเทียบเท่า)

ตัวอย่างเช่นถ้าอินพุตเป็น2เอาต์พุตที่ถูกต้องจะเป็น

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

ขนาดของโปรแกรมนั้นนับเป็นไบต์ไม่ใช่ตัวอักษร (ดังนั้นจึงไม่มีความหมายแบบ Unicode) ไม่อนุญาตช่องโหว่มาตรฐาน

นี่เป็นความท้าทายครั้งแรกของฉันดังนั้นหากฉันควรทำการเปลี่ยนแปลงที่ชัดเจนโปรดแสดงความคิดเห็น

แก้ไข:ฉันใคร่ครวญเพื่อย่อขนาดพจนานุกรมจากจำนวนไบต์เพื่อส่งเสริมพจนานุกรม 'การบีบอัด' ฉันจะเห็นจากคำตอบในอนาคตหากเป็นไปได้จากระยะไกล ถ้าเป็นเช่นนั้นคุณสามารถนับโบนัสได้


4
คุณอาจต้องการเพิ่มขนาดนั้นให้นับเป็นไบต์และไม่อนุญาตช่องโหว่มาตรฐาน
matsjoyce

เราจะเลือกคำกริยา / คำนามที่เหลืออีก 14 คำที่เหลืออยู่หรือไม่?
เครื่องมือเพิ่มประสิทธิภาพ

@Optimizer "... ซึ่งคุณสามารถเลือกได้อย่างอิสระเพื่อปรับโปรแกรมของคุณให้เหมาะสม ... "
Martin Ender

5
ฉันสนับสนุนการลบขนาดพจนานุกรมเพื่อป้องกันการใช้คำพิเศษสั้น ๆ แต่ไม่รู้จักอย่างสมบูรณ์ ( เช่นที่นี่ )
Falko

2
@matsjoyce: นับจำนวนไบต์เป็นค่าเริ่มต้น ประเด็นของการมีช่องโหว่มาตรฐานคือไม่จำเป็นต้องพูดถึง
Dennis

คำตอบ:


6

CJam, 238 232 (หรือ 209) ไบต์

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}*

วิธีนี้ใช้คำกริยา / คำนาม / ประโยคมากมายจากคำตอบที่โพสต์ไปแล้ว แต่บางคำก็เป็นคำใหม่ ฉันได้แปลงฐานอักขระเพื่อกำจัดบางไบต์พิเศษ

สตริงที่แปลงฐานสามารถเล่นกอล์ฟได้ 24 ไบต์ขึ้นไป (เพื่อให้ได้วิธีแก้ปัญหา 209 ไบต์โปรดทราบว่าคุณต้องพิจารณาจำนวนอักขระแทนจำนวนไบต์เนื่องจากอักขระทั้งหมดมีรหัส ASCII น้อยกว่า 255 แต่ไซต์ยังถือว่าบางตัวมียูนิโค้ด ) แต่ฉันต้องการให้สตริงประกอบด้วยอักขระ ASCII ที่พิมพ์ได้เท่านั้น

เพื่อการอ้างอิงนี่เป็นเวอร์ชั่น 209 ไบต์:

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 เช่น:

12

เอาท์พุท:

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

ลองออนไลน์ได้ที่นี่


19

นี่เป็นวิธีที่แตกต่างกันเล็กน้อย:

Python, 368 308 297 ไบต์

แก้ไขฉันจริงกอล์ฟในครั้งนี้ โกนออกได้ 60 ตัว

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

นี่คือเคล็ดลับกอล์ฟที่ฉันภูมิใจมากที่สุด:

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

ฉันไม่รู้ด้วยซ้ำว่าไพ ธ อนสามารถทำเช่นนั้นได้! นี่คือคำอธิบายที่ง่ายกว่า:

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

กำหนด a และ b ให้เป็น 0 และ 1 จากนั้นเป็น 1 และ 2 และจากนั้นเป็น 2 และ 3


สิ่งนี้ใช้ไลบรารีภาษาศาสตร์ของ NodeBox เพื่อสร้างรายการคำกริยา / คำนาม / คำสั่งจากนั้นสุ่มเลือกจากพวกเขา

ห้องสมุดนี้ไม่เหมาะสำหรับการสร้างคำสุ่ม (ดังนั้น 368 bytes) แต่สิ่งที่ดีเกี่ยวกับวิธีนี้คือคุณจะได้รับอุปมาอุปมัยที่ทำให้มั่นใจได้ด้วย นี่คือสิ่งที่ฉันหมายถึง

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.

แต่เดี๋ยวก่อนฉันไม่คิดว่าโปรแกรมของคนอื่นจะสร้างคำพูดที่ว่า: "คอมพิวเตอร์จะไม่ทำให้ตาพร่ามัวนักเลงสัตว์สำหรับเค้กเถ้า"

นี่คือรุ่นที่ไม่ได้รับการปรุงแต่ง (574 ไบต์):

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 )+'.' 

และท้ายที่สุด แต่ไม่ท้ายสุดนี่คือบางส่วนของคำอุปมาที่ฉันชอบซึ่งฉันคาดว่าจะกลายเป็นวลียอดนิยมในอีก 10-15 ปีข้างหน้า

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.

และรายการโปรดส่วนตัวของฉัน:

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

6
ฉันพบว่ามันมั่นใจอย่างแน่นอนว่าคอมพิวเตอร์จะไม่รวมกลุ่มนาซีเพื่อซื้อคืน ...
Sanchises

ยังไม่ได้ไปที่นี้ด้วยหวีฟันหรืออะไรเลย แต่ถ้าฉันผิดพลาดfrom random import choice as Cอาจเป็นfrom random import*;C=choice
undergroundmonorail

คุณมีสองครั้งด้วยfor i in ' '*(something)ดังนั้นคุณจึงสามารถประหยัดสองไบต์จากการลบช่องว่างระหว่างinและ' '
undergroundmonorail

ใช่ฉันแน่ใจว่าสิ่งนี้สามารถลงเล่นกอล์ฟต่อไปได้ ฉันไม่ได้พยายามลงแรงบีบอัดทั้งหมด ฉันคิดว่าฉันต้องการที่จะบีบมันลงไปฉันต้องหาห้องสมุดที่เหมาะสมกว่าสำหรับการเลือกคำแบบสุ่ม
DJMcMayhem

6

JavaScript ES6, 331 336ไบต์

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)

ฉันเลือกคำที่ใช้เป็นทั้งคำกริยาและคำนามเพื่อทำให้รายการสั้นลง แต่แจ้งให้ฉันทราบหากไม่ได้รับอนุญาต ลองข้างต้นโดยใช้กองเกร็ดเล็กเกร็ดน้อย (รหัสได้มีการจัดรูปแบบการใช้ ES5) หรืออย่างhttp://jsfiddle.net/5eq4knp3/2/ นี่คือตัวอย่างเอาต์พุต:

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

zaคืออะไรในโลก!
Beta Decay

3
@BetaDecay Slang สำหรับพิซซ่า
NinjaBearMonkey

1
@ MarkGabriel มันเป็นฟังก์ชั่นที่ส่งกลับตัวเลขสุ่มระหว่าง 0 ถึง 16 โดยมี offset sเพื่อข้ามส่วนคำพูดอื่น ๆ ในรายการ Math.floor()ทั้งสองตัวหนอนมีค่าที่เหมาะสมไม่ได้ผู้ประกอบการและพวกเขาก็ทำงานเป็นวิธีที่สั้นกว่าที่จะทำ
NinjaBearMonkey

1
@ MarkGabriel นั่นคือวิธีที่ ECMAScript 6 แสดงถึงฟังก์ชั่น r=s=>12เหมือนกับfunction r(s){return 12}สั้นกว่าเท่านั้น ดูเอกสารบนMDNด้วย
NinjaBearMonkey

1
@MarkGabriel สำหรับคำตอบเชิงลึก comeplte ให้ดูดังนั้น SO ~~ (“ tilde คู่”) ทำอะไรใน Javascript? และF = a => หมายถึงอะไรใน Javascript? ~~เป็นประเภทเช่นMath.floor( แต่ทำงานแตกต่างกันสำหรับตัวเลขที่ติดลบ) และ=>เป็นนิยามฟังก์ชัน ES6 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]

เอาต์พุตตัวอย่างแบบสุ่ม:

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

อืม ... อิออนไม่ใช่คำกริยา
John Dvorak

@JanDvorak: โอ้ ... แก้ไขได้!
Falko

2
ทำไมไม่ใช้กริยาที่สั้นกว่านี้? บอกว่าเย็บ ...
John Dvorak

@JanDvorak: ใช่ฉันแทนที่มันแล้ว อย่างไรก็ตามฉันไม่แน่ใจว่าฉันจะตีกอล์ฟเนื้อหาได้ไกลแค่ไหนเนื่องจากมีคำที่สั้นกว่ามากที่สามารถใช้ได้ แต่ผลลัพธ์จะน่าเบื่อมาก
Falko

1
สัมผัสที่ดีที่จะรวมทั้ง 'สำหรับ + ​​... ' และคำวิเศษณ์ (เปล่า) ในรายการเดียว นี่คือสิ่งที่ฉันหวังไว้ - ฉันพบว่ามันมั่นใจอย่างยิ่งว่าคอมพิวเตอร์ของฉันจะไม่ถอดเสื้อผ้า
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..<>

นี่คือการทดสอบ:

$ 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 bytes

ฉันกำลังใช้รายการคำศัพท์ของ Falko เพื่อความเป็นธรรมเพื่อความแตกต่างในการเล่นกอล์ฟนั้นเกิดจากภาษาไม่ใช่เนื้อหา (ฉันอาจเปลี่ยนรายการคำถ้าผู้คนเริ่มเล่นเนื้อหาด้วย)

"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 ครั้ง
เครื่องมือเพิ่มประสิทธิภาพ

@Optimizer โอ้ฉันมองข้ามไปโดยสิ้นเชิง แก้ไขในไม่กี่วินาที
Martin Ender

0

NetLogo, 396

ฉันใช้รายการคำศัพท์ของ Falko ด้วยข้อยกเว้นสองข้อ (ซึ่งไม่เปลี่ยนความยาวของโปรแกรม)

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

คุณสามารถลบอักขระห้าและสามตัวแรกขึ้นอยู่กับวิธีที่คุณกำหนด "โปรแกรม" ซึ่งมีคะแนน 388

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