Software Design

🎩 CP หมวก 5 ใบ

โจทย์สอบสัมภาษณ์ผู้บริหาร CP

🥳 โจทย์

มีคนสวมหมวกอยู่ในห้อง 5 คนยืนหันหน้าไปทางทิศเดียวกัน โดยห้ามพูด ห้ามหันหน้าไปทางอื่น

  • ไม่มีใครรู้ว่าตัวเองใส่หมวกสีอะไร แต่จะเห็นหมวกทุกคนที่อยู่ด้านหน้า

  • คนแรกเพียงคนเดียวที่อยู่ในห้องมืดทำให้ไม่มีใครรู้ว่าเขาใส่หมวกสีอะไร

  • ทุกคนในห้องรู้ว่ามีหมวกสีแดง 2 ใบ และสีดำ 3 ใบ

ใครจะเป็นคนแรกที่ตอบว่าตัวเองใส่หมวกสีอะไร และต้องถูก 100%

🤠 วิธีคิด

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

ทั้งหมดเริ่มจากการดูว่า ใครมีข้อมูลอะไร? โดยเมื่อวิเคราะห์แล้วก็จะได้คำตอบแบบง่ายๆออกมาว่า A กับ B มองไม่เห็นใครเลย ดังนั้นคนนี้ไม่มีทางที่จะตอบถูกทุกครั้งได้แน่นอน เลยทำให้ 2 ตัวเลือกนี้ถูกตัดทิ้งไปทันที

ถัดมา C มองเห็นแค่ B เพียงคนเดียว ซึ่งข้อมูลที่เป็นประโยชน์มากสุดคือกรณีที่ B ใส่หมวกสีแดง ก็จะทำให้ C รู้ว่าเหลือหมวกสีแดงอีก เพียง 1 ใบเท่านั้น และมีโอกาสที่เขาจะตอบถูกอยู่ 33.33% (หนึ่งในสาม) ดังนั้นเลยไม่ใช่ทางเลือกที่ดีนักที่จะตะโกนคำตอบออกไป ดังนั้นตัวเลือกนี้ก็ตัดทิ้งได้เลยเช่นกัน

และแม้ว่าจะมีโอกาสตอบถูกถึง 33% ก็ตาม แต่ถ้าเราลองคิดดูว่าโอกาสที่ B จะใส่หมวกสีแดงมีกี่เปอร์เซ็นก็จะพบว่า มีโอกาสแค่ 4 ใน 10 หรือเพียง 40% เท่านั้นเอง ตามตารางด้านล่าง ดังนั้นโอกาสที่จะเกิดเหตุการณ์แบบนั้นได้และตอบถูกด้วย ก็จะเหลือแค่ 13.2% เท่านั้น

พอมาวิเคราะห์ตาของ D ดูบ้างก็จะเห็นว่า กรณีที่ดีที่สุดก็คือ B กับ C ใส่หมวกสีแดง ก็จะทำให้ D รู้ว่าหมวกสีแดงไม่มีเหลือแล้ว ทำให้เขารู้ได้ทันทีว่าตัวเองใส่หมวกสีดำ และแน่นอนว่าถ้าเป็นกรณีนี้ E ก็จะรู้คำตอบเช่นกัน แต่การที่จะเกิดเหตุการณ์แบบนั้นขึ้นได้นั้นโอกาสของมันคือ 10% ดังนั้นก็ตัด D ออกได้เลยเช่นกัน

สุดท้ายคือ E ที่มีโอกาสจะตอบได้มากที่สุด แต่ก็มีแค่เพียง 30% เท่านั้นที่เขาจะเห็นคนข้างหน้าใส่หมวกสีแดง 2 ใบ (A อยู่ในห้องมืดทำให้มองไม่เห็น) ดังนั้น E ก็ไม่ใช่คนที่สามารถตอบได้ 100% นั่นเอง

ดังนั้นคำตอบในกรณีที่ ไม่ได้กำหนดชัดเจนว่าแต่ละคนใส่หมวกสีอะไร ก็จะหาคนที่ตอบถูก 100% ไม่ได้ นั่นเอง

🤔 ถ้าหมวกถูกกำหนดไว้แล้วล่ะ?

ในกรณีที่หมวกถูกกำหนดไว้ตายตัวตั้งแต่ต้นแล้ว และทั้ง 5 คนไม่รู้เช่นเคย ตามรูปด้านล่าง

3 ตัวเลือกแรก A~C ก็ยังถูกตัดออกเช่นเคย เพราะ

  • A และ B มืด 8 ด้านมองอะไรไม่เห็นดังนั้นโอกาสถูกมีแค่ 50%

  • C รู้ว่ายังเหลือหมวกสีดำ 2 ใบ และแดง 2 ใบ ดังนั้นโอกาสตอบถูกก็มีแค่ 50%

ถัดมา D จะรู้ว่าเหลือหมวกสีดำ 2 ใบ และแดง 1 ใบ ดังนั้น ถ้าเขาตอบสีดำจะทำให้มีโอกาสตอบถูก 66% ในขณะที่สีแดงมีโอกาสแค่ 33% ซึ่งมันยังไม่ใช่ 100% ดังนั้นเขาก็ไม่ควรจะเป็นคนตอบ

สุดท้าย E ก็จะรู้ว่าเหลือหมวกสีดำ 1 ใบ และแดง 1 ใบ ซึ่งโอกาสตอบถูกมีแค่ 50% ดังนั้นเขาก็ควรจะเงียบต่อไป

จากที่ว่ามาทั้งหมดพอ E ไม่ยอมพูดอะไร ก็จะทำให้ D รู้คำตอบในทันทีว่า E เห็นหมวกสีแดงแค่ 1 ใบเหมือนกัน เพราะถ้าเห็น 2 ใบเขาต้องตอบแล้วแน่นอน เลยทำให้รู้ว่าตัวเขาเองต้องใส่หมวกสีดำแน่นอนกั๊ฟ

สรุปสำหรับกรณีที่หมวกถูกกำหนดไว้แล้ว คนแรกที่จะเป็นคนตอบคำถามแล้วจะถูกต้อง 100% ก็คือ D นั่นเอง

🎯 ข้อคิดที่ได้

Information เป็นเรื่องสำคัญเพราะมันใช้ในการตัดสินใจทุกๆอย่าง แต่ในบางครั้งเราก็จำเป็นต้องอาศัย information จากสิ่งรอบข้าง เพื่อใช้ในการตัดสินใจให้ถูกต้องมากยิ่งขึ้นนั่นเอง

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

ภาษาขาเดฟ สมมุติว่าเราเห็นละว่า feature ที่จะเขียนนี้ไม่ได้ยากอะไรทำ 1-2 วันก็เสร็จ แต่ถ้าเพื่อนๆในทีมของเราอ้ำๆอึ้งๆตอนถามว่าจะใช้เวลาเท่าไหร่ เราก็อย่าด่วนไปตัดสินใจแทนให้ ควรถามเขาก่อนว่ามีประเด็นอะไร? เพราะบางทีสิ่งที่เขาคาใจอยู่อาจจะเป็นเรื่องที่เรายังคิดไม่ครบ หรือตัวเขาแอบวาง bug ไว้ ทำให้ต้องใช้เวลาเกินกว่าที่กำหนดก็ได้