ความท้าทายนี้ขึ้นอยู่กับวิดีโอนี้ ฉันแนะนำให้คุณดูมันก่อนที่จะลองความท้าทายนี้
ก่อนอื่นเรากำหนดฟังก์ชั่น ฟังก์ชันนี้ ( OEIS ) รับจำนวนเต็ม n เป็นอินพุตและเอาต์พุตจำนวนตัวอักษรในการแสดงภาษาอังกฤษของ n (โดยไม่มีช่องว่างหรือยัติภังค์) ตัวอย่างเช่น "สาม" มี 5 ตัวอักษรดังนั้น 3 แผนที่ถึง 5
ดังที่แสดงในวิดีโอที่เริ่มต้นด้วยหมายเลขใด ๆ ที่ทำซ้ำกระบวนการนี้ในที่สุดจะส่งผลให้มีสี่ซึ่งจะแมปกับตัวเองตลอดไป
นี่คือกราฟกำกับอย่างหยาบที่แสดงการโคจรของตัวเลขที่น้อยกว่า 16:
12 11
\|
15 2 6 1 10 14 13
\ \|/ / / /
7 3-/ 8--/
\| /
9 0 5--/
\ \|
\-4
ความท้าทายของคุณคือการกำหนดจำนวนขั้นตอนที่ต้องใช้จำนวน (หรือจำนวนครั้งที่ฟังก์ชันนี้ต้องนำไปใช้กับตัวเลข) ก่อนถึงสี่ (เช่นระดับบนกราฟที่กำกับด้วยภาพ)
สร้างตัวเลขภาษาอังกฤษ
นี่คือคำอธิบายสั้น ๆ ว่าควรสร้างคำภาษาอังกฤษสำหรับความท้าทายนี้อย่างไร:
หมายเลขหนึ่งถึงสิบเก้าคือ:
หนึ่ง, สอง, สาม, สี่, ห้า, หก, เจ็ด, แปด, เก้า, สิบเอ็ด, สิบสอง, สิบสาม, สิบสี่, สิบห้า, สิบห้า, สิบหก, สิบหก, สิบเจ็ด, สิบแปด, สิบเก้า
สำหรับตัวเลขที่มากกว่าสิบเก้ากระบวนการมีดังนี้:
หากจำนวนนั้นมีหลายร้อยที่ขึ้นต้นด้วยชื่อของตัวเลขในหลักร้อยและ "ร้อย"
เช่น
100 -> "onehundred"
หากส่วนที่เหลือมีค่าน้อยกว่ายี่สิบผนวกท้ายการเป็นตัวแทนภาษาอังกฤษของส่วนที่เหลือ
เช่น
714 -> "sevenhundredfourteen"
มิฉะนั้นถ้าหลักสิบไม่ใช่ศูนย์ผนวกการแสดงที่เหมาะสม:
2-> twenty
3-> thirty
4-> forty
5-> fifty
6-> sixty
7-> seventy
8-> eighty
9-> ninety
เช่น
470 -> "fourhundredseventy"
ในที่สุดหากมีตัวเลขหนึ่งตัวต่อท้ายการเป็นตัวแทน
เช่น
681 -> "sixhundredeightyone"
เงื่อนไขเพิ่มเติม
สำหรับตัวเลขที่มากกว่าหนึ่งร้อยคุณควรปล่อย "และ" ออกมาเมื่อนับจำนวนตัวอักษร ตัวอย่างเช่น 577 คือ "fivehundredseventyseven" ซึ่งมี 23 ตัวอักษร
โปรแกรมของคุณต้องยอมรับจำนวนเต็มทั้งหมดที่มากกว่า 0 และน้อยกว่า 1,000 เป็นอินพุตด้วยวิธีมาตรฐาน
โปรแกรมของคุณจะต้องส่งออกจำนวนขั้นตอนที่จำเป็นสำหรับวิธีการส่งออกมาตรฐาน
นี่คือ codegolf ดังนั้นคำตอบที่มีจำนวนไบต์น้อยที่สุดจะเป็นผู้ชนะ
กรณีทดสอบ
1 -> 3
4 -> 0
7 -> 2
23 -> 5
577 -> 6
600 -> 4