บางครั้งเมื่อฉันพยายามที่จะแยกแยะตัวเลขใด ๆ ที่ปรากฏขึ้นต่อหน้าฉันอย่างเฉยๆหลังจากนั้นไม่นานฉันก็รู้ว่ามันง่ายกว่าที่ฉันคิด ใช้2156
ตัวอย่างเช่น: ในที่สุดมันก็เกิดขึ้นกับผมว่าทั้งสอง21
และ56
มีหลายรายการ7
และอื่น ๆ อย่างแน่นอน2156 = 21 x 100 + 56
นอกจากนี้ยังมีหลาย7
นอกจากนี้ยังมีหลาย
งานของคุณคือการเขียนโค้ดที่ระบุตัวเลขที่ง่ายกว่าในการแยกตัวประกอบเนื่องจากความบังเอิญของการเรียงลำดับนี้
อย่างแม่นยำมากขึ้น:
เขียนโปรแกรมหรือฟังก์ชั่นที่ใช้เป็นจำนวนเต็มบวกn
เป็น input และผลตอบแทนที่คุ้มค่า truthy ถ้ามีอยู่ตัวหารd
(มากกว่า1
) ดังกล่าวว่าn
สามารถสับในสองให้ผลผลิตจำนวนเต็มบวกซึ่งแต่ละมีหลายd
; ส่งคืนค่าเท็จถ้าไม่
- "สับเป็นสองชิ้น" หมายถึงสิ่งที่คุณคิด: การเป็นตัวแทนพื้นฐาน 10 ของการ
n
แบ่งพาร์ติชันในบางจุดลงในครึ่งหน้าและครึ่งหลังเพื่อให้ได้จำนวนเต็ม 10 ฐานอีก 10 ตัว ไม่เป็นไรถ้าจำนวนเต็มตัวที่สองมีศูนย์นำหน้า (แต่โปรดทราบว่าต้องเป็นจำนวนเต็มบวกดังนั้นการแบ่งออก1230
เป็น123
และ0
ไม่ถูกต้อง) - ค่าความจริงและเท็จสามารถขึ้นอยู่กับอินพุต ตัวอย่างเช่นหากจำนวนเต็มที่ไม่ใช่ศูนย์ใด ๆ เป็นจริงในภาษาที่คุณเลือกคุณสามารถส่งคืนตัวหาร
d
หรือหนึ่งใน "ชิ้นส่วน" ของn
(หรือn
ตัวเองสำหรับเรื่องนั้น) - ตัวอย่างเช่นเลขคู่ใด ๆ ที่มีตัวเลขอย่างน้อยสองหลักในชุด
{2, 4, 6, 8}
จะให้ค่าความจริง: เพียงแค่แยกมันหลังจากเลขคู่ตัวแรก ตัวอย่างเช่นจำนวนเฉพาะใด ๆn
จะให้ค่าเท็จเช่นเดียวกับตัวเลขหนึ่งหลักใด ๆ - โปรดทราบว่ามันเพียงพอที่จะพิจารณาตัวคั่น
d
หลัก - คุณอาจสันนิษฐานว่าอินพุตนั้นถูกต้อง (นั่นคือจำนวนเต็มบวก)
นี่คือโค้ดกอล์ฟดังนั้นโค้ดที่สั้นที่สุดในหน่วยไบต์ชนะ แต่เรายินดีรับการแก้ปัญหาในทุกภาษาดังนั้นเราจึงสามารถคัดสรรรหัสที่สั้นที่สุดในแต่ละภาษาไม่ใช่เฉพาะรหัสที่สั้นที่สุดโดยรวม
กรณีทดสอบ
(คุณเพียงแค่ส่งออกค่าความจริงหรือค่าเท็จเท่านั้นคำอธิบายประกอบด้านล่างเป็นเพียงวิธีอธิบาย) อินพุตบางตัวที่ให้ค่าความจริงคือ:
39 (3 divides both 3 and 9)
64 (2 divides both 6 and 4)
497 (7 divides both 49 and 7)
990 (splitting into 99 and 0 is invalid; but 9 divides both 9 and 90)
2233 (11 divides both 22 and 33)
9156 (3 divides both 9 and 156; or, 7 divides both 91 and 56)
11791 (13 divides both 117 and 91)
91015 (5 divides both 910 and 15)
1912496621 (23 divides both 1912496 and 621; some splittings are multiples of 7 as well)
9372679892 (2473 divides both 937267 and 9892; some splittings are multiples of 2 as well)
อินพุตบางตัวที่ให้ค่าเท็จคือ:
52
61
130 (note that 13 and 0 is not a valid splitting)
691
899
2397
9029
26315
77300 (neither 7730 and 0 nor 773 and 00 are valid splittings)
2242593803
¹ใช่ฉันทำสิ่งนี้จริงๆ