Aggiornamenti: limite di tempo rimosso. Devi essere in grado di descrivere l'output: vedi la nuova regola.
Un pangram è una frase che utilizza ogni lettera dell'alfabeto almeno una volta, come ad esempio:
Un pangram perfetto usa ogni lettera esattamente una volta.
Prendi in considerazione la possibilità di scrivere un programma che sia un diagramma perfetto, usando i 95 caratteri ASCII stampabili (codici esadecimali da 20 a 7E) come alfabeto:
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
Tale programma deve contenere esattamente 95 caratteri, con ogni carattere ASCII stampabile che si presenta esattamente una volta, ma in qualsiasi ordine. (Quindi ci sono 95! = 1.03 × 10 148 possibilità.)
Il tuo compito è scrivere questo programma in modo tale che il numero di caratteri ASCII stampabili stampati su stdout sia il più alto possibile (cioè prolifico).
Il tuo punteggio è il numero di caratteri ASCII stampabili emessi dal tuo programma (la quantità totale , non la quantità distinta : AABC
punteggi 4 invece ABC
punteggi 3) . Vince il punteggio più alto.
Dettagli
- L'output può contenere qualsiasi carattere (inclusi i duplicati) ma solo le istanze dei 95 caratteri ASCII stampabili vengono conteggiate ai fini del punteggio.
- È possibile utilizzare questo JSFiddle per contare il numero di caratteri ASCII stampabili in qualsiasi stringa.
- Se la tua lingua non ha stdout usa l'alternativa più appropriata.
- Il tuo programma ...
- deve avere un tempo di esecuzione limitato (il limite di tempo è stato rimosso)
- deve avere un output finito
- può contenere commenti
- deve essere compilato ed eseguito senza errori (non rilevati)
- non deve richiedere o richiedere input
- deve essere invariante e deterministico nel tempo
- non deve utilizzare librerie esterne
- non deve richiedere una connessione di rete
- non deve utilizzare file esterni
- (è possibile utilizzare il file di programma stesso a condizione che la modifica del nome del file non modifichi il comportamento del programma)
- Se questo compito è impossibile, è un linguaggio troppo brutto.
- Devi fornire il tuo esatto output o descriverlo con precisione se è troppo grande per essere inserito in un post . In realtà non è necessario eseguire il programma. Fintanto che sarebbe eseguito in un tempo finito su un computer con una quantità illimitata di memoria è valido.
Esempio
Questo semplicistico programma Python 2 è una possibile soluzione:
print 9876543210#!"$%&'()*+,-./:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghjklmoqsuvwxyz{|}~
Emette 9876543210
che contiene 10 caratteri ASCII stampabili, ottenendo così un punteggio di 10.
a
sei quadrilioni di volte, dove non è nemmeno possibile ottenere un limite superiore accurato su conteggio dei caratteri. Ad ogni modo, sono ancora orgoglioso del mio 95, anche se è un po 'piccolo. Le dimensioni non sono tutto, lo sai.