Gambarlah mesin terbang Ingress


16

Dalam cara gim mobile game berbasis lokasi Ingress , pemain dapat meretas hal-hal yang disebut portal untuk mendapatkan item. (Jika Anda tertarik dengan Ingress, Anda dapat mem-ping saya dalam obrolan untuk info lebih lanjut. Percayalah, ini lebih baik daripada Pokémon. Jika Anda akhirnya mengunduhnya, ingatlah untuk memilih Resistance.)

Cara untuk meningkatkan hasil retasan secara signifikan adalah minigame peretasan mesin terbang , di mana pemain harus menggambar mesin terbang pada kisi heksagonal.

kotak mesin terbang

Secara total, ada sekitar 115 mesin terbang dengan sekitar 130 nama yang benar-benar digunakan dalam permainan.

Mesin terbang

Untuk tujuan tantangan ini, kami akan memberi nomor pada setiap titik grid seperti:

kotak mesin terbang, bernomor

Berikut adalah daftar semua mesin terbang untuk tujuan tantangan ini. Daftar ini adalah objek JSON, berisi setiap mesin terbang sebagai daftar tepi.

{
"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]]
}

Beberapa mesin terbang memiliki beberapa nama (misalnya NO, NOT, INSIDE); Anda harus mendukung mereka semua.

Penafian: Saya tidak dapat menemukan daftar yang baik dari semua mesin terbang, jadi saya menggabungkan beberapa sumber dan akhirnya menggambar semuanya dalam aplikasi JS yang diretas bersama untuk mendapatkan daftar itu. Saya mungkin kehilangan beberapa dan mungkin ada beberapa alias yang tidak digunakan dalam game; Saya harap saya tidak salah menggambar beberapa mesin terbang.

Edit keesokan paginya ketika bukan jam 4 pagi: Saya sudah memperhatikan VICTORY hilang. Oh well, itu tersisa untuk pegolf terbaik itu.

Tantangan

Tugas Anda adalah membuat program atau fungsi yang menggunakan nama mesin terbang, dan menampilkan mesin terbang sebagai gambar.

Gambar harus mengandung titik kisi dan garis yang menghubungkan titik tersebut.

Ini adalah , jadi jawaban tersingkat dalam byte menang. Aturan standar berlaku.

I / O

Anda akan mengambil sebagai input, dalam format pilihan Anda, nama mesin terbang persis seperti yang ditemukan pada kunci-kunci objek JSON di atas. Input lain apa pun adalah perilaku yang tidak terdefinisi.

Anda akan menampilkan gambar dalam format umum apa pun dengan mesin terbang yang diberikan ke kisi.

Proporsi kisi

Proporsi ini harus akurat hingga lima piksel (untuk memungkinkan pembulatan, dll.)

  • Titik terluar (0-5) harus membentuk segi enam biasa.
  • Titik pusat (10) harus di tengah segi enam.
  • Titik tengah (6-9) harus berada di tengah antara titik tengah dan titik terluar yang sesuai.
  • Grid harus berorientasi seperti aslinya.
  • Ketinggian segi enam luar harus minimal 100 piksel.

Aturan lainnya

  • Latar belakang harus transparan atau diisi dengan warna solid.
  • Garis dan titik harus jelas berbeda dari latar belakang dan satu sama lain; mereka tidak bisa memiliki warna solid yang sama.
    • Misalnya, garis biru solid dan titik merah muda solid baik-baik saja.
    • Garis hitam solid dan titik putih dengan batas hitam baik-baik saja.
    • Garis-garis merah dan putih dan bola-bola sebagai poin tidak masalah.
    • Garis hijau solid dan titik hijau pekat tidak baik.
  • Jari-jari titik harus lebih besar dari lebar garis.
  • Anda dapat menggambar garis di depan atau di belakang titik.
  • Anda dapat memasukkan jumlah bantalan (dalam warna latar belakang) dalam gambar.
  • Anda dapat menggabungkan garis berurutan menjadi satu garis, karena tidak memengaruhi hasilnya.

Contohnya

Warna dan lebar objek dalam gambar-gambar ini hanyalah contoh yang agak menyerupai tampilan permainan.

TAK TERBATAS

mesin terbang tanpa batas

PERDAMAIAN

mesin terbang perdamaian

PERLAWANAN

mesin terbang resistensi


Harus memilih nostalgia (dan saran Perlawanan: P). Saya berharap saya masih punya waktu untuk game ini! Beberapa yang paling menyenangkan (dan olahraga) yang saya miliki dalam waktu yang lama. Dan apakah Anda benar-benar secara manual membuat JSON itu?
Carcigenicate

@Carcigenate No. Saya menulis sepotong kode yang memberi saya kotak dan nama mesin terbang dan menyuruh saya menggambarnya, dan mengumpulkan mesin terbang dalam array sebagai daftar node. Kemudian itu hanya sepuluh baris python dan beberapa find-and-replace. Aplikasi itu juga dari mana contoh berasal.
PurkkaKoodari

sementara mengompresi daftar grafik memainkan peran besar dalam tantangan, saya tidak berpikir tag kolmogorov cocok di sini karena Anda memiliki lebih dari seratus output yang berbeda
Sefa

@ Pietu1998 Oh, keren. Tebak saya seharusnya percaya bahwa seorang programmer akan menulis sebuah program untuk membantu dengan sesuatu seperti itu.
Carcigenicate

Jawaban:


7

Mathematica, 228 + 184 + 365 + 13 = 790 byte

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

Perintah 228-byte di atas mendefinisikan fungsi tanpa nama yang mengambil sebagai input salah satu nama mesin terbang di atas, dan mengembalikan gambar. Sebagai contoh, ini adalah output untuk "UNBOUNDED":

TAK TERBATAS

Perintah membaca tiga file biner— "a",, "b"dan "c"— yang masing-masing memiliki 184, 365, dan 13 byte. Versi yang lebih mudah dibaca:

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

Baris 2 mendefinisikan fungsi uncompression buatan tangan: ia membaca dalam aliran byte dari file #, mengubahnya menjadi basis-256 integer, dan kemudian memperluas integer itu ke dalam daftar digit di basis #2. Baris 3 dan 4 mendefinisikan fungsi (menggunakan file biner ketiga) yang mengubah bilangan bulat dari 0 menjadi 10 menjadi koordinat titik grid yang sesuai; semua koordinat ini dipilih sebagai bilangan bulat antara –12 dan 12, yang membuat kompresi nyaman (meskipun tidak begitu nyaman sehingga saya melihatnya untuk pengiriman awal saya).

Baris 5 menggambar titik-titik kisi (dalam warna hitam standar), kemudian beralih ke warna merah untuk garis. Baris 7 membuat asosiasi (menggunakan dua file biner pertama) yang mengubah bilangan bulat input tertentu antara 0 dan 2292 menjadi daftar bilangan bulat titik jaringan seperti {2, 3, 4, 5, 0, 1, 7, 8, 9, 6, 10}, yang mewakili jalur yang menghubungkan titik 2 hingga 3 hingga 4 menjadi ... hingga 10 (Ini adalah "jalur Euler", yang mengunjungi setiap sisi tepat sekali; semua mesin terbang dalam tabel memiliki jalur Euler, sehingga representasi ini lebih pendek daripada daftar himpunan tepi secara eksplisit.) Perintah setelah ->jalur 7 membuat daftar jalur Euler ini, dengan membaca dalam basis-12 integer menggunakan vdan kemudian membaginya pada setiap kemunculan digit 11.

Akhirnya, baris 8 memotong string input dengan mengubah semua hurufnya ke kode ASCII mereka dan mengambil modulo 2293 produk mereka (modulus terkecil yang jawabannya berbeda). Bilangan bulat itu dimasukkan ke dalam asosiasi di baris di atas, menghasilkan jalur Euler yang sesuai, dan baris 6 menarik jalur yang dihasilkan di atas titik-titik grid.

Hex dumps file "a", "b", dan "c", dalam urutan itu:

09d5f27cd2246e0cb06aa243b442d761ac3a5604439f1767a202c4d3fc4fc1b24ce59acfc65a05235cc46354af8820d6733001e1f25ea01479cee027d62e8b1be10891c693ed5887942ca461c461d458a7676bfcd866a70263ad1833b3e836895ce121153c451ad327086e2bd30d6bad7097a9e71c2fc67c2c57716e5ada6907d99f42702dfb8b88c6d26799aa01f42fb89394e00b0752825f2740903276e20ec405473f309cc978aea187da24749d0a44319cd7322dd542

02d9ebf5fc94183ce50f0fc84e88a27bd21a3b3665d54949608c75c86c4507eed3072e02657822bfb83dbca8a708e07d1382c2b6c3c8fcddc88fa7244281a918b3a8aa823048d4a7e070a336c1e5ab83ec4950fc1960f34c6b89c541c9401607882418cac7f79f4edb164b775ecbb97947470016cadea4d06f93a958713b8c23d11be3c9ce8a2824a458d151ac3cafc6d7bb1557e55868434bd5c0da4bd71e66a3f7711018ae5e7f2941a949a85b6e65aebcc2fe43a89cb0479fa9474fe5102cfbf7da8a455f46ac5409dfdc79970ed8dbfc6b84df78c9c19df4d16bda298dca445ad510bf32e14ca5c91ce58e7521492f6e79e05624ab4a4c02c66c22ef670a06d5c5a3dfdf8ccc8c40c353f3aecf17bbb5cb911baefa3ce80e41551376838c166153a1038d83e171077a3f260ccd70358917eeceb5722b58ad6900a40b5b1512b292fb7a7e0d2cbe2bac2a48a4e343e8f2a338808ec9957c64778aba412bec47bcabb2a2789f01c2d5fdd993

254c40dac61bb215386b7361a8

Jawaban bagus! Anda harus memposting hexdump file data Anda.
PurkkaKoodari

Selesai ... dan sementara itu saya menyadari bahwa saya mungkin juga hanya mengompres daftar koordinat titik-grid juga, karena semua perintah yang relevan sudah ada.
Greg Martin
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.