ปัญหา
ให้อาร์เรย์ของหลัก (digits) สร้างตัวเลขที่เล็กที่สุดได้ แล้วตรวจสอบว่าตัวเลขที่รวมจากหลักแรกและหลักสุดท้าย (ทั้งสองลำดับ) เป็นจำนวนเฉพาะหรือไม่
ตัวอย่าง
digits = [5,2,1,7] → ตัวเลขน้อยที่สุด = 1257
หลักแรก+หลัง = 17 (เฉพาะ), หลัง+แรก = 71 (เฉพาะ) → คืนค่า (1257, 17, 71)
แนวคิดการแก้ปัญหา
- นับความถี่ของแต่ละหลัก (0-9)
- สร้างตัวเลขโดยเรียงจาก 0 ถึง 9
- สร้างตัวเลข 2 หลักจาก first+last และ last+first
- ตรวจสอบความเป็นเฉพาะของทั้งคู่
โค้ดตัวอย่าง
from collections import Counter
def is_prime(num):
if num < 2:
return False
for i in range(2, int(num**0.5)+1):
if num % i == 0:
return False
return True
def solve(arr):
freq = Counter(arr)
number = ''.join(str(d) * freq[d] for d in range(10))
first_last = int(number[0] + number[-1])
last_first = int(number[-1] + number[0])
prime_fl = is_prime(first_last)
prime_lf = is_prime(last_first)
if prime_fl and prime_lf:
return int(number), first_last, last_first
elif prime_fl:
return int(number), first_last
elif prime_lf:
return int(number), last_first
return False
print(solve([5, 2, 1, 7])) # (1257, 17, 71)
อินพุต / เอาต์พุต
Input: [5,2,1,7] Output: (1257, 17, 71)