Project Euler Problem #14

มีข้อกำหนด (Definition) ในการทำซ้ำ (Iterative Sequence) ต่อไปนี้ สำหรับชุดเลขจำนวนเต็ม

n → n / 2 (เมื่อ n เป็นเลขคู่)
n → 3n + 1 (เมื่อ n เป็นเลขคี่)

เมื่อใช้กฎข้างต้น และเริ่มด้วยเลข 13 จะสร้างลำดับต่อไปนี้:

13 → 40 → 20 → 10 → 5 → 16 → 8 → 4 → 2 → 1

จะเห็นได้ว่าลำดับนี้ (เริ่มที่ 13 และสิ้นสุดที่ 1) มี 10 จำนวน แม้ว่าจะยังไม่ได้รับการพิสูจน์ (ปัญหา Collatz) ก็คิดกันว่าตัวเลขเริ่มต้นทั้งหมด จะสิ้นสุดที่ 1

เลขเริ่มต้นใด ที่ต่ำกว่าหนึ่งล้าน และทำให้เกิดสายโซ่ที่ยาวที่สุด

หมายเหตุ: อนุญาตให้ตัวเลขในลำดับอื่นๆ นอกจากตัวแรก มีค่าเกินหนึ่งล้านได้

(โจทย์นี้แปลมาจาก projecteuler.net สามารถเผยแพร่ภายใต้ลิขสิทธิ์ CC BY-NC-SA 2.0 UK )

1 Likes


Rain’s answer for #14

1 Likes

1 Likes

@prin09:
ชัดเจน: 2/3 สร้างสรรค์: 1/3 กระชับ 2/3 ความเร็ว 2/3
Comment: เข้าใจง่าย เร็วครับ

@Rain
ชัดเจน: 1/3 สร้างสรรค์: 2/3 กระชับ 2/3 ความเร็ว 1/3
Comment: รู้สึกว่าช้ามากเลยครับ ไม่ชอบ while true และงงกับการใช้ list ตรงบรรทัดที่ 19 ทำไม “biggest” ถึงมีสองค่าในเมื่อ biggest มันใหญ่ที่สุด ต้องย้อนกลับไปดูใหม่ แตกออกมาเป็นสองส่วนจะดีกว่าครับ (ปล.ถ้าขนาดคงที่ ใช้ tuple เหมาะกว่าครับ)

@IMPREM
ชัดเจน: 2/3 สร้างสรรค์: 2/3 กระชับ 2/3 ความเร็ว 2/3
Comment: โอเคครับ ผ่าน ชอบตรงที่ใส่ time() มาให้ด้วย :slight_smile: