Perumpamaan yang meyakinkan

27

Beberapa orang di sini mungkin adalah pembaca XKCD yang rajin. Jadi, saya pikir saya akan menantang kalian untuk melakukan sesuatu yang bisa dilakukan Megan dengan mudah: membuat skrip yang menghasilkan ribuan perumpamaan yang meyakinkan tentang apa yang tidak bisa dilakukan komputer.

XKCD # 1263

Skrip Anda

  • Dapat ditulis dalam bahasa apa pun
  • Harus kode-golf
  • Harus mengambil input (pada stdinatau setara dengan bahasa Anda) pada jumlah perumpamaan yang akan dimuntahkan (Anda dapat menganggap ini tidak akan melebihi MAX_INTatau setara).
  • Akan menampilkan sejumlah perumpamaan yang dibuat secara acak .

Perumpamaannya adalah sebagai berikut

  • Dimulai dengan 'Computers will never '
  • Berikutnya, salah satu dari 16 kata kerja bahasa Inggris unik yang dapat Anda pilih secara bebas untuk mengoptimalkan program Anda, tetapi harus menyertakan code-golfdan understand.
  • Selanjutnya, salah satu dari 16 kata benda bahasa Inggris unik yang lagi-lagi, Anda dapat memilih dengan bebas untuk mengoptimalkan program Anda, tetapi harus menyertakan a saladdan an octopus.
  • Selanjutnya, salah satu dari 16 klausa bahasa Inggris unik yang dapat Anda pilih secara bebas untuk mengoptimalkan program Anda, tetapi harus menyertakan for fundan after lunch.
  • Berakhir dengan karakter baris baru ( \natau setara)

Jadi, misalnya, jika inputnya adalah 2, output yang valid adalah

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

Ukuran program dihitung dalam byte, bukan karakter (jadi tidak ada unicode omong kosong). Tidak ada celah standar .

Ini adalah tantangan pertama saya, jadi jika saya harus membuat beberapa perubahan yang jelas, mohon komentar.

Sunting: Saya berpikir untuk mengurangi ukuran kamus dari jumlah byte, untuk mendorong kamus 'kompresi'. Saya akan melihat dari jawaban di masa depan jika ini layak; jika ya, Anda dapat mengandalkan bonus.

Sanchises
sumber
4
Anda mungkin ingin menambahkan bahwa ukuran dihitung dalam byte , dan celah standar tidak diperbolehkan.
matsjoyce
Apakah kita dapat memilih sendiri 14 kata kerja / kata benda / klausa yang tersisa?
Pengoptimal
@Optimizer "... yang dapat Anda pilih dengan bebas untuk mengoptimalkan program Anda ..."
Martin Ender
5
Saya mendukung pengurangan ukuran kamus untuk mencegah penggunaan kata-kata yang sangat pendek tapi sama sekali tidak dikenal ( seperti di sini ).
Falko
2
@matsjoyce: Menghitung byte adalah default. Inti dari memiliki celah standar adalah tidak perlu menyebutkannya.
Dennis

Jawaban:

6

CJam, 238 232 (atau 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}*

Ini menggunakan banyak kata kerja / kata benda / klausa dari jawaban yang sudah diposting tetapi beberapa juga baru. Saya telah mengkonversi basis karakter untuk mencukur beberapa byte tambahan.

String yang dikonversi dasar dapat di-golf 24 byte lebih (untuk mendapatkan solusi 209 byte ; Perhatikan bahwa Anda harus mempertimbangkan jumlah karakter alih-alih jumlah byte karena semua karakter memiliki kode ASCII kurang dari 255 tetapi situs masih menganggap beberapa memiliki kode unik ) tetapi saya ingin string hanya terdiri dari karakter ASCII yang dapat dicetak.

Hanya untuk referensi, berikut adalah versi 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}*

Mengambil jumlah baris untuk dicetak dari STDIN seperti:

12

Keluaran:

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

Cobalah online di sini

Pengoptimal
sumber
19

Inilah pendekatan yang sedikit berbeda:

Python, 368 308 297 byte

EDIT, saya benar-benar bermain golf kali ini. Memotong 60 karakter.

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

Inilah trik golf yang paling saya banggakan:

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

Saya bahkan tidak tahu python bisa melakukan itu! Berikut penjelasan yang lebih sederhana:

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

menetapkan a dan b ke 0 dan 1, dan kemudian ke 1 dan 2, dan kemudian ke 2 dan 3.


Ini menggunakan linguistik perpustakaan NodeBox untuk menghasilkan daftar kata kerja / kata benda / klausa, dan kemudian secara acak memilih dari mereka.

Perpustakaan ini tidak terlalu bagus untuk menghasilkan kata-kata acak (karena itu 368 byte), tetapi hal yang menyenangkan tentang pendekatan ini adalah Anda mendapatkan beberapa perumpamaan meyakinkan yang cukup acak dengannya. Inilah yang saya maksud.

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.

Tapi, hei, saya tidak berpikir program orang lain akan menghasilkan pepatah: "Komputer tidak akan pernah membedakan peternak hewan untuk kue abu."

Berikut adalah versi yang tidak dikoleksi (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 )+'.' 

Dan yang terakhir tapi pasti yang tidak kalah pentingnya, berikut adalah beberapa perumpamaan meyakinkan favorit saya, yang saya prediksi akan menjadi frase-catch catch yang sangat populer dalam 10-15 tahun ke depan.

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.

dan favorit pribadi saya:

Computers will never romanticise a cockatoo parrot for cross-fertilization.
DJMcMayhem
sumber
6
Saya pasti menemukan itu meyakinkan bahwa komputer tidak akan pernah mengikat nazi untuk dibeli kembali ...
Sanchises
belum membahas yang ini dengan sisir bergigi halus atau apa pun, tapi kecuali saya salah from random import choice as Cbisafrom random import*;C=choice
undergroundmonorail
juga dua kali Anda miliki for i in ' '*(something)sehingga Anda dapat dengan mudah menyimpan dua byte dari menghilangkan ruang di antara indan' '
undergroundmonorail
Ya, saya yakin ini bisa diturunkan lebih jauh. Saya tidak berusaha keras untuk mengompresnya. Saya pikir saya benar-benar ingin menekannya, saya harus mencari perpustakaan yang lebih cocok untuk pemilihan kata acak.
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)

Saya memilih kata-kata yang berfungsi sebagai kata kerja dan kata benda untuk mempersingkat daftar, tetapi beri tahu saya jika itu tidak diizinkan. Cobalah di atas menggunakan Cuplikan Stack (Kode di sana telah diformat untuk menggunakan ES5) atau di http://jsfiddle.net/5eq4knp3/2/ . Berikut adalah contoh output:

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
NinjaBearMonkey
sumber
Apa-apaan ini za ?!
Beta Decay
3
@BetaDecay Slang untuk pizza.
NinjaBearMonkey
1
@MarkGabriel Ini adalah fungsi yang mengembalikan angka acak antara 0 dan 16 dengan offset suntuk melompat melewati bagian lain dari pidato dalam daftar. Kedua tilde itu BUKAN operator bitwise, dan mereka hanya berfungsi sebagai cara yang lebih pendek untuk dilakukan Math.floor().
NinjaBearMonkey
1
@ MarkGabriel Begitulah ECMAScript 6 merepresentasikan fungsi. r=s=>12sama dengan function r(s){return 12}, hanya lebih pendek. Lihat juga dokumen di MDN .
NinjaBearMonkey
1
@MarkGabriel Untuk jawaban mendalam comeplte, lihat SO's What ~ ~ (“double tilde”) lakukan dalam Javascript? dan Apa arti F = a => dalam Javascript? ~~adalah semacam seperti Math.floor(tetapi berperilaku berbeda untuk angka negatif), dan =>merupakan definisi fungsi gaya ES6 dengan batas 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]

Output contoh acak:

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
Falko
sumber
umm ... ion bukan kata kerja.
John Dvorak
@JanDvorak: Oooops ... Memperbaikinya!
Falko
2
Mengapa tidak menggunakan kata kerja yang lebih pendek? Katakan, jahit ...
John Dvorak
@ JanDvorak: Ya, saya menggantinya. Namun, saya tidak yakin seberapa jauh saya akan bermain golf konten, karena ada banyak kata bahkan lebih pendek yang bisa digunakan. Tapi hasilnya akan sangat membosankan.
Falko
1
Sentuhan yang bagus untuk memasukkan 'untuk + ...' serta kata keterangan (telanjang) dalam satu daftar. Inilah yang saya harapkan - saya merasa sangat meyakinkan bahwa komputer saya tidak akan pernah membuka pakaian.
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..<>

Ini tesnya:

$ 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
core1024
sumber
1

CJam, 353 317 301 byte

Saya menggunakan daftar kata Falko, untuk keadilan, sehingga satu-satunya perbedaan dalam golf adalah karena bahasa dan bukan isinya (saya mungkin mengubah daftar kata jika orang-orang mulai bermain golf konten juga).

"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=
Martin Ender
sumber
Anda tidak membaca input untuk mencetak N beberapa kali.
Pengoptimal
@Optimizer Oh, saya benar-benar mengabaikannya. Memperbaiki dalam sedetik.
Martin Ender
0

NetLogo, 396

Saya juga menggunakan daftar kata Falko, dengan dua pengecualian (yang tidak mengubah panjang program).

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

Bergantung pada bagaimana Anda mendefinisikan "program", Anda dapat menghapus lima pertama dan tiga karakter terakhir, sehingga skor 388.

Ypnypn
sumber