Dans le AR jeu mobile géolocalisé mode de vie Ingress le joueur peut pirater des choses appelées portails afin d'obtenir des éléments. (Si vous êtes intéressé par Ingress, vous pouvez me cingler dans le chat pour plus d'informations. Faites-moi confiance, c'est mieux que Pokémon. Si vous finissez par le télécharger, n'oubliez pas de choisir la Résistance.)
Le mini-jeu de piratage de glyphes permet au joueur de dessiner des glyphes sur une grille hexagonale.
Au total, il y a environ 115 glyphes avec environ 130 noms qui sont réellement utilisés dans le jeu.
Glyphes
Aux fins de ce défi, nous numéroterons chaque point de la grille comme suit:
Voici la liste de tous les glyphes aux fins de ce défi. La liste est un objet JSON, contenant chaque glyphe comme une liste d'arêtes.
{
"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]]
}
Certains glyphes ont plusieurs noms (par exemple NO, NOT, INSIDE
); vous devez tous les soutenir.
Avis de non-responsabilité: je n'ai pas pu trouver une bonne liste de tous les glyphes, j'ai donc combiné plusieurs sources et j'ai finalement fini par les dessiner dans une application JS piratée pour en obtenir la liste. Il me manque peut-être certains et il peut y avoir quelques alias non utilisés dans le jeu; J'espère cependant que je n'ai pas mal dessiné certains des glyphes.
Modifier le lendemain matin quand il n'est pas 4h du matin: j'ai déjà remarqué que VICTORY manquait. Eh bien, c'est parti pour le meilleur golfeur alors.
Défi
Votre tâche consiste à créer un programme ou une fonction qui prend le nom d'un glyphe et génère le glyphe sous forme d'image.
L'image doit contenir les points de la grille et les lignes reliant les points en question.
Il s'agit de code-golf , donc la réponse la plus courte en octets l'emporte. Des règles standard s'appliquent.
E / S
Vous prendrez en entrée, dans un format de votre choix, un nom de glyphe exactement tel que trouvé dans les clés de l'objet JSON ci-dessus. Toute autre entrée est un comportement non défini.
Vous allez générer une image dans n'importe quel format commun avec le glyphe rendu à la grille.
Proportions de la grille
Ces proportions doivent être précises à cinq pixels (pour permettre l'arrondissement, etc.)
- Les points extérieurs (0-5) doivent former un hexagone régulier.
- Le point central (10) doit être au centre de l'hexagone.
- Les points intermédiaires (6-9) doivent être à mi-chemin entre le point central et les points extérieurs correspondants.
- La grille doit être orientée comme l'original.
- La hauteur de l'hexagone extérieur doit être d'au moins 100 pixels.
Autres règles
- L'arrière-plan doit être transparent ou rempli d'une couleur unie.
- Les lignes et les points doivent être clairement distincts de l'arrière-plan et les uns des autres; ils ne peuvent pas être de la même couleur unie.
- Par exemple, les lignes bleues solides et les points roses solides conviennent.
- Les lignes noires pleines et les points blancs avec des bordures noires conviennent.
- Les lignes rayées rouges et blanches et les ballons de football en tant que points sont très bien.
- Les lignes vertes pleines et les points verts solides ne conviennent pas .
- Le rayon des points doit être supérieur à la largeur des lignes.
- Vous pouvez tracer les lignes devant ou derrière les points.
- Vous pouvez inclure n'importe quelle quantité de rembourrage (dans la couleur d'arrière-plan) dans l'image.
- Vous pouvez combiner des lignes consécutives en une seule ligne, car cela n'affecte pas le résultat.
Exemples
Les couleurs et les largeurs des objets dans ces images ne sont que des exemples qui ressemblent un peu à l'apparence du jeu.
SANS BORNES
PAIX
LA RÉSISTANCE
la source
Réponses:
Mathematica, 228 + 184 + 365 + 13 = 790 octets
La commande de 228 octets ci-dessus définit une fonction sans nom qui prend en entrée l'un des noms de glyphes ci-dessus et renvoie une image. Par exemple, voici la sortie pour
"UNBOUNDED"
:La commande lit trois fichiers binaires
"a"
-"b"
, et"c"
- qui ont respectivement 184, 365 et 13 octets. Une version plus facile à lire:La ligne 2 définit une fonction de décompression à la main: elle lit un flux d'octets dans le fichier
#
, le convertit en un entier de base 256, puis développe cet entier dans sa liste de chiffres en base#2
. Les lignes 3 et 4 définissent une fonction (à l'aide du troisième fichier binaire) qui convertit un entier de 0 à 10 en coordonnées du point de grille correspondant; toutes ces coordonnées ont été choisies pour être des entiers compris entre –12 et 12, ce qui rend la compression pratique (mais pas si pratique que je l'ai vue pour ma soumission initiale).La ligne 5 dessine les points de la grille (en noir par défaut), puis passe à la couleur rouge pour les lignes. La ligne 7 crée une association (en utilisant les deux premiers fichiers binaires) qui convertit certains entiers d'entrée entre 0 et 2292 en une liste d'entiers de points de grille tels que
{2, 3, 4, 5, 0, 1, 7, 8, 9, 6, 10}
, qui représente un chemin reliant les points 2 à 3 à 4 à ... à 10 . (Il s'agit d'un "chemin eulérien", celui qui visite chaque arête exactement une fois; tous les glyphes du tableau ont un chemin eulérien, donc cette représentation est plus courte que la liste explicite de l'ensemble des arêtes.) La commande après la->
ligne 7 crée cette liste de chemins eulériens, en lisant un entier de base 12 en utilisantv
puis en le divisant à chaque occurrence du chiffre 11.Enfin, la ligne 8 hache la chaîne d'entrée en convertissant toutes ses lettres en leurs codes ASCII et en prenant leur produit modulo 2293 (le plus petit module pour lequel les réponses sont toutes distinctes). Cet entier est introduit dans l'association sur la ligne ci-dessus, ce qui donne le chemin eulérien approprié, et la ligne 6 trace le chemin résultant sur les points de la grille.
Vidages hexadécimaux des fichiers "a", "b" et "c", dans cet ordre:
la source