Il tuo obiettivo : scrivere un pezzo di codice che risulti nel classico risultato di "Ciao, mondo!" in fase di stampa su STDOUT o equivalente.
Regole : il codice deve essere interamente in stampa ASCII. Tutto il codice deve essere funzionale: la rimozione di ogni singolo carattere di conteggio deve modificare il risultato o impedire il funzionamento del codice. Tutte le variabili devono essere utilizzate dopo l'assegnazione. I letterali di caratteri e stringhe devono essere necessari all'output, ovvero la sostituzione di qualsiasi letterale di carattere o di qualsiasi carattere all'interno di un letterale di stringa con un altro carattere deve essere in grado di modificare il risultato (e non tramite l'effetto della sequenza di escape - sostituire il carattere con la barra rovesciata) o equivalente)
(NOTA: la regola finale è stata modificata in)
Punteggio : è qui che diventa interessante. Il punteggio più alto vince secondo il numero di caratteri, secondo le regole tipiche di bowling. Ma l'uso ripetuto dei personaggi comporterà detrazioni puntuali. In particolare ...
- L'uso ripetuto di qualsiasi carattere alfanumerico (az, AZ, 0-9) comporterà una detrazione di 3 punti per ripetizione (il primo utilizzo non comporta una detrazione).
- L'uso ripetuto della punteggiatura di base ([!? .-, ": ';]) - comprese le parentesi - comporterà una detrazione di 2 punti per ripetizione.
- L'uso ripetuto di altri caratteri ASCII {`~ @ # $% ^ & * _ + = | \ /> <} - comprese le parentesi graffe - comporterà una detrazione di 4 punti per ripetizione.
- L'uso ripetuto di spazi, tabulazioni e newline comporterà una detrazione di 1 punto per ripetizione. Cioè, solo il primo utilizzo di uno spazio, una scheda o una nuova riga verrà conteggiato ai fini del totale.
Nota: i commenti non contano ai fini del totale, sebbene lo facciano i caratteri che segnano l'inizio / la fine di un commento. Ad esempio, in C / C ++, se hai /* This is a comment */
, conterà due barre e due asterischi, ma nulla tra loro.
Alcuni esempi (nota: usare Julia come linguaggio di esempio) ...
print("Hello, world!");
Caratteri visibili totali: 22
Contiene spazio: +1
Alfanumerici ripetuti: -12 per llor Punteggiatura
ripetuta: -2 per "
Punteggio finale: 22 + 1-12-2 = 9
print("Hel",char(108),"o, wor",0x108,"d!"); # 0x108 makes a Uint8 that prints as ASCII
Caratteri totali: 43 (non conta alcun carattere dopo #, che è il carattere del commento)
Contiene spazio: +1
Alfanumerici ripetuti: -18 per rr1008 Punteggiatura
ripetuta: -24 per () "" "" ",,,,,
Finale punteggio: 43 + 1-24-18 = 2
xy=STDOUT
m="Hello, world!"
print(xy,m);
Caratteri visibili totali: 37
Contiene Newline: +1
Contiene Spazio: +1
Alfanumerici ripetuti: -18 per xilora Punteggiatura
ripetuta: -4 per ",
Altri ASCII ripetuti: -4 per =
Punteggio finale: 37 + 1 + 1-18-4 -4 = 13
Un paio di pezzi di codice non validi ...
x=2;print("Hello,world!")
Problema: x
è assegnato, ma non utilizzato.
print("Hello,"*" world!")
Problema: *
non è necessario, il risultato sarà lo stesso senza di essa.
k=1
if k>0
print("Hello, world!")
else
print("abcghjmquvxyzABCDEFGIJKLMNOPQRSTUVWXYZ_+*-&|")
end
Problema: il secondo print
comando non verrà eseguito. Inoltre, la rimozione dei caratteri tra virgolette nel secondo print
comando non cambierà l'output.
x="Hello, world!";
print(x)
Problema: la rimozione di newline non cambierà il risultato o causerà errori (in Julia, il punto e virgola è necessario solo se più comandi sono sulla stessa riga, altrimenti elimina solo il valore restituito).
print("Hellos\b, world!")
Problema: il s
carattere non influisce sul risultato, poiché viene cancellato da \b
. Questo è accettabile se eseguito tramite code ( "Hello",char(100),"\b, world!"
), ma non può essere eseguito tramite valori letterali di stringa o caratteri letterali di caratteri.
Pratico calcolatore del punteggio - http://jsfiddle.net/4t7qG/2/ - grazie a Doorknob