99 es un lenguaje de programación que inventé a principios de esta semana para mi desafío. Escribe un intérprete para 99 . (Inventado pero nunca necesitado implementarlo gracias a media docena de ustedes.;)) La especificación completa del idioma está en ese desafío, así que no me molesto en volver a publicar todo aquí.
En 99 puede imprimir caracteres ASCII individuales en stdout, pero debido a las restricciones del lenguaje, no siempre está claro cómo imprimir un carácter particular de la forma más concisa posible.
Para cada uno de los 128 caracteres ASCII, escriba un programa 99 que no ingrese y emita ese único carácter. Puede codificar cualquiera o todas estas respuestas a mano, o puede escribir otro programa (en el idioma que desee) para generarlas por usted.
La suma de los caracteres en cada uno de sus 128 99 programas es su puntaje. El puntaje más bajo gana. Las nuevas líneas cuentan como un personaje.
Recuerde, en 99 , solo las variables de tamaño par, como 9999
los caracteres ASCII de salida (las variables de tamaño impar generan enteros). Su valor se divide entre 9 y luego se toma el mod 128, por lo que los valores no necesitan estar en un cierto rango para mapearse a caracteres ASCII. Por ejemplo, los valores internos 297, 1449 y -855 corresponden al carácter !
porque cuando se dividen entre 9 y se toman el mod 128, todos se convierten en 33, que es el código de caracteres para !
.
Si necesita un intérprete para 99 , sugeriría la respuesta Python de Mac .
Sé que dije que mi próximo desafío sería más interactivo, pero todavía estoy trabajando en las cosas para ese.
fuente
Una variedad de técnicas, 42109
Para los números, en lugar de calcular el carácter ASCII grande, acabo de calcular el valor del número. Solo dijiste que podía generar el personaje, por lo que esto debería funcionar.EDITAR: Cambió los números para usar los caracteres ASCII, así que no lo tenga en cuenta. Dejé el código del número original en el código de Java pero comenté en caso de que alguien quisiera usarlo.
Algunos de estos los hice a mano, la mayoría simplemente escribí un programa para escribir.
Estos se componen de 1-4 líneas cada uno, por lo que son bastante fáciles de copiar y pegar en un programa. Cabe señalar que no funcionan en sucesión debido a que mi código generado no conserva los estados variables.
La técnica más común utilizada aquí fue la misma que el enfoque de orlp:
Mi versión difiere usando algunos casos personalizados y componiendo muchas de las matemáticas en una sola línea. Los casos personalizados son solo donde el personaje se puede representar con solo un grupo de 9 y no se pueden acortar las matemáticas o el código de mi generación.
Programas
Puse el resultado en Pastebin para aquellos de ustedes que no tienen ganas de ejecutar el programa:
http://pastebin.com/Cs6WZUfb
Código Java que utilicé:
fuente
999
al final deben repararse.99 999\n99
(para reasignar999
para99
que se imprima como un personaje).Resta repetida, 65280
Una solución trivial para comparar. Sigue restando 9 de 99, luego salida. Ejemplo para el carácter ASCII 10:
Hay 128 programas. El primer programa tiene dos caracteres de largo (99), cada uno después de eso es 8 caracteres (99 99 9 \ n) más largo que el anterior.
Programa de Python que genera programas separados por líneas vacías y puntaje informático:
fuente