ห่างหายไปนานกับคอลัมน์ชวนคิดคณิตศาสตร์ จนเกือบจะเป็นคอลัมน์รายปีไปเสียแล้ว จริงๆ ก่อนหน้านี้ก็โพสต์ปัญหาชวนคิดไว้ 6 เรื่องแล้ว (ผู้ที่สนใจคลิกหัวข้อ
ปัญหาชวนคิดในคอลัมน์ทางขวาได้ครับ) แต่พอมาตั้งเป็นคอลัมน์กลับขี้เกียจเขียนไปซะดื้อๆ ปีนี้ขอกลับเนื้อกลับตัวใหม่ ตั้งเป้าหมายไว้ว่าภายในปีนี้จะต้องเขียนให้ได้อย่างน้อย 10 ตอน ว่าแล้วก็เข้าเรื่องของวันนี้กันดีกว่า
โจทย์วันนี้เป็นปัญหาที่เจอกับตัวเองขณะคิดงานวิจัย จริงๆ แล้วเป็นปัญหาคณิตศาสตร์ แต่เอามาแปลงให้เป็นโจทย์เขียนโปรแกรม (เผื่อบางคนที่เป็นโรคแพ้คณิตจะยังพอสนใจบ้าง :-P) ปัญหามีอยู่ว่าผมอยากเขียนฟังก์ชัน
f ซึ่งรับตัวแปรเป็น
integer หนึ่งตัว และคืนค่าที่เป็น
integer กลับมา (จริงๆ แล้ว
integer ไม่ได้สำคัญอะไร จะเป็น
float ก็ได้) และมีคุณสมบัติดังนี้
- สำหรับทุกๆ x, f(x) ต้องคืนค่า x กลับมา
- ยกเว้น f(6) จะทำอย่างไรก็ได้ แต่ห้ามคืนค่า 6 กลับมา (จริงๆ เลข 6 ก็ไม่สำคัญเท่าไหร่ จะเป็น 12, 255 ก็ได้)
- ห้ามใช้โครงสร้างทางภาษาที่เป็น condition ใดๆ ทั้งสิ้น (นั่นคือห้ามใช้ if X then, while X, X ? Y : Z;, ฯลฯ)
- ใบ้นิดนึง คำตอบที่ผมคิดอยู่ใช้เพียงการบวกลบคูณหารธรรมดาเท่านั้น
เอาล่ะโปรแกรมเมอร์ทั้งหลาย ลองดูสิว่าคุณจะคิดนอกกรอบได้ไหม?
เฉลยปัญหาชวนคิดคณิตศาสตร์ (2)
ลองใช้เวลาคิดสักพักนะครับ รีบดูเฉลยเดี๋ยวไม่สนุก... ถ้าคิดพอแล้วอ่านเฉลยได้
ที่นี่
ยากอ่ะ
ReplyDeleteยังยากอยู่
คิดออกแล้วจะมาบอกนะคะ (คาดว่าจะยังไม่ออกอีกนาน)
Extra hint:
ReplyDelete- ห้ามคืนค่า 6 ไม่ได้แปลว่า ต้องคืนค่าที่ไม่ใช่ 6!
- another "hint" in html, if you know where to find it :P