イングレスグリフを描く


16

では、ロケーションベースのARモバイルゲーム生き方進入プレイヤーがアイテムを取得するために、ポータルと呼ばれるものをハックすることができます。(Ingressに興味がある場合は、チャットでpingして詳細を確認できます。ポケモンよりもましです。ダウンロードしてしまう場合は、レジスタンスを選択してください。)

ハック出力を大幅に増やす方法の1つに、グリフハッキングミニゲームがあります。このゲームでは、プレーヤーは六角形のグリッドにグリフを描画する必要があります。

グリフグリッド

合計で、ゲームで実際に使用される約130の名前を持つ約115のグリフがあります。

グリフ

この課題のために、グリッドの各ポイントに次のように番号を付けます。

番号付きのグリフグリッド

このチャレンジの目的のためのすべてのグリフのリストは次のとおりです。リストは、各グリフをエッジのリストとして含む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時ではないときに編集します。VICTORYが欠落していることにすでに気付きました。まあ、それは最高のゴルファーのために残されています。

チャレンジ

あなたの仕事は、グリフの名前を取り込み、そのグリフを画像として出力するプログラムまたは関数を作成することです。

画像には、グリッドポイントと問題のポイントを結ぶ線が含まれている必要があります。

これはであるため、バイト単位の最短回答が優先されます。標準ルールが適用されます。

I / O

入力として、選択した形式で、上記のJSONオブジェクトのキーにあるグリフの名前をそのまま受け取ります。その他の入力は未定義の動作です。

グリフがグリッドにレンダリングされた状態で、一般的な形式で画像を出力します。

グリッドの割合

これらの比率は5ピクセルまで正確でなければなりません(丸めなどを可能にするため)

  • 外側のポイント(0〜5)は、正六角形を形成する必要があります。
  • 中心点(10)は六角形の中心になければなりません。
  • 中間点(6-9)は、中心点と対応する外側の点の中間になければなりません。
  • グリッドは元の方向に向いている必要があります。
  • 外側の六角形の高さは少なくとも100ピクセルでなければなりません。

その他の規則

  • 背景透明であるか、単色で塗りつぶされている必要あります。
  • 線と点、背景や互いに明確に区別する必要あります。同じ単色にすることはできません。
    • たとえば、青い実線とピンクの実線のポイントは問題ありません。
    • 黒い境界線のある黒い実線と白い点は問題ありません。
    • 赤と白のストライプラインとポイントとしてのサッカーは結構です。
    • 緑色の実線と緑色の点はうまくありません
  • ポイントの半径は、線の幅よりも大きくなければなりません
  • ポイントの前または後ろに線を引くことができます。
  • 画像には(背景色で)任意の量のパディングを含めることができます。
  • あなたはあり、それが結果に影響しないため、1行に連続した行を兼ね備えています。

これらの画像の色とオブジェクトの幅は、ゲームの外観に多少似ている単なる例です。

未結合

無制限のグリフ

平和

平和のグリフ

抵抗

抵抗グリフ


懐かしさ(そして抵抗の提案:P)に賛成しなければなりませんでした。このゲームにまだ時間があるといいのに!私が長い間持っていた最も楽しい(そして運動)のいくつか。そして、実際にそのJSONを手動で作成しましたか?
発癌性

@Carcigenateいいえ。グリッドとグリフの名前を指定するコードを作成して描画し、ノードのリストとして配列にグリフを収集しました。それから、たった10行のpythonといくつかの検索と置換でした。このアプリは、例の由来でもあります。
PurkkaKoodari

グラフのリストを圧縮することは挑戦で大きな役割を果たしながら、あなたは百の以上の異なる出力を持っているように、私はここでコルモゴロフタグ偉業を考えていない
斎場

@ Pietu1998ああ、クール。プログラマーがそのようなことを支援するプログラムを書いていると信じていたはずです。
発癌性

回答:


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バイトのコマンドは、上記のグリフ名の1つを入力として受け取り、画像を返す名前のない関数を定義します。たとえば、次の出力は"UNBOUNDED"次のとおりです。

未結合

このコマンド"a""b"、それぞれ"c"184、365、13バイトの3つのバイナリファイル(、、)を読み取ります。読みやすいバージョン:

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を基数の整数に変換してから、その整数をbaseの数字のリストに展開し#2ます。3行目と4行目は、0から10の整数を対応するグリッドポイントの座標に変換する関数(3番目のバイナリファイルを使用)を定義しています。これらの座標はすべて、-12〜12の整数になるように選択されています。これにより、圧縮が便利になります(ただし、最初の送信ではあまり便利ではありませんでした)。

5行目は、グリッドポイントを描画し(既定の色は黒)、その後、行の色を赤に切り替えます。行7は、(最初​​の2つのバイナリファイルを使用して)0から2292までの特定の入力整数を{2, 3, 4, 5, 0, 1, 7, 8, 9, 6, 10}、ポイント2から3から4から...から10を結ぶパスを表すなどのグリッドポイント整数のリストに変換する関連付けを作成します(これは、「オイラー路」、正確に一度訪問各エッジこと一つであり、この表現は、明示的にエッジの集合をリストよりも短くなるように、テーブル内のすべてのグリフは、オイラー経路を有する)の後、コマンド->にライン7を使用vして12を基数とする整数を読み取り、次に数字11が現れるたびに分割することにより、このオイラーパスのリストを作成します。

最後に、8行目は、すべての文字をASCIIコードに変換し、積を2293モジュロ(答えがすべて異なる最小のモジュラス)にすることにより、入力文字列をハッシュします。その整数は、上の行の関連付けに送られ、適切なオイラーパスが生成されます。ライン6は、グリッドポイント上に結果のパスを描画します。

ファイル「a」、「b」、および「c」の16進ダンプ、この順序で:

09d5f27cd2246e0cb06aa243b442d761ac3a5604439f1767a202c4d3fc4fc1b24ce59acfc65a05235cc46354af8820d6733001e1f25ea01479cee027d62e8b1be10891c693ed5887942ca461c461d458a7676bfcd866a70263ad1833b3e836895ce121153c451ad327086e2bd30d6bad7097a9e71c2fc67c2c57716e5ada6907d99f42702dfb8b88c6d26799aa01f42fb89394e00b0752825f2740903276e20ec405473f309cc978aea187da24749d0a44319cd7322dd542

02d9ebf5fc94183ce50f0fc84e88a27bd21a3b3665d54949608c75c86c4507eed3072e02657822bfb83dbca8a708e07d1382c2b6c3c8fcddc88fa7244281a918b3a8aa823048d4a7e070a336c1e5ab83ec4950fc1960f34c6b89c541c9401607882418cac7f79f4edb164b775ecbb97947470016cadea4d06f93a958713b8c23d11be3c9ce8a2824a458d151ac3cafc6d7bb1557e55868434bd5c0da4bd71e66a3f7711018ae5e7f2941a949a85b6e65aebcc2fe43a89cb0479fa9474fe5102cfbf7da8a455f46ac5409dfdc79970ed8dbfc6b84df78c9c19df4d16bda298dca445ad510bf32e14ca5c91ce58e7521492f6e79e05624ab4a4c02c66c22ef670a06d5c5a3dfdf8ccc8c40c353f3aecf17bbb5cb911baefa3ce80e41551376838c166153a1038d83e171077a3f260ccd70358917eeceb5722b58ad6900a40b5b1512b292fb7a7e0d2cbe2bac2a48a4e343e8f2a338808ec9957c64778aba412bec47bcabb2a2789f01c2d5fdd993

254c40dac61bb215386b7361a8

いい答え!ただし、データファイルの16進ダンプを投稿する必要があります。
PurkkaKoodari

完了...そしてその間、関連するすべてのコマンドが既に存在するため、グリッドポイント座標のリストも圧縮するだけでよいことに気付きました。
グレッグマーティン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.