Ahora con BONUS para la colocación en tiempo de ejecución.
Escriba un programa para llenar un cuadro de texto con los identificadores utilizados en su programa mientras lo mantiene pequeño. Con todos los identificadores que ha utilizado (excluyendo los que creó) en su programa, llene un cuadro de 12x6 con tantos como pueda. Obtiene puntos adicionales para los identificadores que se cruzan (estilo de crucigrama), pero no se pueden unir de extremo a extremo.
Salida
Su programa debe imprimir (para stdout) un cuadro de 12x6 caracteres con sus identificadores empaquetados y un #
borde. El cuadro debe tener columnas etiquetadas con la letra AL y las filas 1-6 (espaciadas como en el ejemplo a continuación). Luego imprima una línea para cada identificador utilizado. Cada línea tendrá la ubicación de la primera letra, el identificador en sí y la puntuación. El puntaje es igual al número de letras en el identificador con un posible '+ bono' agregado. El identificador obtiene una bonificación de 5 puntos por cada letra compartida con un identificador de cruce. La línea final informa 'TOTAL:' y la suma de las puntuaciones del identificador. Un resultado de ejemplo para un posible programa de Python se vería así:
ABCDEFGHIJKL
##############
1 # pinsert #
2 # o #
3 # print #
4 # not #
5 # #
6 #import #
##############
C1 pop 3+5
D1 insert 6
C3 print 5+10
E3 in 2+10
E4 not 3+5
A6 import 6
TOTAL: 55
Notas:
- Los identificadores se pueden desacoplar (como
import
arriba). - No puedes unirte
pop
y estar enprint
línea conpoprint
. - La cadena
in
dentroinsert
no se puede usar. Unir palabras debe ser ortogonal. - Los identificadores se pueden colocar uno al lado del otro (como
pop
yinsert
arriba).
Su respuesta debe incluir la salida de su programa con su código fuente y un título que consista en el nombre del idioma y su puntaje.
Puntuación
Su puntaje para el desafío será el puntaje del rompecabezas al cuadrado dividido por el tamaño de su código fuente (en bytes). Por ejemplo: el acertijo anterior con un programa de 300 bytes marcaría 55*55/300 = 10.08
. La puntuación más alta gana.
Reglas
- Puede usar cualquier identificador en su programa que no haya definido. Las palabras clave, los nombres de clase, los nombres de métodos, los nombres de bibliotecas y los nombres de funciones integradas son ejemplos de identificadores elegibles.
- EDITADO: Solo puede usar bibliotecas estándar que se incluyen con la versión mínima de idioma. Los paquetes de idiomas extendidos y el uso de bibliotecas externas (ahora) están prohibidos. La gran variedad de bibliotecas con extensas listas de identificadores desequilibraría este desafío. Si no está seguro de cómo funciona esto con su idioma, deje una pregunta en los comentarios.
- Los identificadores deben constar solo de caracteres [a-zA-Z_] y tener al menos 2 caracteres.
- Solo puede usar cada identificador una vez en el rompecabezas.
- Los identificadores solo se pueden usar de izquierda a derecha o hacia abajo.
Bono Dinámico!
Si su código determina dónde colocar los identificadores en el tiempo de ejecución, la bonificación de letras compartidas será de 20 en lugar de 5. Puede enumerar qué identificadores se utilizarán, pero su código debe decidir dónde colocarlos en el cuadro. Su código también debe calcular e imprimir la lista de puntajes. Si sus ubicaciones dependen del orden de la lista de identificadores, emparejamientos codificados u otros atajos de ubicación no dinámicos, no es elegible para el Bono Dinámico.
En la salida de ejemplo anterior, la puntuación del rompecabezas para un programa de colocación en tiempo de ejecución sería 145. Entonces, si el código fuera de 800 bytes, la puntuación sería 145*145/800 = 26.28
.
Dynamic Bonus está diseñado para recompensar algoritmos inteligentes en lugar de cadenas de solución estáticas codificadas, y compensar el mayor tamaño del código fuente resultante.
EDICIONES:
- Las bibliotecas modificadas se utilizan solo para aquellas en la versión mínima de idioma.
- Se agregó la opción de bonificación dinámica.
xyzw
/ rgba
/ stpq
:)