Beruhigende Gleichnisse

27

Nicht wenige Leute hier sind wahrscheinlich begeisterte XKCD-Leser. Ich denke also, ich fordere Sie heraus, etwas zu tun, das Megan leicht tun kann: ein Skript zu erstellen, das Tausende beruhigender Gleichnisse darüber generiert, was Computer niemals können.

XKCD # 1263

Dein Drehbuch

  • Kann in jeder Sprache geschrieben werden
  • Muss Code-Golf sein
  • stdinDie Anzahl der Gleichnisse, die ausgegeben werden sollen, muss eingegeben werden (auf oder entsprechend Ihrer Sprache MAX_INT).
  • Gibt eine Anzahl zufällig generierter Parabeln aus.

Die Gleichnisse sind wie folgt

  • Beginnt mit 'Computers will never '
  • Als nächster einer von 16 einzigartigen englischen Verben , die Sie frei Ihr Programm optimieren wählen können, aber müssen umfassen code-golfund understand.
  • Als nächstes eines von 16 einzigartigen englischen Substantiven, die Sie wiederum frei wählen können, um Ihr Programm zu optimieren, aber und einschließen müssen .a saladan octopus
  • Als nächster einer von 16 einzigartigen englischen Klauseln , die Sie frei Ihr Programm optimieren wählen können, aber müssen umfassen for funund after lunch.
  • Endet mit einem Newline-Zeichen ( \noder einem gleichwertigen Zeichen)

Wenn also zum Beispiel die Eingabe ist 2, wäre eine gültige Ausgabe

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

Die Programmgröße wird in Bytes und nicht in Zeichen gezählt (also kein Unicode-Kauderwelsch). Standardlücken sind nicht erlaubt.

Dies ist meine erste Herausforderung. Wenn ich also offensichtliche Änderungen vornehmen sollte, kommentieren Sie dies bitte.

Bearbeiten: Ich denke darüber nach, die Wörterbuchgröße von der Byteanzahl zu subtrahieren, um die 'Komprimierung' des Wörterbuchs zu fördern. Ich werde anhand zukünftiger Antworten sehen, ob dies aus der Ferne möglich ist. Wenn ja, können Sie mit einem Bonus rechnen.

Sanchises
quelle
4
Möglicherweise möchten Sie hinzufügen, dass die Größe in Byte gezählt wird und dass Standardlücken nicht zulässig sind.
Matsjoyce
Können wir die restlichen 14 Verben / Substantive / Klauseln selbst auswählen?
Optimierer
@Optimizer "... den Sie frei wählen können, um Ihr Programm zu optimieren ..."
Martin Ender
5
Ich würde das Subtrahieren der Wörterbuchgröße unterstützen, um zu verhindern, dass ultrakurze, aber völlig unbekannte Wörter verwendet werden ( wie hier ).
Falko
2
@matsjoyce: Bytes zählen ist die Standardeinstellung. Der Punkt mit Standardlücken ist, dass es nicht notwendig ist, sie zu erwähnen.
Dennis

Antworten:

6

CJam, 238 232 (oder 209) Bytes

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

Dies verwendet viele Verben / Nomen / Klauseln aus bereits geposteten Antworten, aber einige sind auch neu. Ich habe die Zeichen Base konvertiert, um einige zusätzliche Bytes zu entfernen.

Die konvertierte Basiszeichenfolge kann 24 weitere Bytes lang sein (um eine 209-Byte-Lösung zu erhalten) . Beachten Sie, dass Sie die Zeichenanzahl anstelle der Byte-Anzahl berücksichtigen müssen, da alle Zeichen einen ASCII-Code von weniger als 255 haben, die Site jedoch weiterhin davon ausgeht , dass einige Unicode haben ), aber ich wollte, dass die Zeichenfolge nur aus druckbaren ASCII-Zeichen besteht.

Nur als Referenz, hier ist die 209-Byte-Version:

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

Nimmt die Anzahl der zu druckenden Zeilen von STDIN wie folgt an:

12

Ausgabe:

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

Probieren Sie es hier online aus

Optimierer
quelle
19

Hier ist ein etwas anderer Ansatz:

Python, 368 308 297 Bytes

BEARBEITEN, diesmal habe ich tatsächlich Golf gespielt. Ab 60 Zeichen rasiert.

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

Hier ist der Golf-Trick, auf den ich am meisten stolz bin:

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

Ich wusste nicht einmal, dass Python das kann! Hier ist eine einfachere Erklärung:

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

weist a und b 0 und 1 und dann 1 und 2 und dann 2 und 3 zu.


Dabei wird die Linguistikbibliothek von NodeBox verwendet, um eine Liste von Verben / Nomen / Klauseln zu generieren und diese dann zufällig auszuwählen.

Diese Bibliothek ist nicht besonders gut für die Erzeugung von zufälligen Wörtern geeignet (daher die 368 Bytes), aber das Schöne an diesem Ansatz ist, dass Sie einige ziemlich zufällige beruhigende Gleichnisse damit erhalten. Hier ist was ich meine.

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.

Aber hey, ich glaube nicht, dass irgendjemand anderes Programm das Sprichwort hervorbringt: "Computer werden niemals einen Tierliebhaber für Aschekuchen blenden."

Hier ist eine ungolfed Version (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 )+'.' 

Und zu guter Letzt, hier sind einige meiner beruhigenden Lieblingsparabeln, von denen ich annehme, dass sie in den nächsten 10 bis 15 Jahren zu sehr beliebten Schlagworten werden.

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.

und mein persönlicher Favorit:

Computers will never romanticise a cockatoo parrot for cross-fertilization.
DJMcMayhem
quelle
6
Ich finde es auf jeden
Fall
nicht mit einem feinen Kamm oder noch nichts über diese weg, aber es sei denn , ich irre from random import choice as Ckönntefrom random import*;C=choice
undergroundmonorail
Außerdem haben for i in ' '*(something)Sie zweimal, damit Sie zwei Bytes einsparen können, wenn Sie das Leerzeichen zwischen inund entfernen.' '
undergroundmonorail
Ja, ich bin mir sicher, dass das noch weiter verbessert werden kann. Ich habe nicht viel Mühe darauf verwendet, es zu komprimieren. Ich denke, ich wollte es wirklich zermalmen, ich müsste eine Bibliothek finden, die besser für die zufällige Wortauswahl geeignet ist.
DJMcMayhem
6

JavaScript ES6, 331 336 Bytes

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)

Ich habe Wörter ausgewählt, die sowohl als Verben als auch als Substantive funktionieren, um die Liste zu verkürzen. Lassen Sie mich jedoch wissen, wenn dies nicht zulässig ist. Probieren Sie es oben mit Stack Snippets (der Code wurde für ES5 formatiert) oder unter http://jsfiddle.net/5eq4knp3/2/ aus . Hier ist eine Beispielausgabe:

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
quelle
Was um alles in der Welt ist ein za ?!
Beta Decay
3
@BetaDecay Slang für Pizza.
NinjaBearMonkey
1
@MarkGabriel Es ist eine Funktion, die eine Zufallszahl zwischen 0 und 16 mit Versatz zurückgibt, um süber die anderen Wortarten in der Liste zu springen. Die beiden Tilden sind bitweise NICHT-Operatoren und dienen lediglich als kürzere Methode Math.floor().
NinjaBearMonkey
1
@MarkGabriel So repräsentiert ECMAScript 6 Funktionen. r=s=>12ist das gleiche wie function r(s){return 12}, nur kürzer. Siehe auch die Dokumentation zu MDN .
NinjaBearMonkey
1
@MarkGabriel Ausführliche Antworten finden Sie unter SO's. Was macht ~~ (“double tilde”) in Javascript? und was bedeutet F = a => in Javascript? ~~ähnelt a Math.floor(verhält sich aber bei negativen Zahlen anders) und =>ist eine Funktionsdefinition im ES6-Stil mit einer Schranke 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]

Zufällige Beispielausgabe:

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
quelle
umm ... ion ist kein Verb.
John Dvorak
@ JanDvorak: Hoppla ... Es wurde behoben!
Falko
2
Warum nicht ein kürzeres Verb verwenden? Sagen Sie, nähen ...
John Dvorak
@ JanDvorak: Ja, ich habe es ersetzt. Ich bin mir jedoch nicht sicher, wie weit ich mit dem Inhalt gehen würde, da es viele noch kürzere Wörter gibt , die man verwenden könnte . Aber das Ergebnis wäre sooo langweilig.
Falko
1
Nizza Touch, um sowohl "für + ..." als auch Adverbien (nackt) in eine Liste aufzunehmen. Das habe ich mir erhofft - ich finde es sehr beruhigend, dass sich mein Computer niemals ausziehen wird.
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..<>

Hier ist ein 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
core1024
quelle
1

CJam, 353 317 301 Bytes

Ich verwende aus Gründen der Fairness die Wortliste von Falko, sodass der einzige Unterschied beim Golfen in den Sprachen und nicht im Inhalt liegt (ich kann die Wortliste ändern, wenn die Leute auch mit dem Golfen beginnen).

"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
quelle
Sie lesen die Eingabe zum Drucken N-mal nicht.
Optimierer
@Optimizer Oh, das habe ich total übersehen. Fixing in einer Sekunde.
Martin Ender
0

NetLogo, 396

Ich habe auch Falkos Wortliste verwendet, mit zwei Ausnahmen (die die Länge des Programms nicht ändern).

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

Abhängig davon, wie Sie "Programm" definieren, können Sie die ersten fünf und letzten drei Zeichen entfernen, was einer Punktzahl von 388 entspricht.

Ypnypn
quelle