Su objetivo : escribir un fragmento de código que dará como resultado el clásico resultado de "¡Hola, mundo!" ser impreso a STDOUT o equivalente.
Reglas : El código debe estar enteramente en la impresión ASCII. Todo el código debe ser funcional: la eliminación de cualquier carácter de conteo único debe cambiar el resultado o hacer que el código no funcione. Todas las variables deben usarse después de la asignación. Los literales de caracteres y cadenas deben ser necesarios para la salida, es decir, el reemplazo de cualquier literal de caracteres o cualquier carácter dentro de un literal de cadena por otro carácter debe ser capaz de cambiar el resultado (y no a través del efecto de la secuencia de escape), reemplazando el carácter con barra invertida o equivalente)
(NOTA: la regla final se editó en)
Puntuación : Aquí es donde se pone interesante. La puntuación más alta gana según lo determinado por el número de caracteres, según las reglas típicas de boliche de código. Pero el uso repetido de caracteres dará como resultado deducciones de puntos. Específicamente...
- El uso repetido de cualquier carácter alfanumérico (az, AZ, 0-9) dará como resultado una deducción de 3 puntos por repetición (el primer uso no resulta en una deducción).
- El uso repetido de puntuación básica ([!? .-, ": ';]) - incluyendo los corchetes - dará como resultado una deducción de 2 puntos por repetición.
- El uso repetido de otros caracteres ASCII {`~ @ # $% ^ & * _ + = | \ /> <}, incluidos los corchetes, dará como resultado una deducción de 4 puntos por repetición.
- El uso repetido de espacios, tabulaciones y líneas nuevas dará como resultado una deducción de 1 punto por repetición. Es decir, solo el primer uso de un espacio, tabulación o nueva línea contará para su total.
Nota: los comentarios no cuentan para el total, aunque los caracteres que marcan el inicio / final de un comentario sí lo hacen. Por ejemplo, en C / C ++, si tiene /* This is a comment */
, contará dos barras y dos asteriscos, pero nada entre ellos.
Algunos ejemplos (nota: uso de Julia como lenguaje de muestra) ...
print("Hello, world!");
Total de caracteres visibles: 22
Contiene espacio: +1
Alfanuméricos
repetidos : -12 para llor Puntuación repetida: -2 para "
Puntuación final: 22 + 1-12-2 = 9
print("Hel",char(108),"o, wor",0x108,"d!"); # 0x108 makes a Uint8 that prints as ASCII
Caracteres totales: 43 (no cuenta ningún carácter después de #, que es el carácter del comentario)
Contiene espacio: +1
Alfanuméricos
repetidos : -18 para rr1008 Puntuación repetida: -24 para () "" "" ",,,,,
Final puntuación: 43 + 1-24-18 = 2
xy=STDOUT
m="Hello, world!"
print(xy,m);
Total de caracteres visibles: 37
Contiene nueva línea: +1
Contiene espacio: +1
Alfanuméricos
repetidos : -18 para xilor Puntuación repetida: -4 para ",
Otros ASCII repetidos: -4 para =
Puntuación final: 37 + 1 + 1-18-4 -4 = 13
Un par de piezas de código inválidas ...
x=2;print("Hello,world!")
Problema: x
se asigna, pero no se usa.
print("Hello,"*" world!")
Problema: *
es innecesario, el resultado será el mismo sin él.
k=1
if k>0
print("Hello, world!")
else
print("abcghjmquvxyzABCDEFGIJKLMNOPQRSTUVWXYZ_+*-&|")
end
Problema: el segundo print
comando no se ejecutará. Además, eliminar caracteres entre comillas en el segundo print
comando no cambiará la salida.
x="Hello, world!";
print(x)
Problema: la eliminación de la nueva línea no cambiará el resultado ni causará un error (en Julia, el punto y coma solo es necesario si hay varios comandos en la misma línea; de lo contrario, solo suprime el valor de retorno).
print("Hellos\b, world!")
Problema: el s
carácter no afecta el resultado, ya que se borra \b
. Esto es aceptable si se hace a través de code ( "Hello",char(100),"\b, world!"
), pero no se puede hacer a través de literales de cadena o literales de caracteres.
Práctica calculadora de puntaje - http://jsfiddle.net/4t7qG/2/ - gracias a Doorknob