แหล่งข้อมูล
- โครงร่างจังหวัด (outline): GeoJSON ขอบเขต 77 จังหวัดจาก
apisit/thailand.json( https://github.com/apisit/thailand.json) ดาวน์โหลดตอน build ด้วยscripts/ingest.tsแล้วลดจุด (simplify) ด้วย Douglas-Peucker ที่เขียนเอง ก่อนแปลงเป็น SVG path - จุดศูนย์กลาง (centroid): คำนวณจากพื้นที่ถ่วงน้ำหนักของขอบเขต (area-weighted polygon centroid, shoelace formula) จาก GeoJSON เดียวกัน — ไม่ใช่ พิกัดตัวเมือง
- จังหวัดติดกัน (adjacent): คำนวณจากขอบเขต GeoJSON เดียวกัน — สองจังหวัด ถือว่าติดกันถ้ามีจุดขอบเขตห่างกันน้อยกว่า 3 กม. ยกเว้น ภูเก็ต–พังงา ที่แก้ไขด้วยมือ เพราะข้อมูล GeoJSON แสดงเป็นเกาะห่างจากแผ่นดินใหญ่ราว 10 กม. (ในความเป็นจริงเชื่อมกันด้วยสะพานสารสิน ซึ่งเล็กกว่าความละเอียดของขอบเขตในชุดข้อมูลนี้มาก)
- ภาค: ใช้การแบ่ง 6 ภาคแบบเข้าใจง่าย (เหนือ 9 จังหวัดบน / อีสาน 20 / กลาง 22 / ตะวันออก 7 / ตะวันตก 5 / ใต้ 14) ซึ่งอาจต่างจากการแบ่งภาคของบางหน่วยงานราชการ (เช่นบางหน่วยงานนับจังหวัดภาคเหนือตอนล่างเป็น “ภาคเหนือ” ด้วย) — เลือกใช้สคีมานี้เพื่อความเรียบง่ายของใบ้
- ประชากร: ตัวเลขโดยประมาณจากความรู้ทั่วไป (ไม่ได้ดึงจากฐานข้อมูลราชการสด) ปัดเศษหยาบถึงหลักแสน โดยเจตนา เพื่อความซื่อสัตย์ต่อความแม่นยำที่จำกัด ปีอ้างอิงโดยประมาณ พ.ศ. 2566–2567 (ควรถือเป็นค่าประมาณ ไม่ใช่ตัวเลขทางการล่าสุด)
- พื้นที่ (ตร.กม.): ตัวเลขโดยประมาณจากความรู้ทั่วไป/แหล่งเผยแพร่ทั่วไป (เช่น วิกิพีเดีย) ไม่ใช่ค่าที่คำนวณจากขอบเขต GeoJSON ตรงๆ
- คำขวัญประจำจังหวัด: ถอดจากความจำทั่วไปเฉพาะจังหวัดที่มั่นใจในถ้อยคำ — จังหวัดที่ไม่มั่นใจจะไม่ใส่คำขวัญ (ใบ้ชั้นนี้จะข้ามไปแบบไม่มีปัญหา) ปัจจุบันมีคำขวัญครบ 60 จาก 77 จังหวัด
กลไกโจทย์ประจำวัน (daily seed)
โจทย์ของแต่ละวันคำนวณฝั่ง client ล้วนๆ ไม่มี backend:
- สร้างลำดับสับ (permutation) ของเลข 0–76 ครั้งเดียวตอนโหลดแอป ด้วย mulberry32 PRNG และ salt คงที่ในโค้ด (
lib/seed.ts) — ลำดับนี้เหมือนกันทุกเครื่องตลอดไป - แปลงวันที่ปัจจุบัน (ตามเวลาเครื่องผู้เล่น, รูปแบบ YYYY-MM-DD) เป็นเลขวันคงที่ (days since epoch)
- ดัชนีจังหวัดของวันนั้น =
permutation[เลขวัน % 77]— วนครบ 77 วันโดยไม่ซ้ำ ก่อนเริ่มรอบใหม่
ข้อจำกัด
- โจทย์เปลี่ยนตามเวลาเครื่องผู้เล่นแต่ละคน (local midnight) ไม่ใช่เวลา server กลาง — ถ้าตั้งเวลาเครื่องผิดหรืออยู่คนละ time zone อาจได้โจทย์ต่างวันกัน
- สถิติ (played/win%/streak) เก็บใน localStorage ของเบราว์เซอร์เท่านั้น ไม่ sync ข้ามเครื่อง/เบราว์เซอร์
- ไม่มีโหมดย้อนหลัง (archive) และไม่มี hard mode
- ระยะทาง/ทิศคำนวณจาก centroid ถึง centroid ของจังหวัด ไม่ใช่ระยะทางถนนจริง
- ทิศ 8 ทิศใช้เกณฑ์มุมทางคณิตศาสตร์ล้วน (45 องศาต่อช่อง) เช่น กรุงเทพฯ→เชียงใหม่ ระยะ ~593 กม. ทิศคำนวณได้ “เหนือ (N)” ตามหลักเข็มทิศเป๊ะๆ (มุม ~340°) แม้ในทางสามัญสำนึกคนไทยมักมองว่าเชียงใหม่อยู่ “ทิศตะวันตกเฉียงเหนือ” ของกรุงเทพฯ