Намалюйте гліфи Інгресу


16

В основі визначення місця розташування AR мобільних ігор спосіб життя Ingress гравець може зламати речі , звані порталами, щоб отримати деталі. (Якщо ви зацікавлені в Ingress, ви можете пінгнути мені в чаті для отримання додаткової інформації. Повірте мені, це краще, ніж Покемон. Якщо ви закінчите завантажувати його, не забудьте вибрати Опір.)

Спосіб значно збільшити вихід хаків - це міні-гра злому гліфа , в якій гравцеві доводиться малювати гліфи на шестикутній сітці.

сітка гліфів

Всього існує близько 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 пікселів.

Інші правила

  • Фон повинен бути прозорим або наповненим суцільним кольором.
  • Лінії та точки повинні чітко відрізнятися від фону та одна від одної; вони не можуть бути одного суцільного кольору.
    • Наприклад, суцільні сині лінії та суцільні рожеві точки добре.
    • Суцільні чорні лінії та білі точки з чорними рамками добре.
    • Червоно-білі смугасті лінії та футболки як очки - це добре.
    • Суцільні зелені лінії та суцільні зелені точки - це не добре.
  • Радіус точок повинен бути більшим, ніж ширина ліній.
  • Ви можете намалювати лінії перед точками або за ними.
  • Ви можете включити в зображення будь-яку кількість прокладки (у кольорі фону).
  • Ви можете поєднувати послідовні рядки в один рядок, оскільки це не впливає на результат.

Приклади

Кольори та ширина предмета на цих зображеннях - лише приклади, які дещо нагадують зовнішній вигляд гри.

НЕ БЕЗПЕЧЕНО

незв'язаний гліф

МИР

мирний гліф

ПІДТРИМКА

гліф стійкості


Довелося виступати за ностальгію (і пропозицію Опору: P). Я б хотів, щоб у мене ще був час на цю гру! Одні з найвеселіших (і вправ) у мене були давно. А ви справді створили цей JSON вручну?
Carcigenicate

@Carcigenate No. Я написав фрагмент коду, який дав мені сітку та ім'я гліфа, і він змусив її намалювати, і зібрав гліфи у масив як списки вузлів. Тоді це було лише десять рядків пітона та деякі знахідки та заміни. Цей додаток також звідки беруться приклади.
PurkkaKoodari

при стисненні списку графіків велику роль відіграє ця задача, я не думаю, що тег подвигу Колмогорова тут є у вас більше сотні різних результатів
Sefa

@ Pietu1998 О, круто. Гадаю, я мав би довіряти, що програміст написав би програму, щоб допомогти у чомусь подібному.
Carcigenicate

Відповіді:


7

Mathematica, 228 + 184 + 365 + 13 = 790 байт

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]]}&

Наведена вище 228-байтна команда визначає неназвану функцію, яка приймає в якості введення одне із назв гліфів вище та повертає зображення. Наприклад, ось вихід для "UNBOUNDED":

НЕ БЕЗПЕЧЕНО

Команда читає три двійкові файли— "a","b" , і "c"- у яких відповідно 184, 365 та 13 байт. Простіша для читання версія:

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  } &

Рядок 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" у такому порядку:

09d5f27cd2246e0cb06aa243b442d761ac3a5604439f1767a202c4d3fc4fc1b24ce59acfc65a05235cc46354af8820d6733001e1f25ea01479cee027d62e8b1be10891c693ed5887942ca461c461d458a7676bfcd866a70263ad1833b3e836895ce121153c451ad327086e2bd30d6bad7097a9e71c2fc67c2c57716e5ada6907d99f42702dfb8b88c6d26799aa01f42fb89394e00b0752825f2740903276e20ec405473f309cc978aea187da24749d0a44319cd7322dd542

02d9ebf5fc94183ce50f0fc84e88a27bd21a3b3665d54949608c75c86c4507eed3072e02657822bfb83dbca8a708e07d1382c2b6c3c8fcddc88fa7244281a918b3a8aa823048d4a7e070a336c1e5ab83ec4950fc1960f34c6b89c541c9401607882418cac7f79f4edb164b775ecbb97947470016cadea4d06f93a958713b8c23d11be3c9ce8a2824a458d151ac3cafc6d7bb1557e55868434bd5c0da4bd71e66a3f7711018ae5e7f2941a949a85b6e65aebcc2fe43a89cb0479fa9474fe5102cfbf7da8a455f46ac5409dfdc79970ed8dbfc6b84df78c9c19df4d16bda298dca445ad510bf32e14ca5c91ce58e7521492f6e79e05624ab4a4c02c66c22ef670a06d5c5a3dfdf8ccc8c40c353f3aecf17bbb5cb911baefa3ce80e41551376838c166153a1038d83e171077a3f260ccd70358917eeceb5722b58ad6900a40b5b1512b292fb7a7e0d2cbe2bac2a48a4e343e8f2a338808ec9957c64778aba412bec47bcabb2a2789f01c2d5fdd993

254c40dac61bb215386b7361a8

Гарна відповідь! Однак ви повинні розміщувати шістнадцяткові файли своїх даних.
PurkkaKoodari

Готово ... і тим часом я зрозумів, що, можливо, я також просто скомпілюю список координат точок сітки, оскільки всі відповідні команди вже є.
Грег Мартін
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.