วาดร่ายมนตร์ Ingress


16

ในวิถีชีวิตเกมมือถือ AR ตามสถานที่ผู้เล่นIngressสามารถแฮ็คสิ่งต่าง ๆ ที่เรียกว่าพอร์ทัลเพื่อรับไอเท็ม (หากคุณสนใจ Ingress คุณสามารถ ping ฉันในการแชทเพื่อรับข้อมูลเพิ่มเติมเชื่อฉันมันดีกว่าPokémonถ้าคุณดาวน์โหลดมันอย่าลืมเลือกความต้านทาน)

วิธีเพิ่มแฮ็คเอาท์พุทอย่างมีนัยสำคัญคือminigame แฮ็ค glyphซึ่งผู้เล่นจะต้องวาด glyphs บนกริดหกเหลี่ยม

กริด glyph

โดยรวมแล้วมีร่ายมนตร์ประมาณ 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 ที่ถูกแฮ็กเข้าด้วยกันเพื่อรับรายการของพวกเขา ฉันอาจหายไปบ้างและอาจมีนามแฝงสองตัวที่ไม่ได้ใช้ในเกม ฉันหวังว่าฉันจะไม่ถอน glyphs ออกมาบ้าง

แก้ไขเช้าวันถัดไปเมื่อไม่ใช่ 04:00:ฉันสังเกตแล้วว่า VICTORY หายไป โอ้ดีมันเหลือไว้สำหรับนักกอล์ฟที่ดีที่สุดแล้ว

ท้าทาย

งานของคุณคือการสร้างโปรแกรมหรือฟังก์ชั่นที่ใช้ชื่อของ glyph และส่งออก glyph เป็นรูปภาพ

รูปภาพต้องมีจุดกริดและเส้นเชื่อมต่อจุดที่เป็นปัญหา

นี่คือดังนั้นคำตอบที่สั้นที่สุดในหน่วยไบต์ชนะ ใช้กฎมาตรฐาน

I / O

คุณจะใช้เป็นอินพุตในรูปแบบที่คุณเลือกชื่อของสัญลักษณ์ที่พบในคีย์ของวัตถุ JSON ด้านบน อินพุตอื่นใดคือพฤติกรรมที่ไม่ได้กำหนด

คุณจะส่งออกภาพในรูปแบบทั่วไปใด ๆ ที่มีสัญลักษณ์แสดงผลไปยังตาราง

สัดส่วนกริด

สัดส่วนเหล่านี้จะต้องแม่นยำถึงห้าพิกเซล (เพื่ออนุญาตให้ปัดเศษเป็นต้น)

  • จุดนอก (0-5) ต้องเป็นรูปหกเหลี่ยมปกติ
  • จุดศูนย์กลาง (10) จะต้องอยู่กึ่งกลางของรูปหกเหลี่ยม
  • จุดกึ่งกลาง (6-9) จะต้องอยู่กึ่งกลางระหว่างจุดกึ่งกลางและจุดนอกที่สอดคล้องกัน
  • กริดจะต้องเน้นเหมือนต้นฉบับ
  • ความสูงของรูปหกเหลี่ยมด้านนอกต้องมีอย่างน้อย 100 พิกเซล

กฎอื่น ๆ

  • พื้นหลังจะต้องโปร่งใสหรือเติมด้วยสีทึบ
  • เส้นและจุดต่าง ๆจะต้องแตกต่างอย่างชัดเจนจากพื้นหลังและซึ่งกันและกัน พวกเขาไม่สามารถมีสีทึบเดียวกัน
    • ตัวอย่างเช่นเส้นทึบสีน้ำเงินและจุดสีชมพูทึบนั้นดี
    • เส้นทึบสีดำและจุดสีขาวที่มีเส้นขอบสีดำนั้นดี
    • ลายเส้นสีแดงและสีขาวและฟุตบอลเป็นจุดดี
    • เส้นสีเขียวทึบและจุดสีเขียวทึบนั้นไม่ดี
  • รัศมีของคะแนนจะต้องมากกว่าความกว้างของเส้น
  • คุณสามารถวาดเส้นที่ด้านหน้าหรือด้านหลังของจุด
  • คุณอาจรวมถึงช่องว่างภายใน (ในสีพื้นหลัง) จำนวนใด ๆ ในภาพ
  • คุณอาจรวมสายติดต่อกันเป็นหนึ่งบรรทัดเนื่องจากจะไม่มีผลต่อผลลัพธ์

ตัวอย่าง

สีและความกว้างของวัตถุในภาพเหล่านี้เป็นเพียงตัวอย่างที่มีลักษณะคล้ายกับเกม

มากมาย

ร่ายมนตร์มากมาย

สันติภาพ

สัญลักษณ์สันติภาพ

ความต้านทาน

glyph ความต้านทาน


ต้อง upvote สำหรับความคิดถึง (และข้อเสนอแนะการต้านทาน: P) ฉันหวังว่าฉันจะมีเวลาสำหรับเกมนี้! ความสนุก (และการออกกำลังกาย) ที่สนุกที่สุดที่ฉันเคยเจอมานาน และคุณสร้าง JSON นั้นด้วยตนเองจริงหรือ
Carcigenicate

@Carcigenate ไม่ฉันเขียนโค้ดที่ให้ตารางและชื่อของสัญลักษณ์และให้ฉันวาดมันและรวบรวม glyphs ในอาร์เรย์เป็นรายการของโหนด จากนั้นมันเป็นเพียงสิบบรรทัดของงูหลามและบางส่วนค้นหาและแทนที่ แอพนั้นเป็นที่มาของตัวอย่าง
PurkkaKoodari

ในขณะที่การบีบอัดรายการกราฟมีบทบาทสำคัญในการท้าทายฉันไม่คิดว่าแท็ก kolmogorov จะเกิดขึ้นที่นี่เนื่องจากคุณมีเอาต์พุตที่แตกต่างกันมากกว่าร้อยรายการ
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 กำหนดฟังก์ชั่นที่ทำด้วยมือ uncompression: มันอ่านในกระแสของไบต์จากไฟล์#มาแปลงเป็นฐาน-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 . (นี่คือ "เส้นทาง Eulerian" หนึ่งที่เข้าชมแต่ละขอบอย่างแน่นอนครั้งเดียวร่ายมนตร์ทั้งหมดในตารางมีเส้นทาง Eulerian ดังนั้นการแสดงนี้จะสั้นกว่ารายการชุดของขอบอย่างชัดเจน) คำสั่งหลังจาก->บรรทัดที่ 7 สร้างรายการของเส้นทาง Eulerian นี้โดยการอ่านในจำนวนเต็มฐาน -12 โดยใช้vแล้วแยกมันที่เกิดขึ้นทุก 11 หลัก

ในที่สุดบรรทัดที่ 8 แฮชสตริงอินพุตโดยการแปลงตัวอักษรทั้งหมดเป็นรหัส ASCII ของพวกเขาและรับโมดูโลผลิตภัณฑ์ของพวกเขา 2293 (มอดุลัสที่เล็กที่สุดที่คำตอบแตกต่างกันทั้งหมด) จำนวนเต็มนั้นจะถูกป้อนเข้าสู่การเชื่อมโยงในบรรทัดด้านบนส่งผลให้เส้นทาง Eulerian ที่เหมาะสมและบรรทัด 6 ดึงเส้นทางผลลัพธ์ผ่านจุดกริด

เลขฐานสิบหกของไฟล์ "a", "b" และ "c" ตามลำดับ:

09d5f27cd2246e0cb06aa243b442d761ac3a5604439f1767a202c4d3fc4fc1b24ce59acfc65a05235cc46354af8820d6733001e1f25ea01479cee027d62e8b1be10891c693ed5887942ca461c461d458a7676bfcd866a70263ad1833b3e836895ce121153c451ad327086e2bd30d6bad7097a9e71c2fc67c2c57716e5ada6907d99f42702dfb8b88c6d26799aa01f42fb89394e00b0752825f2740903276e20ec405473f309cc978aea187da24749d0a44319cd7322dd542

02d9ebf5fc94183ce50f0fc84e88a27bd21a3b3665d54949608c75c86c4507eed3072e02657822bfb83dbca8a708e07d1382c2b6c3c8fcddc88fa7244281a918b3a8aa823048d4a7e070a336c1e5ab83ec4950fc1960f34c6b89c541c9401607882418cac7f79f4edb164b775ecbb97947470016cadea4d06f93a958713b8c23d11be3c9ce8a2824a458d151ac3cafc6d7bb1557e55868434bd5c0da4bd71e66a3f7711018ae5e7f2941a949a85b6e65aebcc2fe43a89cb0479fa9474fe5102cfbf7da8a455f46ac5409dfdc79970ed8dbfc6b84df78c9c19df4d16bda298dca445ad510bf32e14ca5c91ce58e7521492f6e79e05624ab4a4c02c66c22ef670a06d5c5a3dfdf8ccc8c40c353f3aecf17bbb5cb911baefa3ce80e41551376838c166153a1038d83e171077a3f260ccd70358917eeceb5722b58ad6900a40b5b1512b292fb7a7e0d2cbe2bac2a48a4e343e8f2a338808ec9957c64778aba412bec47bcabb2a2789f01c2d5fdd993

254c40dac61bb215386b7361a8

คำตอบที่ดี! คุณควรโพสต์ hexdumps ของไฟล์ข้อมูลของคุณ
PurkkaKoodari

ทำ ... และในขณะเดียวกันฉันก็รู้ว่าฉันอาจบีบอัดรายการพิกัดจุด - กริดเช่นกันเนื่องจากคำสั่งที่เกี่ยวข้องทั้งหมดมีอยู่แล้ว
Greg Martin
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.