Algorithms
บทนี้เป็นการทบทวนความรู้จากบทเรียนที่ผ่านมาทั้ง 6 บท
The Right-Hand Rule
กฎมือขวา
เพื่อแก้สถานการณ์นี้ Learn to Code1 จึงแนะนำ กฎมือขวา นั่นก็คือให้สร้างเงื่อนไขโดยการเช็คเส้นทางด้านขวามือ
เพื่อให้เข้าใจง่าย... เราขอเปลี่ยนชื่อใหม่ว่า กฎกำแพงมือขวา
สรุปสั้นๆ
ก็คือ การเดินเลาะกำแพงไปเรื่อยๆ โดยให้ กำแพงอยู่ด้านขวามือเสมอ
- กีดขวางด้านขวา และ ด้านหน้า
- กีดขวางด้านขวา
- ไม่ถูกกีดขวาง
แต่เดี๋ยวก่อน!
เขียนตรงตามคำใบ้เป๊ะ แต่ทำไมตัวละครยังเดินวนล่ะ ??
เรามาดูเฉลยของแบบฝึกหัด Adjusting Your Algorithm กันค่ะ
เฉลย
if !isBlockedRight {
turnRight()
moveForward()
moveForward()
turnLeft()
คำอธิบาย
ฟังก์ชันชื่อ rightHandRule กฎมือขวา
ถ้าไม่มีสิ่งกีดขวางด้านขวา ( ! is blocked right ) จงหันขวา เดินหน้า 1 ก้าว
นอกเหนือจากนั้น ถ้าไม่มีสิ่งกีดขวางด้านหน้า ( ! is blocked ) จงเดินหน้า 1 ก้าว
นอกเหนือจากนั้น ถ้ามีสิ่งกีดขวางด้านขวา ( is blocked right ) จงหันซ้าย
ในขณะที่ ไม่ได้อยู่บนสวิตช์ที่ปิดอยู่ ( ! is on closed switch ) จงทำคำสั่งในวงเล็บปีกกาต่อไปนี้
{
ทำงานตามขั้นตอนในฟังก์ชันชื่อ rightHandRule
ถ้า อยู่บนที่ซึ่งมีอัญมณี { จงเก็บอัญมณี }
}
จงกดสวิตช์
-- จบการทำงาน --
เนื่องจาก สวิตช์อยู่ไกลที่สุดและสามารถใช้กฎกำแพงอยู่ด้านขวาไปถึงได้ ดังนั้น สถานการณ์ที่จะทำให้ while หยุดทำงาน จึงควรใช้สวิตช์ที่ปิดอยู่เป็นข้อกำหนด