Parabole rassicuranti


27

Molte persone qui sono probabilmente avidi lettori XKCD. Quindi, immagino che sfiderò voi ragazzi a fare qualcosa che Megan può fare facilmente: creare una sceneggiatura che generi migliaia di parabole rassicuranti su ciò che i computer non potranno mai fare.

XKCD # 1263

La tua sceneggiatura

  • Può essere scritto in qualsiasi lingua
  • Deve essere codificato
  • Deve prendere un input (su stdino equivalente nella tua lingua) sul numero di parabole che sputerà (puoi presumere che questo non supererà MAX_INTo equivalente).
  • Produrrà un numero di parabole generate casualmente .

Le parabole sono le seguenti

  • Inizia con 'Computers will never '
  • Successivamente, uno dei 16 verbi inglesi unici che puoi scegliere liberamente per ottimizzare il tuo programma, ma deve includere code-golfe understand.
  • Successivamente, uno dei 16 nomi inglesi unici che, di nuovo, puoi scegliere liberamente per ottimizzare il tuo programma, ma deve includere a salade an octopus.
  • Successivamente, una delle 16 clausole inglesi uniche che puoi scegliere liberamente per ottimizzare il tuo programma, ma deve includere for fune after lunch.
  • Termina con un carattere di nuova riga ( \no equivalente)

Ad esempio, se l'input è 2, un output valido sarebbe

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

Le dimensioni del programma sono conteggiate in byte, non in caratteri (quindi non unicode incomprensibile). Non sono ammesse scappatoie standard .

Questa è la mia prima sfida, quindi se dovessi apportare alcune ovvie modifiche, per favore commenta.

Modifica: sto pensando di sottrarre la dimensione del dizionario dal conteggio dei byte, per incoraggiare la "compressione" del dizionario. Vedrò dalle risposte future se questo è fattibile da remoto; se lo è, puoi contare su un bonus.


4
Potresti voler aggiungere che la dimensione è conteggiata in byte e che non sono consentite scappatoie standard .
matsjoyce,

Dobbiamo scegliere noi stessi i restanti 14 verbi / nomi / clausole?
Ottimizzatore,

@Optimizer "... che puoi scegliere liberamente per ottimizzare il tuo programma ..."
Martin Ender,

5
Supporterei la sottrazione delle dimensioni del dizionario per evitare di usare parole ultra corte ma completamente sconosciute ( come qui ).
Falko,

2
@matsjoyce: il conteggio dei byte è l'impostazione predefinita. Il punto di avere scappatoie standard è che non è necessario menzionarle.
Dennis,

Risposte:


6

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

Questo utilizza molti verbi / nomi / clausole dalle risposte già pubblicate, ma alcune sono anche nuove. Ho convertito i personaggi in base per radere qualche byte in più.

La stringa convertita di base può essere giocata a golf con 24 byte in più (per ottenere una soluzione di 209 byte ; Nota che devi considerare il conteggio dei caratteri invece del conteggio dei byte poiché tutti i caratteri hanno un codice ASCII inferiore a 255 ma il sito considera ancora alcuni ha unicode ) ma volevo che la stringa consistesse solo di caratteri ASCII stampabili.

Solo per riferimento, ecco la versione 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}*

Prende il numero di righe da stampare da STDIN come:

12

Produzione:

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

Provalo online qui


19

Ecco un approccio leggermente diverso:

Python, 368308 297 byte

EDIT, questa volta l'ho davvero giocato a golf. Rasato di 60 caratteri.

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

Ecco il trucco di cui sono più orgoglioso:

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

Non sapevo nemmeno che Python potesse farlo! Ecco una spiegazione più semplice:

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

assegna aeb a 0 e 1, quindi a 1 e 2, quindi a 2 e 3.


Questo utilizza la libreria linguistica di NodeBox per generare un elenco di verbi / nomi / clausole, e quindi seleziona casualmente da essi.

Questa libreria non è eccezionale per generare parole casuali (da qui i 368 byte), ma la cosa bella di questo approccio è che si ottengono parabole rassicuranti piuttosto casuali. Ecco cosa intendo.

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.

Ma ehi, non credo che il programma di qualcun altro genererà il detto: "I computer non abbatteranno mai un fantasma di animali per la torta di cenere".

Ecco una versione non modificata (574 byte):

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

E infine, ma sicuramente non meno importante, ecco alcune delle mie parabole rassicuranti preferite, che prevedo diventeranno frasi di cattura molto popolari nei prossimi 10-15 anni.

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.

e il mio preferito personale:

Computers will never romanticise a cockatoo parrot for cross-fertilization.

6
Trovo certamente rassicurante che i computer non raggruppino mai un nazista per il riacquisto ...
Sanchises,

non l'ho mai visto con un pettine a denti fini o qualcosa del genere, ma a meno che non mi sbagli from random import choice as Cpotrebbe esserefrom random import*;C=choice
undergroundmonorail

anche due volte che hai in for i in ' '*(something)modo da poter salvare banalmente due byte dalla rimozione dello spazio tra ine' '
undergroundmonorail

Sì, sono sicuro che questo può essere ulteriormente approfondito. Non ho fatto molti sforzi per comprimerlo. Penso di voler davvero comprimerlo, avrei bisogno di trovare una libreria più adatta alla selezione casuale delle parole.
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)

Ho scelto parole che funzionano sia come verbi che come sostantivi per abbreviare l'elenco, ma fatemi sapere se ciò non è permesso. Provalo sopra usando Stack Snippet (il codice è stato formattato per usare ES5) o su http://jsfiddle.net/5eq4knp3/2/ . Ecco un esempio di 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

Cosa diavolo è uno za ?!
Decadimento beta

3
@BetaDecay Slang per pizza.
NinjaBearMonkey,

1
@MarkGabriel È una funzione che restituisce un numero casuale compreso tra 0 e 16 con offset sper saltare oltre le altre parti del discorso nell'elenco. Le due tilde sono operatori NON bit a bit e funzionano solo come un modo più breve di fare Math.floor().
NinjaBearMonkey il

1
@MarkGabriel Ecco come ECMAScript 6 rappresenta le funzioni. r=s=>12è lo stesso di function r(s){return 12}, solo più breve. Vedi anche i documenti su MDN .
NinjaBearMonkey il

1
@MarkGabriel Per risposte approfondite comeplte, vedi SO's Cosa fa ~~ ("double tilde") in Javascript? e cosa significa F = a => in Javascript? ~~è un po 'come un Math.floor(ma si comporta diversamente per i numeri negativi) ed =>è una definizione di funzione in stile ES6 con un 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]

Esempio di output casuale:

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

umm ... ion non è un verbo.
John Dvorak,

@JanDvorak: Oooops ... Risolto il problema!
Falko,

2
Perché non usare un verbo più corto? Di ', cuci ...
John Dvorak,

@JanDvorak: Sì, l'ho sostituito. Tuttavia, non sono sicuro di quanto lontano vorrei golf il contenuto, dal momento che ci sono molte parole ancora più brevi che si potrebbero usare. Ma il risultato sarebbe così noioso.
Falko,

1
Bel tocco per includere sia 'per + ...' che gli avverbi (nudi) in un elenco. Questo è quello che speravo: trovo molto rassicurante che il mio computer non si spogli mai.
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..<>

Ecco 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

1

CJam, 353 317 301 byte

Sto usando l'elenco di parole di Falko, per correttezza, in modo che l'unica differenza nel golf sia dovuta alle lingue e non al contenuto (potrei cambiare l'elenco di parole se le persone iniziano a giocare anche a 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=

Non stai leggendo l'input per la stampa di N volte.
Ottimizzatore,

@Optimizer Oh, l'ho completamente ignorato. Riparazione in un secondo.
Martin Ender,

0

NetLogo, 396

Ho anche usato la lista di parole di Falko, con due eccezioni (che non cambiano la durata del programma).

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

A seconda di come si definisce "programma", è possibile rimuovere i primi cinque e gli ultimi tre caratteri, quindi un punteggio di 388.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.