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


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.