เมื่อฉันยังเป็นเด็กและต้องการนับเงินดอลลาร์ในการออมชีวิตของฉันฉันจะนับดัง ๆ :
หนึ่งสองสามสี่ห้าหกเจ็ดแปดเก้าสิบ;
สิบเอ็ด, สิบสาม, สิบสาม, สิบสี่, สิบห้า, สิบหก, สิบเจ็ด, สิบแปด, สิบแปด, สิบเก้า, ยี่สิบ;
ยี่สิบเอ็ด, ยี่สิบสอง, ยี่สิบสาม, ยี่สิบสี่, ยี่สิบห้า ...
ในที่สุดฉันก็เบื่อที่จะออกเสียงแต่ละพยางค์เหล่านี้ ด้วยความคิดทางคณิตศาสตร์ฉันได้สร้างวิธีการนับที่มีประสิทธิภาพมากขึ้น:
หนึ่งสองสามสี่ห้าหกเจ็ดแปดเก้าสิบ;
หนึ่ง, สอง, สาม, สี่, ห้า, หก, เจ็ด, แปด, เก้า, ยี่สิบ;
หนึ่ง, สอง, สาม, สี่, ห้า, หก, เจ็ด, แปด, เก้า, สามสิบ ...
อย่างที่คุณเห็นฉันจะออกเสียงเฉพาะตัวเลขที่เปลี่ยนไปจากตัวเลขก่อนหน้า นี่เป็นข้อได้เปรียบที่เพิ่มเติมว่ามีความซ้ำซ้อนมากกว่าชื่อภาษาอังกฤษสำหรับตัวเลขดังนั้นจึงต้องใช้พลังสมองน้อยในการคำนวณ
ท้าทาย
เขียนโปรแกรม / ฟังก์ชั่นซึ่งใช้จำนวนเต็มบวกและเอาท์พุท / คืนค่าวิธีที่ฉันจะนับ: นั่นคือหลักที่ไม่เป็นศูนย์ที่เหมาะสมที่สุดและเลขศูนย์ทั้งหมดต่อท้าย
ตัวอย่าง
1 1
2 2
10 10
11 1
29 9
30 30
99 9
100 100
119 9
120 20
200 200
409 9
1020 20
รายชื่อกรณีทดสอบทั้งหมดไม่จำเป็น นี่คือA274206บน OEIS
กฎระเบียบ
- รายการของคุณจะต้องทำงานในเชิงบวกสำหรับจำนวนเต็มบวกทั้งหมดโดยไม่สนใจปัญหาความแม่นยำและหน่วยความจำ
- อินพุตและเอาต์พุตต้องเป็นทศนิยม
- คุณอาจเลือกที่จะรับอินพุตและ / หรือเอาท์พุทเป็นตัวเลขสตริงหรืออาร์เรย์ของตัวเลข
- อินพุตรับประกันว่าจะเป็นจำนวนเต็มบวก รายการของคุณสามารถทำอะไรก็ได้เพื่อการป้อนข้อมูลที่ไม่ถูกต้อง
นี่คือโค้ดกอล์ฟดังนั้นโค้ดที่สั้นที่สุดในหน่วยไบต์ชนะ
[1,0,2,0]
->[2,0]
สำหรับกรณีทดสอบครั้งสุดท้าย (ฉันไม่ชัดเจนในวลี "อาร์เรย์รายการเดียว")