Project Euler Problem #12

จำนวนสามเหลี่ยม (Triangular Number) จะได้มาจากการบวกจำนวนธรรมชาติ จำนวนสามเหลี่ยมที่ 7 มาจาก 1 + 2 + 3 + 4 + 5 + 6 + 7 = 28

จำนวนสามเหลี่ยม 10 จำนวนแรก จะเป็น:

1, 3, 6, 10, 15, 21, 28, 36, 45, 55, ...

ลองแยกตัวประกอบของจำนวนสามเหลี่ยม 7 ตัวแรก:

 1: 1
 3: 1,3
 6: 1,2,3,6
10: 1,2,5,10
15: 1,3,5,15
21: 1,3,7,21
28: 1,2,4,7,14,28

จะเห็นได้ว่า 28 เป็นจำนวนสามเหลี่ยมแรกที่มีตัวหารมากกว่าห้าตัว

จำนวนสามเหลี่ยม ตัวแรก ที่มีตัวหารมากกว่า 500 ตัวคืออะไร

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

@prin09
ชัดเจน: 2/3 สร้างสรรค์: 2/3 กระชับ 2/3 ความเร็ว 3/3
Comment: ชอบตรงที่ใช้ while loop + method ครับ และบรรทัดที่ 23-27 นี่เทคนิคดีครับ

@Rain
ชัดเจน: 2/3 สร้างสรรค์: 3/3 กระชับ 2/3 ความเร็ว 3/3
Comment: ไม่ค่อยชอบ while True เท่าไหร่ครับ มันทำให้เข้าใจยากว่า loop นั้นทำอะไร อยากให้ใส่ condition ที่ชัดเจนเข้าไปครับ สงสัยว่าบรรทัดที่ 24 - 25 ใช้ reduce แทนได้ไหม บรรทัดที่ 11 ไม่ต้องใส่ .keys() น่าจะดีกว่าครับ เพราะสามารถทำ dict lookup โดยตรงได้เลย ส่วนเทคนิคโดยรวมน่าสนใจดีครับ ชอบ

@Sss
ชัดเจน: 1/3 สร้างสรรค์: 2/3 กระชับ 1/3 ความเร็ว 3/3
Comment: โค้ดค่อนข้างชัดครับ ชอบที่ใช้ set {} ไม่ชอบ while True เลยครับ บรรทัดที่ 4 สามารถเขียนใหม่เป็น while i < num และตัดบรรทัดที่ 5-6 ออกไปน่าจะได้ครับ


Rain’s answer for #12

shogun’s answer: