Những câu chuyện ngụ ngôn trấn an


27

Khá nhiều người ở đây có lẽ là những người đọc XKCD. Vì vậy, tôi cho rằng tôi sẽ thách các bạn làm một việc mà Megan có thể làm một cách dễ dàng: tạo ra một kịch bản tạo ra hàng ngàn câu chuyện ngụ ngôn trấn an về những gì máy tính không bao giờ có thể làm.

XKCD # 1263

Kịch bản của bạn

  • Có thể viết bằng bất kỳ ngôn ngữ nào
  • Phải chơi golf
  • Phải lấy một đầu vào (trên stdinhoặc tương đương với ngôn ngữ của bạn) về số lượng dụ ngôn mà nó sẽ nhổ ra (bạn có thể cho rằng điều này sẽ không vượt quá MAX_INThoặc tương đương).
  • Sẽ xuất ra một số dụ ngôn được tạo ngẫu nhiên .

Các dụ ngôn như sau

  • Bắt đầu với 'Computers will never '
  • Tiếp theo, một trong 16 động từ tiếng Anh độc đáo mà bạn có thể chọn tự do để tối ưu hóa chương trình của mình, nhưng phải bao gồm code-golfunderstand.
  • Tiếp theo, một trong 16 danh từ tiếng Anh độc đáo mà một lần nữa, bạn có thể chọn tự do để tối ưu hóa chương trình của mình, nhưng phải bao gồm a saladan octopus.
  • Tiếp theo, một trong 16 mệnh đề tiếng Anh độc đáo mà bạn có thể chọn tự do để tối ưu hóa chương trình của mình, nhưng phải bao gồm for funafter lunch.
  • Kết thúc bằng một ký tự dòng mới ( \nhoặc tương đương)

Vì vậy, ví dụ, nếu đầu vào là 2, đầu ra hợp lệ sẽ là

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

Kích thước chương trình được tính bằng byte, không phải ký tự (vì vậy không có ký tự unicode). Sơ hở tiêu chuẩn không được phép.

Đây là thử thách đầu tiên của tôi, vì vậy nếu tôi nên thực hiện một số thay đổi rõ ràng, vui lòng bình luận.

Chỉnh sửa: Tôi đang dự tính trừ kích thước từ điển từ số byte, để khuyến khích 'nén' từ điển. Tôi sẽ thấy từ các câu trả lời trong tương lai nếu điều này là khả thi từ xa; nếu có, bạn có thể tin tưởng vào phần thưởng.


4
Bạn có thể muốn thêm kích thước đó được tính bằng bytecác lỗ hổng tiêu chuẩn đó không được phép.
matjoyce

Chúng ta có thể chọn 14 động từ / danh từ / mệnh đề còn lại không?
Trình tối ưu hóa

@Optimizer "... mà bạn có thể chọn tự do để tối ưu hóa chương trình của mình ..."
Martin Ender

5
Tôi muốn hỗ trợ trừ kích thước từ điển để tránh sử dụng các từ cực ngắn nhưng hoàn toàn không biết ( như ở đây ).
Falko

2
@matsjoyce: Đếm byte là mặc định. Điểm có sơ hở tiêu chuẩn là không cần thiết phải đề cập đến chúng.
Dennis

Câu trả lời:


6

CJam, 238 232 (hoặc 209) byte

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

Điều này sử dụng nhiều động từ / danh từ / mệnh đề từ các câu trả lời đã được đăng nhưng một số cũng quá mới. Tôi đã chuyển đổi các ký tự để loại bỏ một số byte thừa.

Chuỗi chuyển đổi cơ sở có thể được phát thêm 24 byte (để có giải pháp 209 byte ; Lưu ý rằng bạn phải xem xét số ký tự thay vì số byte vì tất cả các ký tự có mã ASCII nhỏ hơn 255 nhưng trang web vẫn xem xét một số có mã unicode ) nhưng tôi muốn chuỗi chỉ bao gồm các ký tự ASCII có thể in được.

Chỉ để tham khảo, đây là phiên bản 209 byte:

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

Lấy số lượng dòng để in từ STDIN như:

12

Đầu ra:

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

Dùng thử trực tuyến tại đây


19

Đây là một cách tiếp cận hơi khác:

Python, 368 308 297 byte

EDIT, tôi thực sự đã chơi nó lần này. Cạo sạch 60 ký tự.

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

Đây là trò đánh gôn mà tôi tự hào nhất:

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

Tôi thậm chí không biết trăn có thể làm điều đó! Đây là một lời giải thích đơn giản hơn:

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

gán a và b cho 0 và 1, sau đó cho 1 và 2, sau đó cho 2 và 3.


Điều này sử dụng thư viện ngôn ngữ học của NodeBox để tạo danh sách các động từ / danh từ / mệnh đề và sau đó chọn ngẫu nhiên từ chúng.

Thư viện này không phải là tuyệt vời để tạo ra các từ ngẫu nhiên (do đó là 368 byte), nhưng điều tuyệt vời ở phương pháp này là bạn có được một số dụ ngôn khá yên tâm ngẫu nhiên với nó. Ý tôi là đây

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.

Nhưng này, tôi không nghĩ rằng chương trình của bất kỳ ai khác sẽ tạo ra câu nói: "Máy tính sẽ không bao giờ gây ấn tượng với một người hâm mộ động vật cho bánh tro."

Đây là phiên bản không được chỉnh sửa (574 byte):

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

Và cuối cùng nhưng chắc chắn không kém phần quan trọng, đây là một số truyện ngụ ngôn trấn an yêu thích của tôi, mà tôi dự đoán sẽ trở thành những cụm từ bắt tai thực sự phổ biến trong vòng 10-15 năm tới.

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.

và sở thích cá nhân của tôi:

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

6
Tôi chắc chắn tìm thấy nó yên tâm rằng máy tính sẽ không bao giờ bó lên một nazi cho mua lại ...
Sanchises

chưa đi qua cái này với một chiếc lược có răng hay bất cứ thứ gì, nhưng trừ khi tôi from random import choice as Ccó thể nhầm lẫnfrom random import*;C=choice
ngầm cá nhân

cũng hai lần bạn có for i in ' '*(something)để bạn có thể tiết kiệm trivially hai byte từ loại bỏ các khoảng trống giữa in' '
undergroundmonorail

Vâng, tôi chắc chắn rằng điều này có thể được đánh golf xuống hơn nữa. Tôi đã không nỗ lực rất nhiều để nén nó. Tôi nghĩ rằng tôi thực sự muốn squish nó xuống, tôi cần tìm một thư viện phù hợp hơn với lựa chọn từ ngẫu nhiên.
DJMcMayhem

6

JavaScript ES6, 331 336 byte

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)

Tôi đã chọn những từ hoạt động như cả động từ và danh từ để rút ngắn danh sách, nhưng hãy cho tôi biết nếu điều đó không được phép. Hãy dùng thử ở trên bằng Stack Snippets (Mã đã được định dạng để sử dụng ES5) hoặc tại http://jsfiddle.net/5eq4knp3/2/ . Đây là một ví dụ đầu ra:

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

Cái gì trên trái đất là một za ?!
Beta Decay

3
@BetaDecay Tiếng lóng cho pizza.
NinjaBearMonkey

1
@MarkGabriel Đây là một hàm trả về một số ngẫu nhiên trong khoảng từ 0 đến 16 với phần bù sđể vượt qua các phần khác của lời nói trong danh sách. Hai dấu ngã là các toán tử KHÔNG bit, và chúng chỉ hoạt động như một cách ngắn hơn để làm Math.floor().
NinjaBearMonkey

1
@MarkGabriel Đó là cách ECMAScript 6 đại diện cho các chức năng. r=s=>12là giống như function r(s){return 12}, chỉ ngắn hơn. Cũng xem các tài liệu trên MDN .
NinjaBearMonkey

1
@MarkGabriel Để biết câu trả lời chuyên sâu của comeplte, hãy xem SO'S ~ ~ (Đôi khi dấu ngã) làm gì trong Javascript? F = a => có nghĩa là gì trong Javascript? ~~giống như một Math.floor(nhưng hành xử khác với các số âm) và =>là một định nghĩa hàm kiểu ES6 có ràng buộc this.
apsillers

5

Con trăn - 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]

Đầu ra ví dụ ngẫu nhiên:

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 ... ion không phải là động từ.
John Dvorak

@JanDvorak: Oooops ... Đã sửa nó!
Falko

2
Tại sao không sử dụng một động từ ngắn hơn? Nói, may ...
John Dvorak

@JanDvorak: Vâng, tôi đã thay thế nó. Tuy nhiên, tôi không chắc mình sẽ chơi nội dung bao xa, vì có nhiều từ thậm chí ngắn hơn mà người ta có thể sử dụng. Nhưng kết quả sẽ rất nhàm chán.
Falko

1
Liên lạc tốt đẹp để bao gồm cả 'cho + ...' cũng như trạng từ (trần trụi) trong một danh sách. Đây là những gì tôi đã hy vọng - tôi thấy rất yên tâm rằng máy tính của tôi sẽ không bao giờ cởi quần áo.
Chiếm

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

Đây là một bài kiểm tra:

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

Tôi đang sử dụng danh sách từ của Falko, vì sự công bằng, do đó, sự khác biệt duy nhất trong việc chơi golf là do ngôn ngữ chứ không phải nội dung (tôi có thể thay đổi danh sách từ nếu mọi người cũng bắt đầu chơi golf nội dung).

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

Bạn không đọc đầu vào để in N số lần.
Trình tối ưu hóa

@Optimizer ơi, tôi hoàn toàn bỏ qua điều đó. Sửa trong một giây.
Martin Ender

0

NetLogo, 396

Tôi cũng đã sử dụng danh sách từ của Falko, với hai trường hợp ngoại lệ (không thay đổi thời lượng của chương trình).

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

Tùy thuộc vào cách bạn xác định "chương trình", bạn có thể xóa năm ký tự đầu tiên và ba ký tự cuối cùng, do đó, số điểm là 388.

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.