安心できるたとえ


27

ここのかなりの数の人々は、おそらく熱心なXKCDリーダーです。だから、私はあなたに、ミーガンが簡単にできることをするように挑戦するだろうと考えています。コンピューターが決してできないことについて、何千もの安心できるたとえを生成するスクリプトを作成します。

XKCD#1263

あなたのスクリプト

  • 任意の言語で書くことができます
  • コードゴルフが必要
  • stdin吐き出されるたとえ話の数を入力する必要があります(これに相当する言語でMAX_INT)。
  • ランダムに生成された多くのたとえを出力します。

たとえは次のとおりです

  • 〜で始まる 'Computers will never '
  • 次に、プログラムを最適化するために自由に選択できる16のユニークな英語動詞の1つですが、とを含める必要あります。code-golfunderstand
  • 次に、プログラムを最適化するために自由に選択できる16個のユニークな英語の名詞の1つですが、とを含める必要あります。a saladan octopus
  • 次に、プログラムを最適化するために自由に選択できる16のユニークな英語句の1つですが、とを含める必要あります。for funafter lunch
  • 改行(\nまたは同等の)文字で終わる

したがって、たとえば、入力がの2場合、有効な出力は次のようになります

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

プログラムのサイズは、文字ではなくバイト単位でカウントされます(したがって、ユニコードの意味がありません)。標準の抜け穴は許可されていません。

これが私の最初の挑戦なので、明らかな変更を加える必要がある場合はコメントしてください。

編集:辞書の「圧縮」を促進するために、バイト数から辞書のサイズを差し引くことを考えています。これがリモートで実行可能かどうかは、将来の回答から確認します。もしそうなら、あなたはボーナスを頼りにすることができます。


4
サイズはbytesカウントされ標準の抜け穴は許可されないことを追加できます。
matsjoyce 14年

残りの14の動詞/名詞/節を自分で選択することができますか?
オプティマイザー14年

@Optimizer「...プログラムを最適化するために自由に選択できる...」
マーティン・エンダー14年

5
辞書のサイズを差し引いて、非常に短いが完全に未知の単語(ここのように)を使用しないようにサポートします。
ファルコ14年

2
@matsjoyce:バイトのカウントがデフォルトです。標準的な抜け穴を持つことのポイントは、それらに言及する必要がないということです。
デニス14年

回答:


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バイト以上をgolfedすることができます変換209バイトのソリューションを、あなたはすべての文字が255未満のASCIIコードを持っていますが、サイトはまだいくつかを検討するよう代わりにバイト数の文字数を考慮しなければならないことに注意してくださいは、Unicodeを持っています)しかし、文字列が印刷可能な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、368308297バイト

編集、今回は実際にゴルフをしました。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):

私はpythonでそれができるとさえ知りませんでした!以下に簡単な説明を示します。

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

aとbを0と1に、次に1と2に、次に2と3に割り当てます。


これは、NodeBoxの言語ライブラリを使用して動詞/名詞/句のリストを生成し、それらからランダムに選択します。

このライブラリは、ランダムな単語(したがって368バイト)の生成にはそれほど適していませんが、このアプローチの良いところは、かなりランダムな安心できるたとえ話が得られることです。これが私の意味です。

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

まだ細かいくしか何かで、この1の上に行っていないが、私が間違ってる場合を除きfrom random import choice as C可能性from random import*;C=choice
undergroundmonorail

また、二回あなたが持っているfor i in ' '*(something)ので、することができます自明の間にスペースを取り除くから2バイトの保存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)

リストを短縮するために動詞と名詞の両方として機能する単語を選びましたが、許可されていない場合はお知らせください。上記のStack Snippets(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

一体何がですか?!
ベータ崩壊14年

3
@BetaDecayピザのスラング。
NinjaBearMonkey 14年

1
@MarkGabrielこれsは、リスト内の他の品詞を飛び越えるために、0から16の間の乱数をオフセット付きで返す関数です。2つのチルダはビット単位のNOT演算子であり、短い方法として機能しますMath.floor()
NinjaBearMonkey 14年

1
@MarkGabrielこれが、ECMAScript 6が関数を表す方法です。はとr=s=>12同じですがfunction r(s){return 12}、短いだけです。MDNのドキュメントも参照してください。
NinjaBearMonkey 14年

1
@MarkGabriel comeplteの詳細な回答については、SOのJavascriptでの~~(「二重チルダ」)の機能を参照してくださいそしてFは= A => JavaScriptで何を意味するのでしょうか? ~~は、aのようなものですがMath.floor(負の数の場合は異なる動作をします)、=>バウンドを持つES6スタイルの関数定義thisです。
apsillers 14年

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

うーん... イオンは動詞ではありません。
ジョン・ドヴォルザーク

@JanDvorak:Oooops ...それを修正しました!
ファルコ14年

2
なぜ短い動詞を使用しないのですか?セイ、SEW ...
ジョン・ドヴォルザーク

@JanDvorak:ええ、交換しました。ただし、使用できる単語もっと短いため、コンテンツをどれだけゴルフするかはわかりません。しかし、結果は非常に退屈です。
ファルコ14年

1
「for + ...」と副詞(裸)の両方を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バイト

公平のために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回印刷するための入力を読み取っていません。
オプティマイザー14年

@Optimizerああ、私はそれを見落としていました。すぐに修正します。
マーティンエンダー14年

0

NetLogo、396

また、Falkoの単語リストを使用しましたが、2つの例外があります(プログラムの長さは変わりません)。

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

「プログラム」の定義方法に応じて、最初の5文字と最後の3文字を削除することができます。したがって、スコアは388です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.