Ingress gliflerini çizin


16

In konum tabanlı AR mobil oyun hayat yolunda Ingress'in oyuncu öğeleri almak için portallar denilen şeyleri kesmek olabilir. (Eğer Ingress ile ilgileniyorsanız, daha fazla bilgi için bana sohbete ping atabilirsiniz. Güven bana, Pokémon'dan daha iyi. Eğer indirirseniz, Direnci seçmeyi unutmayın.)

Hack çıktısını önemli ölçüde artırmanın bir yolu , oyuncunun altıgen bir ızgaraya glifler çizmesi gereken glif hack mini oyunu.

glif ızgarası

Toplamda, oyunda gerçekte kullanılan yaklaşık 130 isim ile yaklaşık 115 glif vardır.

Glifler

Bu zorluğun amaçları için, ızgaranın her noktasını aşağıdaki gibi numaralandıracağız:

numaralı glif ızgarası

İşte bu zorluğun amaçları için tüm gliflerin listesi. Liste, her glifi kenar listesi olarak içeren bir JSON nesnesidir.

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

Bazı gliflerin birden fazla adı vardır (örneğin NO, NOT, INSIDE); hepsini desteklemelisin.

Yasal Uyarı: Tüm gliflerin iyi bir listesini bulamadım, bu yüzden birden fazla kaynağı birleştirdim ve sonunda bunların listesini almak için hepsini bir hack-birlikte JS uygulamasında çizdim. Bazılarını kaçırıyor olabilirim ve oyunda kullanılmayan birkaç takma ad olabilir; Umarım bazı glifleri yanlış anlamamıştım.

Ertesi sabah saat 4'te değilken düzenleyin: ZAFER'in eksik olduğunu zaten fark ettim. Oh, o zaman en iyi golfçü için kaldı.

Meydan okuma

Göreviniz, bir glif adını alan ve glifi bir görüntü olarak çıkaran bir program veya işlev oluşturmaktır.

Resim, ızgara noktalarını ve söz konusu noktaları birleştiren çizgileri içermelidir.

Bu , bu yüzden bayttaki en kısa cevap kazanır. Standart kurallar geçerlidir.

I / O

Yukarıdaki JSON nesnesinin tuşlarında olduğu gibi, seçtiğiniz bir biçimde, bir glifin adını girdi olarak alacaksınız. Diğer girdiler tanımsız davranıştır.

Izgaraya oluşturulan glif ile ortak bir formatta bir görüntü elde edersiniz.

Izgara oranları

Bu oranlar beş piksele (yuvarlamaya izin vermek için) doğru olmalıdır.

  • Dış noktalar (0-5) normal bir altıgen oluşturmalıdır.
  • Merkez noktası (10) altıgenin ortasında olmalıdır.
  • Ara noktalar (6-9), merkez nokta ile karşılık gelen dış noktaların arasında olmalıdır.
  • Izgara orijinal gibi yönlendirilmelidir.
  • Dış altıgenin yüksekliği en az 100 piksel olmalıdır.

Diğer kurallar

  • Arka plan şeffaf veya düz bir renkle doldurulmuş olmalıdır .
  • Çizgiler ve noktalar arka plandan ve birbirinden açıkça farklı olmalıdır ; aynı düz renkte olamazlar.
    • Örneğin, düz mavi çizgiler ve düz pembe noktalar iyidir.
    • Düz siyah çizgiler ve siyah kenarlı beyaz noktalar iyi.
    • Puan olarak kırmızı ve beyaz çizgili çizgiler ve futbol topları iyidir.
    • Sabit yeşil çizgiler ve sabit yeşil noktalar iyi değildir .
  • Noktaların yarıçapı çizgilerin genişliğinden daha büyük olmalıdır .
  • Sen olabilir önünde ya da noktalarının arkasında çizgiler çizin.
  • Sen olabilir görüntüde (arka plan rengi) dolgu herhangi bir miktar içermektedir.
  • Sen olabilir o sonucunu etkilemez, çünkü bir satır içine ardışık satırları birleştirir.

Örnekler

Bu görüntülerdeki renkler ve nesne genişlikleri, oyunun görünümüne biraz benzeyen örneklerdir.

sınırsız

sınırsız glif

BARIŞ

barış glifi

DİRENÇ

direnç glifi


Nostalji için (ve Direnç önerisi: P) oy kullanmak zorunda kaldı. Keşke bu oyuna hala zamanım olsaydı! Uzun zamandır yaşadığım en eğlenceli (ve egzersizlerden) bazıları. Ve aslında bu JSON'u elle mi oluşturdunuz?
17'de Carcigenicate

@Karcigenate Hayır. Bana bir ızgara ve bir glif adı veren ve onu çizmemi sağlayan bir kod parçası yazdım ve glifleri bir dizi düğüm listesi olarak topladım. Sonra sadece on satır python ve bazı bul ve değiştir oldu. Bu uygulama aynı zamanda örneklerin geldiği yerdir.
PurkkaKoodari

grafik listesini sıkıştırırken meydan okumada büyük bir rol oynar, yüzden fazla farklı çıktı var gibi kolmogorov etiketi burada feat sanmıyorum
Sefa

@ Pietu1998 Oh, güzel. Sanırım bir programcının böyle bir şeye yardım etmek için bir program yazacağına güvenmeliydim.
17'de Carcigenicate

Yanıtlar:


7

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

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

Yukarıdaki 228 baytlık komut, yukarıdaki glif adlarından birini girdi olarak alan ve bir görüntü döndüren adsız bir işlevi tanımlar. Örneğin, çıktı "UNBOUNDED":

sınırsız

Komut üç ikili dosyaları-okur "a", "b"ve "c"sırasıyla 184, 365 ve 13 bayt var -ki. Okunması daha kolay bir sürüm:

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

Satır 2, el yapımı bir sıkıştırma işlevini tanımlar: dosyadan bir bayt akışında okur, bir #base-256 tamsayısına dönüştürür ve ardından bu tamsayıyı temeldeki basamak listesine genişletir #2. Satır 3 ve 4, 0'dan 10'a bir tamsayıyı karşılık gelen ızgara noktasının koordinatlarına dönüştüren bir işlevi (üçüncü ikili dosyayı kullanarak) tanımlar; tüm bu koordinatlar –12 ve 12 arasında bir tamsayı olarak seçilmiştir, bu da sıkıştırmayı uygun hale getirir (ilk gönderim için gördüğüm kadar kullanışlı olmasa da).

Çizgi 5 ızgara noktalarını çizer (varsayılan olarak siyah renktedir), ardından çizgiler için kırmızı renge geçer. Satır 7, 0 ile 2292 arasındaki belirli giriş tam sayılarını {2, 3, 4, 5, 0, 1, 7, 8, 9, 6, 10}, 2 ila 3 ila 4 ila ... ila 10 arasındaki bir yol birleştirme noktasını temsil eden bir ızgara noktası tam sayıları listesine dönüştüren bir ilişki oluşturur (ilk iki ikili dosyayı kullanarak). . sonra komut (bu temsili açık kenarlarının bir dizi listesi daha kısa olan, böylece, bütün motiflerinin tabloda, bir Euler yol var Bu tam olarak bir kez ziyaret her kenar olduğu bir "Euler yolu", biridir.) ->hat 7 Eulerian yollarının bu listesini kullanarak v, basamağın 11 her oluşumunda kullanarak bir baz-12 tamsayısını okuyarak ve böler .

Son olarak, satır 8, tüm harflerini ASCII kodlarına dönüştürerek ve ürün modülo 2293'ü (cevapların hepsinin farklı olduğu en küçük modül) alarak giriş dizesini hashlandırır. Bu tamsayı yukarıdaki satırdaki birleşmeye beslenir, bu da uygun Eulerian yolu ile sonuçlanır ve 6. satır, sonuçta oluşan yolu ızgara noktaları üzerine çeker.

"A", "b" ve "c" dosyalarının onaltılık dökümleri aşağıdaki sırayla:

09d5f27cd2246e0cb06aa243b442d761ac3a5604439f1767a202c4d3fc4fc1b24ce59acfc65a05235cc46354af8820d6733001e1f25ea01479cee027d62e8b1be10891c693ed5887942ca461c461d458a7676bfcd866a70263ad1833b3e836895ce121153c451ad327086e2bd30d6bad7097a9e71c2fc67c2c57716e5ada6907d99f42702dfb8b88c6d26799aa01f42fb89394e00b0752825f2740903276e20ec405473f309cc978aea187da24749d0a44319cd7322dd542

02d9ebf5fc94183ce50f0fc84e88a27bd21a3b3665d54949608c75c86c4507eed3072e02657822bfb83dbca8a708e07d1382c2b6c3c8fcddc88fa7244281a918b3a8aa823048d4a7e070a336c1e5ab83ec4950fc1960f34c6b89c541c9401607882418cac7f79f4edb164b775ecbb97947470016cadea4d06f93a958713b8c23d11be3c9ce8a2824a458d151ac3cafc6d7bb1557e55868434bd5c0da4bd71e66a3f7711018ae5e7f2941a949a85b6e65aebcc2fe43a89cb0479fa9474fe5102cfbf7da8a455f46ac5409dfdc79970ed8dbfc6b84df78c9c19df4d16bda298dca445ad510bf32e14ca5c91ce58e7521492f6e79e05624ab4a4c02c66c22ef670a06d5c5a3dfdf8ccc8c40c353f3aecf17bbb5cb911baefa3ce80e41551376838c166153a1038d83e171077a3f260ccd70358917eeceb5722b58ad6900a40b5b1512b292fb7a7e0d2cbe2bac2a48a4e343e8f2a338808ec9957c64778aba412bec47bcabb2a2789f01c2d5fdd993

254c40dac61bb215386b7361a8

Güzel cevap! Yine de veri dosyalarınızın onaltılık ayrıntılarını göndermelisiniz.
PurkkaKoodari

Tamamlandı ... ve bu arada tüm ilgili komutlar zaten mevcut olduğundan ızgara noktası koordinatları listesini de sıkıştırabileceğimi fark ettim.
Greg Martin
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.