Paraboles rassurantes

27

Beaucoup de gens ici sont probablement des lecteurs avides de XKCD. Donc, je pense que je vous mets au défi de faire quelque chose que Megan peut faire facilement: créer un script qui génère des milliers de paraboles rassurantes sur ce que les ordinateurs ne peuvent jamais faire.

XKCD #1263

Votre script

  • Peut être écrit dans n'importe quelle langue
  • Doit être codé au golf
  • Doit prendre une entrée (sur stdinou l'équivalent de votre langue) sur le nombre de paraboles qu'il crachera (vous pouvez supposer que cela ne dépassera pas MAX_INTou l'équivalent).
  • Sortira un certain nombre de paraboles générées aléatoirement .

Les paraboles sont les suivantes

  • Commence avec 'Computers will never '
  • Ensuite, l'un des 16 verbes anglais uniques que vous pouvez choisir librement pour optimiser votre programme, mais qui doivent inclure code-golfet understand.
  • Ensuite, l'un des 16 noms anglais uniques qui, encore une fois, vous pouvez choisir librement pour optimiser votre programme, mais doivent inclure a saladet an octopus.
  • Ensuite, l'une des 16 clauses anglaises uniques que vous pouvez choisir librement pour optimiser votre programme, mais doit inclure for funet after lunch.
  • Se termine par un caractère de nouvelle ligne ( \nou équivalent)

Ainsi, par exemple, si l'entrée est 2, une sortie valide serait

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

La taille du programme est comptée en octets, pas en caractères (donc pas de charabia unicode). Les échappatoires standard ne sont pas autorisées.

C'est mon premier défi, donc si je devais apporter des changements évidents, veuillez commenter.

Edit: J'envisage de soustraire la taille du dictionnaire du nombre d'octets, pour encourager la «compression» du dictionnaire. Je verrai des réponses futures si cela est réalisable à distance; si c'est le cas, vous pouvez compter sur un bonus.

Sanchises
la source
4
Vous souhaiterez peut-être ajouter que la taille est comptée en octets et que les failles standard ne sont pas autorisées.
matsjoyce
Pouvons-nous choisir nous-mêmes les 14 verbes / noms / clauses restants?
Optimizer
@Optimizer "... que vous pouvez choisir librement pour optimiser votre programme ..."
Martin Ender
5
Je soutiendrais la soustraction de la taille du dictionnaire pour éviter d'utiliser des mots ultra-courts mais complètement inconnus ( comme ici ).
Falko
2
@matsjoyce: compter les octets est la valeur par défaut. Le point d'avoir des échappatoires standard est qu'il n'est pas nécessaire de les mentionner.
Dennis

Réponses:

6

CJam, 238 232 (ou 209) octets

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

Cela utilise de nombreux verbes / noms / clauses de réponses déjà publiées, mais certains sont nouveaux également. J'ai converti les caractères en base pour raser certains octets supplémentaires.

La chaîne convertie de base peut être jouée 24 octets de plus (pour obtenir une solution de 209 octets ; notez que vous devez considérer le nombre de caractères au lieu du nombre d'octets car tous les caractères ont un code ASCII inférieur à 255 mais le site considère toujours que certains ont unicode ) mais je voulais que la chaîne ne soit composée que de caractères ASCII imprimables.

Juste pour référence, voici la version à 209 octets:

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

Prend le nombre de lignes à imprimer depuis STDIN comme:

12

Sortie:

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

Essayez-le en ligne ici

Optimiseur
la source
19

Voici une approche légèrement différente:

Python, 368 308 297 octets

EDIT, je l'ai joué au golf cette fois. Rasé 60 caractères.

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

Voici le tour de golf dont je suis le plus fier:

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

Je ne savais même pas que python pouvait faire ça! Voici une explication plus simple:

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

affecte a et b à 0 et 1, puis à 1 et 2, puis à 2 et 3.


Cela utilise la bibliothèque linguistique de NodeBox pour générer une liste de verbes / noms / clauses, puis les sélectionne de manière aléatoire.

Cette bibliothèque n'est pas géniale pour générer des mots aléatoires (d'où les 368 octets), mais la bonne chose à propos de cette approche est que vous obtenez des paraboles assez rassurantes au hasard. Voici ce que je veux dire.

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.

Mais bon, je ne pense pas que le programme de quelqu'un d'autre produira le dicton: "Les ordinateurs n'endommageront jamais un animal amateur de gâteau aux cendres."

Voici une version non golfée (574 octets):

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

Et enfin, mais certainement pas le moindre, voici quelques-unes de mes paraboles rassurantes préférées, qui, je pense, deviendront des slogans vraiment populaires dans les 10 à 15 prochaines années.

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.

et mon préféré:

Computers will never romanticise a cockatoo parrot for cross-fertilization.
DJMcMayhem
la source
6
Je trouve certainement rassurant que les ordinateurs
n'empaquettent
n'ont pas encore revu celui-ci avec un peigne à dents fines ou quoi que ce soit, mais à moins que je ne me trompe, from random import choice as Cpeut-êtrefrom random import*;C=choice
undergroundmonorail
vous avez également deux fois for i in ' '*(something)pour que vous puissiez économiser trivialement deux octets en supprimant l'espace entre inet' '
undergroundmonorail
Oui, je suis sûr que cela peut être approfondi. Je n'ai pas mis beaucoup d'efforts pour le compresser. Je pense que je voulais vraiment l'écraser, il faudrait que je trouve une bibliothèque plus adaptée à la sélection aléatoire des mots.
DJMcMayhem
6

JavaScript ES6, 331 336 octets

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)

J'ai choisi des mots qui fonctionnent à la fois comme verbes et noms pour raccourcir la liste, mais faites-moi savoir si cela n'est pas autorisé. Essayez-le ci-dessus en utilisant des extraits de pile (le code a été formaté pour utiliser ES5) ou sur http://jsfiddle.net/5eq4knp3/2/ . Voici un exemple de sortie:

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
la source
Qu'est-ce qu'un za sur Terre ?!
Beta Decay
3
@BetaDecay Slang pour pizza.
NinjaBearMonkey
1
@MarkGabriel C'est une fonction qui renvoie un nombre aléatoire compris entre 0 et 16 avec décalage spour passer les autres parties du discours de la liste. Les deux tildes sont des opérateurs NOT au niveau du bit, et ils fonctionnent simplement comme un moyen plus court de le faire Math.floor().
NinjaBearMonkey
1
@MarkGabriel Voilà comment ECMAScript 6 représente les fonctions. r=s=>12est le même que function r(s){return 12}, mais plus court. Voir également la documentation sur MDN .
NinjaBearMonkey
1
@MarkGabriel Pour des réponses approfondies, voir SO Que fait ~~ («double tilde») en Javascript? et que signifie F = a => en Javascript? ~~est un peu comme un Math.floor(mais se comporte différemment pour les nombres négatifs), et =>est une définition de fonction de style ES6 avec une limite 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]

Exemple de sortie aléatoire:

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
la source
umm ... ion n'est pas un verbe.
John Dvorak
@JanDvorak: Oooops ... Réparé!
Falko
2
Pourquoi ne pas utiliser un verbe plus court? Dites, cousez ...
John Dvorak
@JanDvorak: Oui, je l'ai remplacé. Cependant, je ne sais pas jusqu'où je jouerais le contenu, car il existe de nombreux mots encore plus courts que l'on pourrait utiliser. Mais le résultat serait tellement ennuyeux.
Falko
1
Belle touche pour inclure à la fois «pour + ...» ainsi que des adverbes (nus) dans une liste. C'est ce que j'espérais - je trouve très rassurant que mon ordinateur ne se déshabille jamais.
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..<>

Voici un 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
la source
1

CJam, 353 317 301 octets

J'utilise la liste de mots de Falko, par souci d'équité, de sorte que la seule différence dans le golf est due aux langues et non au contenu (je pourrais changer la liste de mots si les gens commencent à jouer au golf également).

"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
la source
Vous ne lisez pas l'entrée pour imprimer N nombre de fois.
Optimizer
@Optimizer Oh, j'ai totalement ignoré cela. Fixation en une seconde.
Martin Ender
0

NetLogo, 396

J'ai également utilisé la liste de mots de Falko, à deux exceptions près (qui ne modifient pas la durée du programme).

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

Selon la façon dont vous définissez "programme", vous pouvez supprimer les cinq premiers et les trois derniers caractères, soit un score de 388.

Ypnypn
la source