# CP หมวก 5 ใบ

## 🥳 โจทย์

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

* ไม่มีใครรู้ว่าตัวเองใส่หมวกสีอะไร แต่จะเห็นหมวกทุกคนที่อยู่ด้านหน้า
* คนแรกเพียงคนเดียวที่อยู่ในห้องมืดทำให้ไม่มีใครรู้ว่าเขาใส่หมวกสีอะไร
* ทุกคนในห้องรู้ว่ามีหมวกสีแดง 2 ใบ และสีดำ 3 ใบ

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

![](/files/-MMD6mlfbQOs317-9_IU)

## 🤠 วิธีคิด

> คำถามชุดนี้เป็นการใช้ information เพื่อประกอบการตัดสินใจอย่างมีเหตุผล ซึ่งเป็นหลักคิดพื้นฐานของ dev ทุกคนควรจะต้องมี สนใจไปอ่านต่อได้จากลิงค์นี้ [**คิดแบบตรรกะจำแบบโปรแกรมเมอร์**](https://www.saladpuk.com/v/tips/logic-thinker) (เข้าไปอ่านการ์ตูนอันสุดท้ายก็คุ้มละผมว่า 🤣)&#x20;

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

![](/files/-MMFzjnySAsPv0II0WlV)

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

![](/files/-MMG-XWxicFMjgrh6thp)

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

![](/files/-MMG4TQYJP9jj6IGTMOL)

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

![](/files/-MMG5JpfYeQEDqnX_012)

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

![](/files/-MMG3uhq_xTJwafq82kX)

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

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

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

![](/files/-MMG6UObpwfeRX3ksFDH)

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

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

![](/files/-MMG7NVicEDcE38Q-YZ8)

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

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

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

![](/files/-MMG9fbAN_8y4Tya7jRR)

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

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

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

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

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


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://www.saladpuk.com/puzzle/challenges/cp-interview-01.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
