Dibuja los glifos de entrada

16

En el modo de vida de juego móvil AR basado en la ubicación, Ingress, el jugador puede hackear cosas llamadas portales para obtener elementos. (Si estás interesado en Ingress, puedes enviarme un ping en el chat para obtener más información. Confía en mí, es mejor que Pokémon. Si terminas descargándolo, recuerda elegir la Resistencia).

Una forma de aumentar significativamente la producción de pirateo es el minijuego de pirateo de glifos , en el que el jugador tiene que dibujar glifos en una cuadrícula hexagonal.

la cuadrícula de glifos

En total, hay alrededor de 115 glifos con aproximadamente 130 nombres que realmente se usan en el juego.

Glifos

Para los propósitos de este desafío, numeraremos cada punto de la cuadrícula de la siguiente manera:

la cuadrícula de glifos, numerada

Aquí está la lista de todos los glifos para los propósitos de este desafío. La lista es un objeto JSON, que contiene cada glifo como una lista de aristas.

{
"ABANDON": [[1, 6], [3, 4], [4, 8], [6, 10], [8, 10]],
"ACCEPT": [[3, 7], [3, 8], [7, 8]],
"ADVANCE": [[0, 9], [4, 9]],
"AFTER": [[1, 2], [1, 6], [2, 7], [6, 10], [7, 10]],
"AGAIN": [[4, 9], [6, 7], [6, 10], [8, 9], [8, 10]],
"ALL": [[0, 1], [0, 5], [1, 2], [2, 3], [3, 4], [4, 5]],
"ANSWER": [[6, 7], [6, 9], [7, 10]],
"ATTACK": [[0, 6], [0, 9], [2, 6], [4, 9]],
"AVOID": [[0, 5], [0, 6], [1, 6], [1, 7]],
"BALANCE": [[0, 10], [2, 3], [2, 7], [3, 4], [4, 8], [7, 10], [8, 10]],
"BARRIER": [[0, 10], [2, 7], [7, 10]],
"BEFORE": [[4, 5], [4, 8], [5, 9], [8, 10], [9, 10]],
"BEGIN": [[0, 8], [3, 7], [3, 8]],
"BODY": [[6, 9], [6, 10], [9, 10]],
"BREATHE": [[1, 6], [5, 9], [6, 10], [9, 10]],
"CAPTURE": [[1, 7], [3, 4], [4, 8], [7, 10], [8, 10]],
"CHANGE": [[3, 7], [3, 10], [8, 10]],
"CHAOS": [[0, 1], [0, 5], [1, 6], [3, 8], [4, 5], [6, 10], [8, 10]],
"CIVILIZATION": [[1, 6], [5, 9], [6, 7], [7, 8], [8, 9]],
"CLEAR": [[0, 10], [3, 10]],
"CLEAR ALL": [[0, 1], [0, 5], [0, 10], [1, 2], [2, 3], [3, 4], [3, 10], [4, 5]],
"COMPLEX": [[6, 9], [8, 10], [9, 10]],
"CONFLICT": [[2, 6], [4, 9], [6, 7], [7, 8], [8, 9]],
"CONTEMPLATE": [[0, 1], [1, 2], [2, 3], [3, 8], [6, 10], [8, 9], [9, 10]],
"COURAGE": [[4, 9], [7, 8], [8, 9]],
"CREATE": [[1, 6], [4, 8], [6, 10], [8, 10]],
"DANGER": [[0, 9], [3, 10], [9, 10]],
"DATA": [[0, 6], [3, 8], [6, 10], [8, 10]],
"DEFEND": [[1, 7], [3, 7], [3, 8], [5, 8]],
"DESTINY": [[3, 8], [6, 7], [6, 10], [7, 8], [9, 10]],
"DESTROY": [[2, 7], [5, 9], [7, 10], [9, 10]],
"DETERIORATE": [[4, 8], [8, 10], [9, 10]],
"DIE": [[2, 7], [4, 8], [7, 10], [8, 10]],
"DIFFICULT": [[1, 6], [6, 7], [7, 10], [8, 10]],
"DISCOVER": [[1, 2], [2, 3], [3, 4]],
"DISTANCE": [[0, 5], [4, 5]],
"EASY": [[3, 8], [6, 10], [8, 10]],
"END": [[0, 1], [0, 10], [1, 7], [3, 7], [3, 10]],
"ENLIGHTENED": [[0, 1], [0, 9], [1, 2], [2, 3], [6, 9], [6, 10], [9, 10]],
"ENLIGHTENMENT": [[0, 1], [0, 9], [1, 2], [2, 3], [6, 9], [6, 10], [9, 10]],
"EQUAL": [[6, 7], [6, 9], [8, 9]],
"ESCAPE": [[0, 1], [1, 6], [6, 9], [8, 9]],
"EVOLUTION": [[0, 10], [8, 9], [9, 10]],
"FAILURE": [[0, 10], [6, 7], [6, 10]],
"FEAR": [[1, 7], [6, 7], [6, 9]],
"FOLLOW": [[0, 6], [1, 2], [1, 6]],
"FORGET": [[4, 8]],
"FUTURE": [[1, 6], [2, 7], [6, 7]],
"GAIN": [[5, 8]],
"GROW": [[4, 9], [8, 9]],
"HARM": [[0, 6], [0, 9], [2, 7], [6, 10], [7, 10], [9, 10]],
"HARMONY": [[0, 6], [0, 9], [3, 7], [3, 8], [6, 10], [7, 10], [8, 10], [9, 10]],
"HAVE": [[3, 8], [7, 10], [8, 10]],
"HELP": [[5, 9], [7, 8], [8, 10], [9, 10]],
"HIDE": [[1, 6], [1, 7], [6, 9], [7, 8]],
"HUMAN": [[3, 7], [3, 8], [6, 7], [6, 9], [8, 9]],
"IDEA": [[1, 2], [1, 6], [2, 7], [4, 5], [4, 8], [5, 9], [7, 10], [9, 10]],
"IGNORE": [[2, 7]],
"IMPERFECT": [[6, 8], [6, 10], [8, 9], [8, 10], [9, 10]],
"IMPROVE": [[1, 6], [6, 10], [7, 10]],
"IMPURE": [[3, 10], [8, 9], [8, 10], [9, 10]],
"INSIDE": [[6, 7], [6, 9]],
"INTELLIGENCE": [[1, 6], [4, 8], [6, 10], [8, 9], [9, 10]],
"INTERRUPT": [[0, 10], [3, 10], [4, 5], [4, 8], [5, 9], [8, 10], [9, 10]],
"JOURNEY": [[1, 6], [2, 3], [3, 4], [4, 5], [5, 9], [6, 10], [9, 10]],
"KNOWLEDGE": [[3, 6], [3, 9], [6, 10], [9, 10]],
"LEAD": [[0, 5], [3, 8], [4, 5], [4, 8]],
"LEGACY": [[0, 1], [0, 5], [1, 6], [2, 7], [4, 8], [5, 9], [6, 7], [8, 9]],
"LESS": [[6, 10], [9, 10]],
"LIBERATE": [[0, 1], [1, 6], [4, 9], [6, 10], [9, 10]],
"LIE": [[6, 7], [6, 10], [7, 10], [8, 9], [9, 10]],
"LOSE": [[1, 7]],
"MESSAGE": [[1, 7], [4, 9], [7, 10], [9, 10]],
"MIND": [[3, 8], [3, 10], [8, 9], [9, 10]],
"MORE": [[7, 10], [8, 10]],
"MYSTERY": [[0, 6], [0, 9], [5, 9], [6, 9], [8, 9]],
"N'ZEER": [[0, 6], [0, 9], [0, 10], [3, 10], [6, 10], [9, 10]],
"NATURE": [[2, 7], [4, 8], [6, 7], [6, 9], [8, 9]],
"NEW": [[2, 7], [6, 7]],
"NO": [[6, 7], [6, 9]],
"NOT": [[6, 7], [6, 9]],
"NOURISH": [[3, 4], [3, 10], [4, 8], [8, 10]],
"NOW": [[6, 7], [7, 8], [8, 9]],
"OLD": [[5, 9], [8, 9]],
"OPEN": [[3, 7], [3, 8], [7, 8]],
"OPEN ALL": [[0, 1], [0, 5], [1, 2], [2, 3], [3, 4], [3, 7], [3, 8], [4, 5], [7, 8]],
"OUTSIDE": [[0, 5], [4, 5]],
"PAST": [[4, 8], [5, 9], [8, 9]],
"PATH": [[0, 10], [4, 8], [8, 10]],
"PEACE": [[0, 6], [0, 9], [3, 7], [3, 8], [6, 10], [7, 10], [8, 10], [9, 10]],
"PERFECTION": [[0, 10], [2, 3], [2, 7], [3, 4], [4, 8], [7, 10], [8, 10]],
"PERSPECTIVE": [[0, 6], [0, 9], [2, 7], [4, 8], [6, 10], [7, 10], [8, 10], [9, 10]],
"PORTAL": [[1, 2], [1, 6], [2, 7], [4, 5], [4, 8], [5, 9], [6, 9], [7, 8]],
"POTENTIAL": [[0, 10], [1, 2], [2, 7], [7, 10]],
"PRESENT": [[6, 7], [7, 8], [8, 9]],
"PURE": [[0, 10], [6, 7], [6, 10], [7, 10]],
"PURSUE": [[0, 6], [0, 9], [5, 9]],
"QUESTION": [[0, 6], [6, 9], [8, 9]],
"REACT": [[2, 7], [6, 9], [7, 10], [9, 10]],
"REBEL": [[1, 2], [1, 6], [5, 8], [6, 10], [8, 10]],
"RECHARGE": [[0, 5], [0, 10], [5, 9], [9, 10]],
"REPAIR": [[0, 5], [0, 10], [5, 9], [9, 10]],
"REPEAT": [[4, 9], [6, 7], [6, 10], [8, 9], [8, 10]],
"RESISTANCE": [[0, 9], [0, 10], [3, 8], [3, 10], [6, 9]],
"RESTRAINT": [[2, 3], [2, 7], [5, 9], [7, 10], [9, 10]],
"RETREAT": [[0, 6], [2, 6]],
"SAFETY": [[2, 6], [4, 9], [6, 9]],
"SAVE": [[1, 7], [7, 10], [8, 10]],
"SEARCH": [[6, 9], [6, 10], [7, 8], [8, 9]],
"SEE": [[0, 9]],
"SEPARATE": [[2, 7], [5, 9], [6, 7], [6, 10], [8, 9], [8, 10]],
"SHAPER": [[0, 6], [0, 9], [2, 7], [4, 8], [6, 7], [8, 9]],
"SIMPLE": [[7, 8]],
"SOUL": [[3, 7], [3, 10], [6, 7], [6, 10]],
"STABILITY": [[2, 7], [4, 8], [7, 8]],
"STAY": [[2, 7], [4, 8], [7, 8]],
"STRONG": [[6, 7], [6, 9], [7, 8], [8, 9]],
"STRUGGLE": [[0, 9], [0, 10], [3, 8], [3, 10], [6, 9]],
"SUCCESS": [[0, 10], [8, 9], [9, 10]],
"TECHNOLOGY": [[1, 6], [2, 7], [6, 10], [7, 10], [8, 9], [8, 10], [9, 10]],
"THOUGHT": [[1, 2], [1, 6], [2, 7], [4, 5], [4, 8], [5, 9], [7, 10], [9, 10]],
"TOGETHER": [[4, 8], [6, 9], [6, 10], [8, 10], [9, 10]],
"TRUTH": [[6, 7], [6, 10], [7, 10], [8, 9], [8, 10], [9, 10]],
"UNBOUNDED": [[0, 1], [0, 5], [1, 7], [2, 3], [3, 4], [4, 5], [6, 9], [6, 10], [7, 8], [8, 9]],
"US": [[3, 6], [6, 9]],
"USE": [[1, 7], [7, 10]],
"WANT": [[3, 7], [3, 8], [4, 8]],
"WAR": [[0, 6], [0, 9], [2, 6], [4, 9]],
"WEAK": [[5, 9], [6, 7], [6, 9]],
"XM": [[6, 7], [6, 9], [7, 10], [8, 9], [8, 10]],
"YOU": [[0, 7], [0, 8], [7, 8]],
"YOUR": [[0, 7], [0, 8], [7, 8]]
}

Algunos glifos tienen múltiples nombres (p NO, NOT, INSIDE. Ej. ); debes apoyarlos a todos.

Descargo de responsabilidad: no pude encontrar una buena lista de todos los glifos, por lo que combiné varias fuentes y finalmente terminé dibujando todas en una aplicación JS pirateada para obtener la lista de ellas. Puede que me falten algunos y puede haber un par de alias que no se usan en el juego; Sin embargo, espero no haber dibujado mal algunos de los glifos.

Edite a la mañana siguiente cuando no sean las 4 am: ya me di cuenta de que VICTORY falta. Oh, bueno, queda para el mejor golfista entonces.

Desafío

Su tarea es crear un programa o función que tome el nombre de un glifo y lo muestre como una imagen.

La imagen debe contener los puntos de la cuadrícula y las líneas que conectan los puntos en cuestión.

Este es el , por lo que gana la respuesta más corta en bytes. Aplican reglas estándar.

I / O

Tomará como entrada, en el formato que elija, el nombre de un glifo exactamente como se encuentra en las teclas del objeto JSON anterior. Cualquier otra entrada es un comportamiento indefinido.

Producirá una imagen en cualquier formato común con el glifo representado en la cuadrícula.

Proporciones de cuadrícula

Estas proporciones deben tener una precisión de cinco píxeles (para permitir el redondeo, etc.)

  • Los puntos exteriores (0-5) deben formar un hexágono regular.
  • El punto central (10) debe estar en el centro del hexágono.
  • Los puntos intermedios (6-9) deben estar a medio camino entre el punto central y los puntos externos correspondientes.
  • La cuadrícula debe estar orientada como la original.
  • La altura del hexágono exterior debe ser de al menos 100 píxeles.

Otras reglas

  • El fondo debe ser transparente o estar lleno de un color sólido.
  • Las líneas y los puntos deben ser claramente distintos del fondo y entre sí; No pueden ser del mismo color sólido.
    • Por ejemplo, las líneas azules continuas y los puntos rosados ​​sólidos están bien.
    • Las líneas negras sólidas y los puntos blancos con bordes negros están bien.
    • Líneas de rayas rojas y blancas y balones de fútbol como puntos está bien.
    • Las líneas verdes continuas y los puntos verdes sólidos no están bien.
  • El radio de los puntos debe ser mayor que el ancho de las líneas.
  • Usted puede dibujar las líneas por delante o por detrás de los puntos.
  • Usted puede incluir cualquier cantidad de relleno (en el color de fondo) en la imagen.
  • Usted puede combinar líneas consecutivas en una sola línea, ya que no afecta el resultado.

Ejemplos

Los colores y el ancho de los objetos en estas imágenes son solo ejemplos que se parecen un poco a la apariencia del juego.

ILIMITADO

glifo ilimitado

PAZ

glifo de paz

RESISTENCIA

glifo de resistencia

PurkkaKoodari
fuente
Tuve que votar por la nostalgia (y la sugerencia de resistencia: P). ¡Ojalá todavía tuviera tiempo para este juego! Algunos de los más divertidos (y ejercicio) que he tenido en mucho tiempo. ¿Y realmente creaste manualmente ese JSON?
Carcigenicate
@Carcigenate No. Escribí un código que me dio una cuadrícula y el nombre de un glifo y me hizo dibujarlo, y recolecté los glifos en una matriz como listas de nodos. Luego fueron solo diez líneas de python y algunas de buscar y reemplazar. Esa aplicación también es de donde provienen los ejemplos.
PurkkaKoodari
Si bien la compresión de la lista de gráficos juega un papel importante en el desafío, no creo que la hazaña de la etiqueta kolmogorov aquí tenga más de cien resultados diferentes
Sefa
@ Pietu1998 Oh, genial. Supongo que debería haber confiado en que un programador hubiera escrito un programa para ayudar con algo así.
Carcigenicate

Respuestas:

7

Mathematica, 228 + 184 + 365 + 13 = 790 bytes

Graphics@{v=255#+##&~Fold~BinaryReadList@#~IntegerDigits~#2&;p=#~Partition~2&;c=p["c"~v~25-12][[#+1]]&;Array[Disk@*c,11,0],Red,Line[c/@<|Thread["a"~v~2293->First/@p@SplitBy["b"~v~12,#>10&]]|>@Mod[1##&@@ToCharacterCode@#,2293]]}&

El comando anterior de 228 bytes define una función sin nombre que toma como entrada uno de los nombres de glifos anteriores y devuelve una imagen. Por ejemplo, aquí está la salida para "UNBOUNDED":

ILIMITADO

El comando lee tres archivos binarios "a", `` y '' "b", "c"que tienen 184, 365 y 13 bytes, respectivamente. Una versión más fácil de leer:

1  Graphics@{
2    v = 255#+##&~Fold~BinaryReadList@#~IntegerDigits~#2 &;
3    p = #~Partition~2 &;
4    c = p["c"~v~25-12][[#+1]] &;
5    Array[Disk@*c, 11, 0], Red, 
6    Line[c /@
7      <| Thread[ "a"~v~2293 -> First/@p@SplitBy["b"~v~12, #>10&] ] |>
8        @ Mod[1##& @@ ToCharacterCode@#, 2293]]
9  } &

La línea 2 define una función de descompresión hecha a mano: lee una secuencia de bytes del archivo #, la convierte en un entero base 256 y luego expande ese entero en su lista de dígitos en la base#2 . Las líneas 3 y 4 definen una función (usando el tercer archivo binario) que convierte un número entero de 0 a 10 en las coordenadas del punto de cuadrícula correspondiente; Todas estas coordenadas fueron elegidas para ser enteros entre –12 y 12, lo que hace que la compresión sea conveniente (aunque no tan conveniente como lo vi para mi presentación inicial).

La línea 5 dibuja los puntos de la cuadrícula (en color negro predeterminado), luego cambia al color rojo para las líneas. La línea 7 crea una asociación (utilizando los dos primeros archivos binarios) que convierte ciertos enteros de entrada entre 0 y 2292 en una lista de enteros de punto de cuadrícula como {2, 3, 4, 5, 0, 1, 7, 8, 9, 6, 10}, que representa un camino que une los puntos 2 a 3 a 4 a ... a 10 (Esta es una "ruta de Eulerian", una que visita cada borde exactamente una vez; todos los glifos en la tabla tienen una ruta de Eulerian, por lo que esta representación es más corta que listar el conjunto de bordes explícitamente.) El comando después de la ->línea 7 crea esta lista de rutas eulerianas, leyendo en un entero de base 12 usando vy luego dividiéndolo en cada aparición del dígito 11.

Finalmente, la línea 8 codifica la cadena de entrada convirtiendo todas sus letras a sus códigos ASCII y tomando su módulo de producto 2293 (el módulo más pequeño para el que las respuestas son todas distintas). Ese entero se alimenta a la asociación en la línea de arriba, lo que da como resultado la ruta de Eulerian apropiada, y la línea 6 dibuja la ruta resultante sobre los puntos de la cuadrícula.

Volcados hexadecimales de los archivos "a", "b" y "c", en ese orden:

09d5f27cd2246e0cb06aa243b442d761ac3a5604439f1767a202c4d3fc4fc1b24ce59acfc65a05235cc46354af8820d6733001e1f25ea01479cee027d62e8b1be10891c693ed5887942ca461c461d458a7676bfcd866a70263ad1833b3e836895ce121153c451ad327086e2bd30d6bad7097a9e71c2fc67c2c57716e5ada6907d99f42702dfb8b88c6d26799aa01f42fb89394e00b0752825f2740903276e20ec405473f309cc978aea187da24749d0a44319cd7322dd542

02d9ebf5fc94183ce50f0fc84e88a27bd21a3b3665d54949608c75c86c4507eed3072e02657822bfb83dbca8a708e07d1382c2b6c3c8fcddc88fa7244281a918b3a8aa823048d4a7e070a336c1e5ab83ec4950fc1960f34c6b89c541c9401607882418cac7f79f4edb164b775ecbb97947470016cadea4d06f93a958713b8c23d11be3c9ce8a2824a458d151ac3cafc6d7bb1557e55868434bd5c0da4bd71e66a3f7711018ae5e7f2941a949a85b6e65aebcc2fe43a89cb0479fa9474fe5102cfbf7da8a455f46ac5409dfdc79970ed8dbfc6b84df78c9c19df4d16bda298dca445ad510bf32e14ca5c91ce58e7521492f6e79e05624ab4a4c02c66c22ef670a06d5c5a3dfdf8ccc8c40c353f3aecf17bbb5cb911baefa3ce80e41551376838c166153a1038d83e171077a3f260ccd70358917eeceb5722b58ad6900a40b5b1512b292fb7a7e0d2cbe2bac2a48a4e343e8f2a338808ec9957c64778aba412bec47bcabb2a2789f01c2d5fdd993

254c40dac61bb215386b7361a8
Greg Martin
fuente
¡Buena respuesta! Sin embargo, debe publicar los hexdumps de sus archivos de datos.
PurkkaKoodari
Hecho ... y mientras tanto me di cuenta de que también podría comprimir la lista de coordenadas de puntos de la cuadrícula, ya que todos los comandos relevantes ya están presentes.
Greg Martin