Scrivi un quine in inglese semplice


41

Scrivi un quine composto da parole inglesi reali separate da spazi singoli. Una "parola" è definita come una stringa contenente solo lettere minuscole e maiuscole ( /[a-zA-Z]+/in regex). Per essere "reale", la tua parola deve essere riconosciuta dal dizionario Scrabble ufficiale .

Sto usando il dizionario Scrabble poiché dà una risposta definitiva su ciò che è e non è valido. Ci sono troppe aree grigie con un dizionario normale. Nota che "A" e "I" (per non parlare di "quine") non sono parole scrabble valide.

Poiché scrivere un quine usando solo lettere e spazi è quasi impossibile nella maggior parte dei linguaggi di programmazione, hai la possibilità di sostituire i singoli spazi tra le parole con un carattere a tua scelta. Hai anche la possibilità di aggiungere caratteri all'inizio della prima parola e alla fine dell'ultima parola. Questi caratteri aggiunti possono essere qualsiasi cosa (comprese le nuove righe e non ASCII) tranne le lettere (az, AZ) . C'è una penalità per averli aggiunti però (vedi Punteggio).

Dettagli

  • Come al solito, i quines potrebbero non leggere o accedere al proprio codice sorgente. (Direi che il comando Q di HQ9 + viola questo.)
  • L'output dovrebbe andare su stdout o un'alternativa simile. Non ci sono input.
  • Le parole non devono essere maiuscole correttamente. Possono avere maiuscole e minuscole ovunque. La sequenza di parole non ha bisogno di avere alcun senso.
  • Nessuna parola può essere utilizzata più di 3 volte nel programma. Le parole con lettere maiuscole diverse sono sempre la stessa parola (ad es. 'DOG', 'cane' e 'dOg' sono tutte la stessa parola).
  • Utilizzando linguaggi come PHP o HTML che può semplicemente gatto fuori il loro contenuto è considerato una scappatoia banale e non è permesso.
  • Il programma deve contenere almeno una parola.

punteggio

Il tuo punteggio è il numero di "parole reali" nel tuo programma più queste penalità:

  • +1 per ogni spazio che è stato sostituito con un altro personaggio
  • n n per ogni n caratteri aggiunti prima della prima parola (sì, è n alla potenza n)
  • n n per ogni n caratteri aggiunti dopo l'ultima parola

Ad esempio, il programma

We all LIKE PROgraMmING

segnerebbe 4 perché contiene 4 parole; nessun personaggio è stato aggiunto o sostituito alcuno spazio. Il suo output sarebbe ovviamente We all LIKE PROgraMmING.

Il programma

!We@all LIKE#PROgraMmING- =

segnerebbe 4 + 2 + 1 + 27 = 34; 4 per le parole, 2 per gli spazi sostituiti, 1 per la !parte anteriore e 27 per - =la fine. Il suo output sarebbe ovviamente !We@all LIKE#PROgraMmING- =.

Vince il punteggio più basso. Tiebreaker va alla risposta con il minor numero di punti penalità. Se c'è ancora un pareggio vince la risposta più votata.


1
Quel dizionario esiste anche come elenco? Sarebbe molto più utile da consultare che dover controllare ogni parola singolarmente.
Martin Ender,

16
Shakespeare qualcuno?
dwana,


1
@JanDvorak Non la penso così ... Il fatto che non riesca a scrivere nulla del genere non dovrebbe far vedere agli altri questa come una brutta domanda, è una sfida valida, anche se piuttosto difficile, non è vero?
rorlork,

7
Sono ancora interessato a una soluzione di Shakespeare.
John Dvorak,

Risposte:


25

golfscript, 8 parole + 8 simboli = 20 16 (3?)

{four"words.written~twice"four}words.written~twice

Le parole sono solo un riempitivo, il nucleo è un minuscolo nucleo:

{".~"}.~

Duplica e valuta una funzione che aggiunge semplicemente le istruzioni per duplicare e valutare se stessa. Quando una funzione viene stampata, viene automaticamente stringa. Questo è il più piccolo quine che fa qualcosa .

Oppure potremmo semplicemente usare una funzione letterale che non viene mai valutata. Ma è come imbrogliare ...

{whatever}

Non hai bisogno di concatenazione. {a`b"x.y~z"c}x.y~z
Dennis,

@Dennis Non ho nemmeno bisogno dell'ispezione in quel caso. Grazie! Sento di dover chiedere qualcosa all'OP ...
John Dvorak, il

8
@Cephalopod Non leggo il mio codice sorgente. Sto solo spingendo una funzione nello stack e il runtime lo stampa per me, beato inconsapevolmente del fatto che l'intero codice sorgente è una funzione letterale.
John Dvorak,

1
Penso che {whatever}ciò violerebbe la regola troppo banale ("L'uso di linguaggi come PHP o HTML che possono semplicemente estinguere il loro contenuto è considerato una scappatoia banale e non è permesso.")
Claudiu,

1
@Claudiu è una regola contro le lingue, non le soluzioni. Ecco perché ho chiesto.
John Dvorak,

54

> <> , 25 parole + (22 + 1 1 + 1 1 ) extra = 57 49

Oh dio, il mio cervello.

'brr3deep*clap6beep+orb5flap*leap4deep+clap5beep5flap*leap9deep9clap*beep+flap0placed apple alp0leap=clip?lob8blip*flip0clip.

Poiché le regole indicano "Non è presente alcun input.", Affinché questo programma funzioni è necessario reindirizzare un file vuoto.

Oh e sì, brrè una parola Scrabble valida, come lo sono tsktske pfft.

Spiegazione

Prima di tutto, le seguenti parole sono vietate:

deep clap beep flap leap clip blip flip

Ciò è dovuto a due motivi:

  • abcdeflspingere i numeri (10, 11, 12, 13, 14, 15 e la lunghezza della pila rispettivamente). Inoltre, ispinge -1 se viene raggiunto EOF, visto che non c'è input.
  • Il pcomando apre tre caratteri v,y,xe posiziona vnella posizione x,y.

Sì,> <> ti consente di modificare il codice sorgente al volo! In realtà non ne facciamo uso, poiché abbiamo solo bisogno pdi scoppiare.

Se ci liberiamo di queste operazioni vietate, otteniamo:

'brr3*6+orb5*4+55*99*+0placed apple alp0=?lob8*0.

In modo simile, anche la laced appparte di placed applee la e alpparte di non apple alpsono operazioni, e il rrdi brrinverte semplicemente lo stack due volte, che possiamo anche rimuovere:

'b3*6+orb5*4+55*99*+0pl0=?lob8*0.

Finalmente qualcosa che sembra un normale programma> <>! L'idea è di utilizzare lo standard> <> quine, che funziona così:

  • L'iniziale 'inizia l'analisi delle stringhe, spingendo ogni carattere incontrato fino a quando non ne colpiamo un altro'
  • Continuiamo a spingere i caratteri fino alla fine della riga, a quel punto avvolgiamo il puntatore dell'istruzione di nuovo all'inizio (poiché> <> è toroidale)
  • Atterriamo di 'nuovo sull'iniziale e interrompiamo l'analisi delle stringhe. Il risultato è che abbiamo inserito tutti i singoli caratteri nel programma (tranne quelli iniziali ') nello stack.

Quindi succede quanto segue:

b3*6+o                Print the initial ' quote (ASCII 39)
r                     Reverse the stack
b5*4+                 Push a ';' (ASCII 59)
55*99*+0p             Replace the 'l' of 'lob' with ';'

(print loop)
l0=?;                 If the stack is empty, terminate. Otherwise...
o                     Print the top of the stack
b8*0.                 Jump back to the beginning of the loop

"Nessuna parola può essere usata più di 3 volte nel tuo programma. Le parole con lettere maiuscole diverse sono sempre la stessa parola (ad es. 'DOG', 'cane' e 'dOg' sono tutte la stessa parola)." Comunque mi dai un voto, signore.
rorlork,

@rcrmn Continuavo ad aggiungere così tante parole che mi ero completamente dimenticato di quella regola! Risolto ora, anche se volevo evitare di doverlo usare i.
Sp3000,

1
TIL "pa", "la" e "be" sono parole valide in Scrabble
John Dvorak,

20
Leggere ad alta voce il tuo programma mi fa immaginare come devono essere stati i computer con schede perforate.
Calvin's Hobbies,

10
Penso che tu abbia rubato quel programma dalla fonte del sistema operativo di R2D2.
cessò di girare in senso antiorario il

21

pollo , 1 parola

Normalmente non mi piacciono gli esolang, ma questo sembrava perfetto per questo. Penso che questo sia un vero quine:

chicken

Spinge 1 pollo in pila. Viene quindi visualizzato lo stack.


1
Questa (e la risposta di Julia) rasenta banalmente non valida. Puoi tenerli qui, ma nessuna promessa sull'accettazione.
Hobby di Calvin,

@ Calvin'sHobbies Nell'interesse dell'equità, lo cancellerò felicemente se ritieni che sia troppo scappatoia - La tua chiamata. Stavo lavorando a una soluzione di applecript, ma ero frustrato dalla regola "Nessuna parola può essere usata più di 3 volte" che sembra rendere questo particolarmente difficile. Quindi ho optato per il trucco economico :-)
Digital Trauma,

@ Calvin'sHobbies: sono l'autore della presentazione di Julia. Idem il sentimento di DigitalTrauma sulla rimozione del mio post se ritieni che sia troppo borderline. Ho anche fatto R. È troppo vicino?
Alex A.

@Alex e DT: Dipende da voi ragazzi. Probabilmente non accetterò nessuna delle due risposte ma non mi dispiace che siano qui. Sono ancora un po 'lacerato dalla risposta R, anche se l'idea è praticamente la stessa di quella di Julia ...
Hobby di Calvin,

12

R, 2 parole + 1 sostituzione + 1¹ finale = 4

Gli oggetti che non sono assegnati a nulla vengono semplicemente stampati su stdout. Poiché un'espressione è un oggetto, il codice seguente viene stampato automaticamente:

expression(puppy)

Presentazione precedente, 5 punti:

function(hello)hello

Sei stato ispirato dalla mia soluzione a 3 punti economica, vero? ;-)
John Dvorak,

1
@JanDvorak: In realtà non l'avevo visto prima di pubblicare questo, ma ora è una fonte retrospettiva di ispirazione.
Alex A.,

12

Python 2, 58 = 37 parole + 21 segni di punteggiatura

programming=puzzle=hash and'fear=coerce and"programming=puzzle=hash and%rif reload else fire;exec prog"or English;ramming=None or"ramming"if license else pirate;print fear%puzzle+ramming'if reload else fire;exec programming

Con alcune nuove righe aggiunte:

programming=puzzle=hash and'fear=coerce and"programming=puzzle=hash
and%rif reload else fire;exec prog"or English;ramming=None or
"ramming"if license else pirate;print fear%puzzle+ramming'
if reload else fire;exec programming

I tre usi per restrizione di parole hanno reso difficile la scrittura. Volevo usare la stringa con tutto il codice più di 3 volte, e ogni stringa doveva essere isolata con if else and oroperatori di cui avevo una fornitura limitata.


@ user23013 Spiacenti, ho dimenticato di sostituirlo con un identificatore casuale.
feersum

7

Julia, 1 parola + 1¹ precedente = 2

Julia ha oggetti chiamati simboli che sono definiti usando un precedente :. Proprio come la mia soluzione R, questa stampa solo quando inviata.

:puppy

5

Riga di comando DOS, 10

& was unexpected at this time.

Sembra un errore, non vietato


1
Questo codice non "codifica" nessuna parte del codice. Vedi la nostra definizione per un quine
MilkyWay90

@ MilkyWay90 L'utilizzo della definizione &codifica l'intero codice e interrompe l'emissione
l4m2

Oh, puoi modificare la risposta in modo che io possa rimuovere il mio voto negativo
MilkyWay90

1
Interessante risposta alla scappatoia ... è &una parola, però?
Programmi Redwolf

@RedwolfProgrammi no, ma & sono due simboli. 5 (parole) + 1 (finale) + 2 ^ 2 iniziale = 10.
Draco18s

3

Incantesimi runici , punteggio 4 + 3 + 1 1 +1 1 = 9

"hOt3OX4NOt+kNOt@

Provalo online!

Parole: hot ox not knot(4)
Sostituzioni: 3 4 +(3)
Prima: "(1)
Dopo: @(1)

Tutti i personaggi GNOQWghtxznon sono operativi in ​​Runico (così come lo spazio e il punto, ma più spazi non aiutano a segnare). Incluso Xe krichiesto per la funzionalità, questo fornisce il seguente elenco di parole disponibili:

5 Letter Word(s)
  thong
4 Letter Word(s)
  gong goth gowk gown hogg hong honk howk knot know nogg nowt tong town wonk wont zonk
3 Letter Word(s)
  got gox hog hon hot how nog noh not now nth own tho tog ton tow two who wok won wot
2 Letter Word(s)
  go ho no oh on ow ox to wo

Ho scelto Cherry in base alle esigenze dello spazio in cui si trovava e facendolo sembrare divertente.

La rimozione di tutti i caratteri NOP fornisce il seguente quine:

"3X4+k@

Provalo online!


0

eh? - 1 parola + 1 ** 1/1 ^ 1 = 1 carattere dopo la parola = 2 punteggio totale.

Ouch!

Ouch! è un quine valido in eh?

Eseguilo come pythuhn.py Ouch!, e non può esserci un file chiamato Ouch!nella directory corrente.

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.