ชวนคิดคณิตศาสตร์ (2)

ห่างหายไปนานกับคอลัมน์ชวนคิดคณิตศาสตร์ จนเกือบจะเป็นคอลัมน์รายปีไปเสียแล้ว จริงๆ ก่อนหน้านี้ก็โพสต์ปัญหาชวนคิดไว้ 6 เรื่องแล้ว (ผู้ที่สนใจคลิกหัวข้อปัญหาชวนคิดในคอลัมน์ทางขวาได้ครับ) แต่พอมาตั้งเป็นคอลัมน์กลับขี้เกียจเขียนไปซะดื้อๆ ปีนี้ขอกลับเนื้อกลับตัวใหม่ ตั้งเป้าหมายไว้ว่าภายในปีนี้จะต้องเขียนให้ได้อย่างน้อย 10 ตอน ว่าแล้วก็เข้าเรื่องของวันนี้กันดีกว่า

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

2 comments:

  1. ยากอ่ะ

    ยังยากอยู่

    คิดออกแล้วจะมาบอกนะคะ (คาดว่าจะยังไม่ออกอีกนาน)

    ReplyDelete
  2. Extra hint:
    - ห้ามคืนค่า 6 ไม่ได้แปลว่า ต้องคืนค่าที่ไม่ใช่ 6!
    - another "hint" in html, if you know where to find it :P

    ReplyDelete