Quería engañar a un amigo dándole una quine que casi funcionó, pero se volvió más y más descuidada.
Cree un programa que, cuando se ejecute, genere el programa, pero con un carácter apagado. Se puede agregar, eliminar o ambos caracteres (un carácter cambia). Pero solo un personaje.
Tu puntuación será (length of your program) / floor(sqrt(number of times the program almost quines))
(¿Dónde / 0
está el infinito?)
number of times the program almost quines
es la cantidad de veces que su programa se ejecuta mientras solo cambia un carácter en stdout. Su programa puede no aceptar entradas. Es posible que tampoco imprima un programa que ya ha impreso.
También es posible que no se añada un personaje que ha añadido previamente antes, o eliminar un personaje del mismo índice. Por ejemplo, si ha agregado 1
antes y agrega 1
nuevamente, ahí es donde se number of times the program almost quines
detiene. Si elimina el primer carácter, no podrá eliminar el primer carácter nuevamente. Si cambiaste el tercer carácter a un 2
, no puedes agregar 2
ni eliminar el tercer carácter.
Respuestas:
CJam, 0.000884
Aquí, denota el carácter no imprimible con el punto de código 128. Pruébelo en línea.
Idea
Este enfoque agrega todos los caracteres UCS (especificación original) con puntos de código entre U + 4000000 y U + 7FFFFFFF a la cadena inicialmente vacía que sigue al bloque de código.
Elegimos UTF-8 , que codifica cada uno de estos caracteres usando una cadena de 6 bytes de la siguiente manera:
Por lo tanto, podemos codificar el enésimo carácter en este rango calculando sus 6 dígitos menos significativos en la base 64 y agregando 252 a los más significativos y 128 a los restantes.
Puntuación
Hay caracteres de
2 ** 31 = 2,147,483,648
6 bytes UTF-8 y la longitud del código original es 39, por lo que la puntuación es39 / floor(2 ** 15.5) = 39 / 46340 = 0.0008416055243849806
.Cómo funciona
fuente
CJam, 46 bytes, 65504 add, 65505 del, Score 0.127424
Pruébalo aquí.
La forma básica es una quine CJam generalizada estándar. Para "casi quine", hay un comentario
e#
al final del bloque de quine, donde puedo agregar caracteres libremente sin afectar el código. Tenga en cuenta que el comentario inicialmente contiene un solo espacio.El programa continúa agregando caracteres al frente del comentario, comenzando en
!
y luego en orden de valor ASCII. Los códigos de caracteres de CJam se envuelven después de 2 16, por lo que en algún momento, esto agregará un byte nulo. Una vez que eso sucede, el programa comienza a eliminar bytes del final del comentario (de modo que la posición del carácter eliminado siempre es diferente) hasta que el comentario esté vacío.fuente
CJam, 19 bytes, 65536 add, 0 del, Score 0.074219
Más simple es mejor.
fuente