Vẽ glyphs Ingress


16

Theo cách sống của game di động AR dựa trên vị trí Ingress người chơi có thể hack những thứ được gọi là cổng thông tin để có được các mặt hàng. (Nếu bạn quan tâm đến Ingress, bạn có thể ping tôi trong trò chuyện để biết thêm thông tin. Tin tôi đi, nó tốt hơn Pokémon. Nếu bạn kết thúc việc tải xuống, hãy nhớ chọn Kháng chiến.)

Một cách để tăng sản lượng hack đáng kể là minigame hack glyph , trong đó người chơi phải vẽ glyphs trên lưới lục giác.

lưới glyph

Tổng cộng, có khoảng 115 glyphs với khoảng 130 tên thực sự được sử dụng trong trò chơi.

Glyphs

Đối với mục đích của thử thách này, chúng tôi sẽ đánh số từng điểm của lưới như sau:

lưới glyph, được đánh số

Dưới đây là danh sách tất cả các glyph cho mục đích của thử thách này. Danh sách này là một đối tượng JSON, chứa mỗi glyph dưới dạng danh sách các cạnh.

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

Một số glyph có nhiều tên (ví dụ: NO, NOT, INSIDE ); bạn phải hỗ trợ tất cả

Tuyên bố từ chối trách nhiệm: Tôi không thể tìm thấy một danh sách tốt về tất cả các glyph, vì vậy tôi đã kết hợp nhiều nguồn và cuối cùng kết thúc việc vẽ tất cả chúng trong một ứng dụng JS bị hack để lấy danh sách của chúng. Tôi có thể thiếu một số và có thể có một vài bí danh không được sử dụng trong trò chơi; Tuy nhiên, tôi hy vọng tôi đã không rút một số glyphs.

Chỉnh sửa vào sáng hôm sau khi không phải 4 giờ sáng: Tôi đã nhận thấy VICTORY bị thiếu. Oh tốt, nó đã để lại cho golfer tốt nhất sau đó.

Thử thách

Nhiệm vụ của bạn là tạo ra một chương trình hoặc chức năng lấy tên của glyph và xuất glyph dưới dạng hình ảnh.

Hình ảnh phải chứa các điểm lưới và các đường nối các điểm trong câu hỏi.

Đây là , vì vậy câu trả lời ngắn nhất bằng byte sẽ thắng. Quy tắc tiêu chuẩn áp dụng.

Tôi / O

Bạn sẽ lấy đầu vào, theo định dạng mà bạn chọn, tên của glyph chính xác như được tìm thấy trong các khóa của đối tượng JSON ở trên. Bất kỳ đầu vào khác là hành vi không xác định.

Bạn sẽ xuất một hình ảnh ở bất kỳ định dạng phổ biến nào với glyph được kết xuất vào lưới.

Tỷ lệ lưới

Các tỷ lệ này phải chính xác đến năm pixel (để cho phép làm tròn, v.v.)

  • Các điểm ngoài (0-5) phải tạo thành một hình lục giác đều.
  • Điểm trung tâm (10) phải nằm ở trung tâm của hình lục giác.
  • Các điểm trung gian (6-9) phải nằm giữa điểm trung tâm và các điểm ngoài tương ứng.
  • Lưới phải được định hướng như ban đầu.
  • Chiều cao của hình lục giác bên ngoài phải tối thiểu 100 pixel.

Các quy tắc khác

  • Nền phải trong suốt hoặc được tô bằng một màu đơn sắc.
  • Các đường và điểm phải được phân biệt rõ ràng với nền và nhau; chúng không thể có cùng màu.
    • Ví dụ, các đường màu xanh đặc và các điểm màu hồng là tốt.
    • Đường kẻ liền màu đen và điểm trắng có viền đen là ổn.
    • Đường kẻ sọc đỏ trắng và bóng đá như điểm là tốt.
    • Đường màu xanh lá cây và điểm màu xanh lá cây rắn là không tốt.
  • Bán kính của các điểm phải lớn hơn chiều rộng của các đường.
  • Bạn có thể vẽ các đường phía trước hoặc phía sau các điểm.
  • Bạn có thể bao gồm bất kỳ số lượng đệm (màu nền) trong hình ảnh.
  • Bạn có thể kết hợp các dòng liên tiếp thành một dòng, vì nó không ảnh hưởng đến kết quả.

Ví dụ

Màu sắc và độ rộng đối tượng trong những hình ảnh này chỉ là những ví dụ có phần giống với ngoại hình của trò chơi.

CHƯA TỪNG

glyph không giới hạn

SỰ THANH BÌNH

glyph hòa bình

SỨC CẢN

kháng glyph


Phải nâng cao nỗi nhớ (và gợi ý Kháng chiến: P). Tôi ước tôi vẫn còn thời gian cho trò chơi này! Một số điều thú vị nhất (và tập thể dục) tôi đã có trong một thời gian dài. Và bạn đã thực sự tự tạo JSON đó chưa?
Carcigenicate

@Carcigenate Không. Tôi đã viết một đoạn mã cho tôi một lưới và tên của một glyph và tôi đã vẽ nó, và thu thập các glyph trong một mảng dưới dạng danh sách các nút. Sau đó, nó chỉ là mười dòng trăn và một số tìm và thay thế. Ứng dụng đó cũng là nơi các ví dụ đến từ.
PurkkaKoodari

Trong khi nén danh sách đồ thị đóng một vai trò lớn trong thử thách, tôi không nghĩ rằng kỳ tích thẻ kolmogorov ở đây khi bạn có hơn trăm đầu ra khác nhau
Sefa

@ Pietu1998 ơi, tuyệt quá. Có lẽ tôi nên tin tưởng rằng một lập trình viên sẽ viết một chương trình để giúp đỡ với những thứ tương tự.
Carcigenicate

Câu trả lời:


7

Toán học, 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]]}&

Lệnh 228 byte ở trên xác định một hàm không tên được lấy làm đầu vào của một trong các tên glyph ở trên và trả về một hình ảnh. Ví dụ, đây là đầu ra cho "UNBOUNDED":

CHƯA TỪNG

Lệnh đọc ba files- nhị phân "a", "b""c"-which có 184, 365, và 13 byte, tương ứng. Phiên bản dễ đọc hơn:

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

Dòng 2 định nghĩa hàm giải nén thủ công: nó đọc trong một luồng byte từ tệp #, chuyển đổi nó thành một số nguyên cơ sở 256, và sau đó mở rộng số nguyên đó thành danh sách các chữ số trong cơ sở #2. Dòng 3 và 4 xác định một hàm (sử dụng tệp nhị phân thứ ba) chuyển đổi một số nguyên từ 0 thành 10 thành tọa độ của điểm lưới tương ứng; tất cả các tọa độ này đã được chọn là số nguyên giữa dòng12 và 12, điều này làm cho việc nén trở nên thuận tiện (mặc dù không thuận tiện đến mức tôi thấy nó cho lần gửi đầu tiên của mình).

Dòng 5 vẽ các điểm lưới (màu đen mặc định), sau đó chuyển sang màu đỏ cho các dòng. Dòng 7 tạo liên kết (sử dụng hai tệp nhị phân đầu tiên) chuyển đổi các số nguyên đầu vào nhất định từ 0 đến 2292 thành một danh sách các số nguyên điểm lưới như {2, 3, 4, 5, 0, 1, 7, 8, 9, 6, 10}, đại diện cho một đường nối điểm 2 đến 3 thành ... thành 10 . (Đây là "đường dẫn Euler", đường dẫn truy cập mỗi cạnh chính xác một lần; tất cả các glyph trong bảng đều có đường dẫn Euler, vì vậy biểu diễn này ngắn hơn liệt kê rõ ràng các nhóm cạnh.) Lệnh sau ->dòng trên 7 tạo danh sách các đường dẫn Euler này, bằng cách đọc số nguyên cơ số 12 bằng cách sử dụng vvà sau đó tách nó ở mỗi lần xuất hiện của chữ số 11.

Cuối cùng, dòng 8 băm chuỗi đầu vào bằng cách chuyển đổi tất cả các chữ cái của nó thành mã ASCII của chúng và lấy sản phẩm modulo 2293 (mô-đun nhỏ nhất mà các câu trả lời đều khác biệt). Số nguyên đó được đưa vào liên kết trong dòng trên, dẫn đến đường dẫn Euler thích hợp và dòng 6 vẽ đường dẫn kết quả qua các điểm lưới.

Hex các tập tin "a", "b" và "c", theo thứ tự đó:

09d5f27cd2246e0cb06aa243b442d761ac3a5604439f1767a202c4d3fc4fc1b24ce59acfc65a05235cc46354af8820d6733001e1f25ea01479cee027d62e8b1be10891c693ed5887942ca461c461d458a7676bfcd866a70263ad1833b3e836895ce121153c451ad327086e2bd30d6bad7097a9e71c2fc67c2c57716e5ada6907d99f42702dfb8b88c6d26799aa01f42fb89394e00b0752825f2740903276e20ec405473f309cc978aea187da24749d0a44319cd7322dd542

02d9ebf5fc94183ce50f0fc84e88a27bd21a3b3665d54949608c75c86c4507eed3072e02657822bfb83dbca8a708e07d1382c2b6c3c8fcddc88fa7244281a918b3a8aa823048d4a7e070a336c1e5ab83ec4950fc1960f34c6b89c541c9401607882418cac7f79f4edb164b775ecbb97947470016cadea4d06f93a958713b8c23d11be3c9ce8a2824a458d151ac3cafc6d7bb1557e55868434bd5c0da4bd71e66a3f7711018ae5e7f2941a949a85b6e65aebcc2fe43a89cb0479fa9474fe5102cfbf7da8a455f46ac5409dfdc79970ed8dbfc6b84df78c9c19df4d16bda298dca445ad510bf32e14ca5c91ce58e7521492f6e79e05624ab4a4c02c66c22ef670a06d5c5a3dfdf8ccc8c40c353f3aecf17bbb5cb911baefa3ce80e41551376838c166153a1038d83e171077a3f260ccd70358917eeceb5722b58ad6900a40b5b1512b292fb7a7e0d2cbe2bac2a48a4e343e8f2a338808ec9957c64778aba412bec47bcabb2a2789f01c2d5fdd993

254c40dac61bb215386b7361a8

Câu trả lời tốt đẹp! Bạn nên đăng các hexdumps của các tệp dữ liệu của bạn, mặc dù.
PurkkaKoodari

Xong ... và trong khi đó tôi nhận ra rằng tôi cũng có thể nén danh sách tọa độ điểm lưới, vì tất cả các lệnh có liên quan đã có sẵn.
Greg Martin
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.