A famous Thai Computing Algorithm, Magic Square

Try it yourself!

Author: Narong Wesnarat

Do you know that an ancient Thai numerical algorithm was quoted in a great computer science text book ? คุณรู้หรือไม่ว่า อัลกอรึทึมทางด้านคณิตศาสตร์โบราณของไทย ได้รับการอ้างถึงในหนังสือของนักวิทยาศาสตร์ทางคอมพิวเตอร์ที่ยิ่งใหญ่ผู้หนึ่ง

Magic Square is a table with odd number of rows and odd number of columns. Each cell of this table is filled with a number such that the sums of all numbers in each row or each column or in the diagonal of the table are equal. For example, if the odd number is 3, the table looks like this:
เมจิกสแควร์ หรือ "สี่เหลียมอาถรรพ์" คือตารางสี่เหลียมที่มีจำนวนแถวในแนวตั้งและแนวนอนเท่ากันเป็นจำนวนเลขคี่ใดๆ ก็ได้ ในแต่ละช่องมีตัวเลขบรรจุอยู่ ซึ่งเมื่อบวกตัวเลขในทุกช่องของแต่และแถว ไม่ว่าในแนวนอน แนวตั้ง รวมทั้งในแนวทะแยงมุม จะมีค่าเท่ากัน ตัวอย่างเช่น ถ้าจำนวนแถว มีค่าเท่ากับ 3 ตารางจะเป็นดังนี้

Enter an odd number then click Submit N:
ลองสร้างเมจิกสแควร์ที่ค่าอื่น ใส่ตัวเลขในช่องว่าง แล้วคลิก Submit N



How to put numbers in a table for a larger odd numbers such as 7,9,15 to get the sums as described above is an amazing algorithm. การนำตัวเลขที่เหมาะสมมาใส่ในตารางให้มันสามารถบวกกันได้เท่ากันทุกแถวและแนวทะแยงดังกล่าวแล้ว สำหรับจำนวนแถวเลขน้อย เช่น 3 หรือ 5 อาจทำได้โดยการลองผิดลองถูก แต่ถ้าตัวเลขมากๆ เช่น 7, 9, 15 เป็นเรื่องน่าพิศวงที่ไม่ง่ายเลย

Donald E. Knuth, a great computer science professor, cited in his famous book " The Art of Computer Programming, Vol. 1 saying that:
" The above algorithm (magic square) was brought from Siam (Thailand) to France by S. de La Loub'ere in 1687. "
โดนัลด์ อี คนุธ โปรเฟสเซอร์ทางวิยาการคอมพิวเตอร์ที่โด่งดังได้กล่าวอ้างไว้ในหนังสือที่มีชื่อของท่านเล่มหนึ่ง คือ "The Art of Computer Programing, Vol. 1" ข้อความว่า "อันกอริทึมข้างบนนี้(ตารางอาถรรพ์) ถูกนำจากสยามไปสู่ฝรั่งเศส โดย เอส. เดอ ลา ลูแยร์ ในปี 1687( พ.ศ. 2230)"

It is sad to say that, only a few Thais know where this algorithm was originated. น่าเสียดายที่คนไทยน้อยคนที่รู้ว่าอัลกอริทึมนี้กำเนิดมาจากไหน (อัลกอริทึมนี้ได้สร้างความตื่นเต้นในยุโรปยุคนั้นไม่น้อย จนเกิดมีการค้นคว้าเรื่องตารางอาถรรพ์รูปแบบต่างๆขี้นมาอีกมากมาย และมีการเขียนตำราเกี่ยวกับอัลกอริทึมชนิดนี้หลายเล่ม)

I believe that, Loub'ere found the magic square from a popular Thai magic table which is called "เลขยันต์". ผมเชื่อว่า ลูแบร์ คงมาพบตารางอาถรรพ์นี้จากการลงตัวเลขในผ้ายันต์ หรือ "เลขยันต์" ในสมัยกรุงศรีอยุทธยา

This page demonstrates a magic square of your choice up to 19, it is computed by my Java script using the algorithm originated in Thailand since Ayuttaya period as mentioned in Knuth's text book.
หน้านี้เป็นการสาธิตการสร้างตารางอาถรรพ์ด้วยจำนวนเลขคี่เท่าไรก็ได้ตามที่คุณต้องการแต่ไม่เกิน 19 โดยใช้จาวาสคริปที่ผมเขียนจากอัลกอริทึมที่ค้นพบจากกรุงศรีอยุทธยาตามที่ Knuth ได้อ้างไว้

อัลกอริทึมเมจิกสแควร์

Magicsquare Algorithm หรือวิธีการลงเลขในตารางเมจิกสแควร์ นี้ ผมขอเอามาเปิดเผยไว้ในที่นี้ เพื่อให้เห็นศักยะภาพของ อัลกอริทึม ว่า ถ้าเราคิดค้นวิธีการอะไรที่มีกระบวนการอย่างเป็นระบบได้แล้ว บางอย่างที่ดูยากมาก มันจะกลายเป็นเรื่องง่ายไปทันที วิขาอัลกอริทึมจึงสำคัญมาก สำหรับคนเรียนคอมพิวเตอร์ในความเห็นของผม อัลกอริทึมเมจิกสแควร์ สรุปเป็นภาษาไทยง่ายๆ ได้ดังนี้
  1. ต้องคิดว่าขอบตารางที่อยู่ตรงข้ามกัน อยู่ติดกันเป็นเสมือนว่าตารางม้วนมาบรรจบกันที่ขอบ คือขอบบนต่อกับขอบล่าง ขอบซ้ายต่อกับขอบขวา
  2. ลงเลข 1 ที่ช่องกลางแถวบนสุดของตารางก่อน
  3. เดินขึ้น 1 ช่อง เลี้ยวซ้าย 1 ช่อง ถ้าช่องตารางนี้ว่างอยู่ ให้ลงเลขถัดไป เช่น 2, 3, 4 เดินหน้าเช่นนี้เรื่อยๆ ถ้าช่องตารางยังว่าง (เนื่องจากเราเริ่มจากแถวบนสุด การเดินขึ้น 1 ช่องจึงมาอยู่ที่ช่องกลางของแถวล่างสุด จากนั้นเราก็เดินซ้ายไปอีก 1 ช่อง จึงลงเลข 2 สังเกตุจากตารางที่ N = 3 ในรูป)
  4. กรณีเดินตามข้อ 3 แล้ว ช่องตารางมีตัวเลขที่เราลงไว้ก่อน ให้ถอยกลับที่เดิม แล้วเดินลงล่าง 1 ช่อง ลงตัวเลขถัดไปในช่องนั้น (ดูตำแหน่งเลข 4 ในรูป) จากนั้นเดินต่อไปอีกตามข้อ 3 เลขสุดท้ายที่ทำให้ตารางเต็มคือ N ยกกำลัง 2 เช่น N = 3 ตัวเลขสุดท้ายคือ 9 ซึ่งตารางจะเต็มพอดี
คนที่ชำนาญแล้ว อาจพลิกแพลงไปเริ่มต้นที่ตำแหน่งอื่นได้ ก็จะได้ตารางที่แปลกออกไป

Note: You can copy this Java script for any purpose but I'll greatful if you quote the source. คุณสามารถกอปปี้จาวาสคริปไปใช้ได้โดยอิสระ โดยการสั่ง save หน้านี้ลงบน PC แล้วเปิด source file ขี้นมาดู จาวาสคริปจะอยู่ในตอนต้นๆ ไฟล์..