Parábolas tranquilizadoras

27

Algunas personas aquí son probablemente ávidos lectores de XKCD. Entonces, me imagino que los desafiaría a hacer algo que Megan puede hacer fácilmente: crear un script que genere miles de parábolas tranquilizadoras sobre lo que las computadoras nunca pueden hacer.

XKCD # 1263

Tu guion

  • Se puede escribir en cualquier idioma.
  • Debe tener código de golf
  • Debe tomar una entrada ( stdino el equivalente de su idioma) en el número de parábolas que escupirá (puede suponer que esto no excederá MAX_INTo equivalente).
  • Producirá una serie de parábolas generadas aleatoriamente .

Las parábolas son las siguientes.

  • Comienza con 'Computers will never '
  • A continuación, uno de los 16 verbos en inglés únicos que puede elegir libremente para optimizar su programa, pero debe incluir code-golfy understand.
  • A continuación, uno de los 16 sustantivos únicos en inglés que, una vez más, puede elegir libremente para optimizar su programa, pero debe incluir a salady an octopus.
  • A continuación, una de las 16 cláusulas únicas en inglés que puede elegir libremente para optimizar su programa, pero debe incluir for funy after lunch.
  • Termina con un carácter de nueva línea ( \no equivalente)

Entonces, por ejemplo, si la entrada es 2, una salida válida sería

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

El tamaño del programa se cuenta en bytes, no en caracteres (por lo que no hay galimatías unicode). Las lagunas estándar no están permitidas.

Este es mi primer desafío, así que si debo hacer algunos cambios obvios, comente.

Editar: Estoy contemplando restar el tamaño del diccionario del conteo de bytes, para alentar la 'compresión' del diccionario. Veré en futuras respuestas si esto es remotamente factible; si es así, puede contar con un bono.

Sanchises
fuente
44
Es posible que desee agregar que el tamaño se cuenta en bytes y que las lagunas estándar no están permitidas.
matsjoyce
¿Podemos elegir los 14 verbos / sustantivos / cláusulas restantes nosotros mismos?
Optimizador
@Optimizer "... que puedes elegir libremente para optimizar tu programa ..."
Martin Ender
55
Apoyaría restar el tamaño del diccionario para evitar el uso de palabras ultracortas pero completamente desconocidas ( como aquí ).
Falko
2
@matsjoyce: contar bytes es el valor predeterminado. El punto de tener lagunas estándar es que no es necesario mencionarlas.
Dennis

Respuestas:

6

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

Utiliza muchos verbos / sustantivos / cláusulas de respuestas ya publicadas, pero algunas también son nuevas. Tengo base convertida los caracteres para eliminar algunos bytes adicionales.

La cadena convertida base puede jugarse 24 bytes más (para obtener una solución de 209 bytes ; tenga en cuenta que debe considerar el recuento de caracteres en lugar del recuento de bytes, ya que todos los caracteres tienen un código ASCII de menos de 255 pero el sitio aún considera que algunos tienen unicode ) pero quería que la cadena constara solo de caracteres ASCII imprimibles.

Solo como referencia, aquí está la versión de 209 bytes:

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

Toma el número de líneas para imprimir desde STDIN como:

12

Salida:

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

Pruébalo en línea aquí

Optimizador
fuente
19

Aquí hay un enfoque ligeramente diferente:

Python, 368308297 bytes

EDITAR, en realidad lo jugué esta vez. Afeitado de 60 caracteres.

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

Aquí está el truco de golf del que estoy más orgulloso:

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

¡Ni siquiera sabía que Python podría hacer eso! Aquí hay una explicación más simple:

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

asigna a y b a 0 y 1, y luego a 1 y 2, y luego a 2 y 3.


Esto utiliza la biblioteca de lingüística de NodeBox para generar una lista de verbos / sustantivos / cláusulas, y luego los selecciona aleatoriamente.

Esta biblioteca no es tan buena para generar palabras aleatorias (de ahí los 368 bytes), pero lo bueno de este enfoque es que obtienes algunas parábolas tranquilizadoras bastante aleatorias. Esto es lo que quiero decir.

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.

Pero bueno, no creo que el programa de nadie más genere el dicho: "Las computadoras nunca deslumbrarán a un fanático de los animales por el pastel de ceniza".

Aquí hay una versión sin golf (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 )+'.' 

Y por último pero definitivamente no menos importante, aquí están algunas de mis parábolas tranquilizadoras favoritas, que predigo que se convertirán en frases populares en los próximos 10-15 años.

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.

y mi favorito personal:

Computers will never romanticise a cockatoo parrot for cross-fertilization.
DJMcMayhem
fuente
66
Ciertamente me parece tranquilizador que las computadoras nunca agrupen a un nazi para la recompra ...
Sanchises
no han pasado más de éste con un peine de dientes finos o nada, pero si no me equivoco from random import choice as Cpodría serfrom random import*;C=choice
undergroundmonorail
también dos veces que tiene for i in ' '*(something)para que pueda guardar trivialmente dos bytes de eliminar el espacio entre iny' '
undergroundmonorail
Sí, estoy seguro de que esto se puede reducir aún más. No puse mucho esfuerzo en comprimirlo. Creo que realmente quería aplastarlo, necesitaría encontrar una biblioteca más adecuada para la selección aleatoria de palabras.
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)

Escogí palabras que funcionan como verbos y sustantivos para acortar la lista, pero avíseme si eso no está permitido. Pruébelo más arriba usando fragmentos de pila (el código allí ha sido formateado para usar ES5) o en http://jsfiddle.net/5eq4knp3/2/ . Aquí hay un ejemplo de salida:

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
NinjaOsoMono
fuente
¿Qué demonios es un za ?
Beta Decay
3
@BetaDecay Argot para pizza.
NinjaBearMonkey
1
@ MarkGabriel Es una función que devuelve un número aleatorio entre 0 y 16 con desplazamiento spara saltar más allá de las otras partes del discurso en la lista. Las dos tildes no son operadores bit a bit, y solo funcionan como una forma más corta de hacerlo Math.floor().
NinjaBearMonkey
1
@ MarkGabriel Así es como ECMAScript 6 representa las funciones. r=s=>12es lo mismo que function r(s){return 12}, solo que más corto. También vea los documentos en MDN .
NinjaBearMonkey
1
@ MarkGabriel Para obtener respuestas detalladas, vea SO's ¿Qué hace ~~ ("doble tilde") en Javascript? y ¿Qué significa F = a => en Javascript? ~~es algo así como un Math.floor(pero se comporta de manera diferente para los números negativos), y =>es una definición de función de estilo ES6 con un límite 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]

Salida de ejemplo aleatorio:

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
fuente
umm ... ion no es un verbo.
John Dvorak
@ JanDvorak: Oooops ... ¡Lo arreglé!
Falko
2
¿Por qué no usar un verbo más corto? Di, cose ...
John Dvorak
@ JanDvorak: Sí, lo reemplacé. Sin embargo, no estoy seguro de hasta qué punto jugaría golf el contenido, ya que hay muchas palabras aún más cortas que uno podría usar. Pero el resultado sería muy aburrido.
Falko
1
Un buen toque para incluir tanto 'para + ...' como adverbios (desnudos) en una lista. Esto es lo que esperaba: me parece muy tranquilizador que mi computadora nunca se desnude.
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..<>

Aquí hay una prueba:

$ 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
fuente
1

CJam, 353 317 301 bytes

Estoy usando la lista de palabras de Falko, para ser justos, de modo que la única diferencia en el golf se debe a los idiomas y no al contenido (podría cambiar la lista de palabras si la gente también comienza a jugar golf).

"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
fuente
No está leyendo la entrada para imprimir N número de veces.
Optimizador
@Optimizer Oh, lo pasé por alto por completo. Arreglando en un segundo.
Martin Ender
0

NetLogo, 396

También utilicé la lista de palabras de Falko, con dos excepciones (que no cambian la duración del programa).

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

Dependiendo de cómo defina "programa", puede eliminar los primeros cinco y últimos tres caracteres, por lo tanto, una puntuación de 388.

Ypnypn
fuente