В основе определения местоположения AR мобильных игр образ жизни Ingress игрок может взломать вещи , называемые порталами, чтобы получить детали. (Если вы заинтересованы в Ingress, вы можете отправить мне сообщение в чате для получения дополнительной информации. Поверьте мне, это лучше, чем Pokémon. Если вы в конечном итоге скачаете его, не забудьте выбрать Resistance.)
Способом значительно повысить производительность хака является мини-игра для взлома глифов , в которой игрок должен рисовать глифы на гексагональной сетке.
Всего в игре насчитывается около 115 глифов с около 130 именами.
Глифы
Для целей этой задачи мы будем нумеровать каждую точку сетки следующим образом:
Вот список всех глифов для целей этой задачи. Список представляет собой объект JSON, содержащий каждый глиф в виде списка ребер.
{
"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]]
}
Некоторые глифы имеют несколько имен (например NO, NOT, INSIDE
); Вы должны поддержать их всех.
Отказ от ответственности: я не смог найти хороший список всех глифов, поэтому я объединил несколько источников и, в конце концов, нарисовал их все во взломанном JS-приложении, чтобы получить их список. Возможно, мне не хватает некоторых, и может быть пара псевдонимов, не используемых в игре; Я надеюсь, что я не использовал несколько глифов неправильно.
Отредактируйте на следующее утро, когда не 4 утра: я уже заметил, что ПОБЕДА отсутствует. О, хорошо, тогда это оставлено для лучшего игрока в гольф.
Вызов
Ваша задача - создать программу или функцию, которая берет имя глифа и выводит глиф как изображение.
Изображение должно содержать точки сетки и линии, соединяющие эти точки.
Это код-гольф , поэтому выигрывает самый короткий ответ в байтах. Стандартные правила применяются.
I / O
В качестве входных данных вы будете использовать имя глифа в том виде, в каком оно найдено в ключах вышеупомянутого объекта JSON. Любой другой ввод - неопределенное поведение.
Вы будете выводить изображение в любом общем формате с глифом, отображаемым в сетке.
Пропорции сетки
Эти пропорции должны быть с точностью до пяти пикселей (для округления и т. Д.)
- Внешние точки (0-5) должны образовывать правильный шестиугольник.
- Центральная точка (10) должна находиться в центре шестиугольника.
- Промежуточные точки (6-9) должны быть на полпути между центральной точкой и соответствующими внешними точками.
- Сетка должна быть ориентирована как оригинал.
- Высота внешнего шестиугольника должна быть не менее 100 пикселей.
Другие правила
- Фон должен быть либо прозрачным, либо залитым сплошным цветом.
- Линии и точки должны четко отличаться от фона и друг от друга; они не могут быть одинакового сплошного цвета.
- Например, сплошные синие линии и сплошные розовые точки - это хорошо.
- Сплошные черные линии и белые точки с черными границами - это хорошо.
- Красные и белые полосатые линии и футбольные мячи в качестве очков это хорошо.
- Сплошные зеленые линии и сплошные зеленые точки не в порядке.
- Радиус точек должен быть больше ширины линий.
- Вы можете рисовать линии перед или за точками.
- Вы можете включить любое количество отступов (в цвете фона) в изображение.
- Вы можете объединить последовательные строки в одну строку, так как это не влияет на результат.
Примеры
Цвета и ширина объектов на этих изображениях являются лишь примерами, которые несколько напоминают внешний вид игры.
неограниченный
PEACE
СОПРОТИВЛЕНИЕ
источник
Ответы:
Mathematica, 228 + 184 + 365 + 13 = 790 байт
Вышеупомянутая 228-байтовая команда определяет безымянную функцию, которая принимает в качестве входных данных одно из названий глифов выше и возвращает изображение. Например, вот вывод для
"UNBOUNDED"
:Команда читает три двоичных файла
"a"
-"b"
, и -,"c"
которые имеют 184, 365 и 13 байтов соответственно. Более удобная для чтения версия:В строке 2 определяется функция ручной распаковки: она читает поток байтов из файла
#
, преобразует его в целое число-256, а затем расширяет это число в своем списке цифр в базе#2
. Строки 3 и 4 определяют функцию (используя третий двоичный файл), которая преобразует целое число от 0 до 10 в координаты соответствующей точки сетки; все эти координаты были выбраны целыми числами от –12 до 12, что делает сжатие удобным (хотя и не таким удобным, как я видел его для первоначального представления).Линия 5 рисует точки сетки (по умолчанию черный цвет), затем переключается на красный цвет линий. Строка 7 создает ассоциацию (используя первые два двоичных файла), которая преобразует определенные входные целые числа от 0 до 2292 в список целых чисел точки сетки, например
{2, 3, 4, 5, 0, 1, 7, 8, 9, 6, 10}
, который представляет точку, соединяющую точки от 2 до 3 до 4 до ... до 10 (Это «эйлеров путь», который посещает каждое ребро ровно один раз; все глифы в таблице имеют эйлеров путь, поэтому это представление короче, чем явное перечисление набора ребер.) Команда после->
строки 7 создает этот список эйлеровых путей, считывая целое число от 12, используя,v
а затем разбивая его при каждом появлении цифры 11.Наконец, строка 8 хеширует входную строку путем преобразования всех ее букв в их коды ASCII и получения их произведения по модулю 2293 (наименьший модуль, для которого все ответы различны). Это целое число подается в ассоциацию в строке выше, что приводит к соответствующему эйлерову траектории, а линия 6 рисует результирующий путь по точкам сетки.
Шестнадцатеричные дампы файлов "a", "b" и "c" в следующем порядке:
источник