此挑战基于此视频。我建议您在尝试此挑战之前先观看一下。
首先我们定义一个函数。此函数(OEIS)以整数n作为输入,并输出n的英语表示形式的字母数(不带空格或连字符)。例如,“三个”有5个字母,因此3个映射到5。
如视频中所示(以任何数字开头),重复此过程最终将得到4,该数字将永远映射到其自身。
这是一个粗略的有向图,显示了小于16的数字的轨道。
12 11
\|
15 2 6 1 10 14 13
\ \|/ / / /
7 3-/ 8--/
\| /
9 0 5--/
\ \|
\-4
您面临的挑战是确定一个数字将要达到的四个步骤(即,有向图上的水平),然后确定一个数字将要执行的步骤数(或此功能必须应用于一个数字的次数)。
形成英文数字
以下是有关如何应对这一挑战的英文单词的简要说明:
数字1到19是:
一,二,三,四,五,六,七,八,九,十,十一,十二,十三,十四,十五,十六,十七,十八,十九
对于大于19的数字,过程如下:
如果数字有百位,则以百位中的数字名称开头并“百位”。
例如
100 -> "onehundred"
如果余数少于20,则附加余数的英语表示。
例如
714 -> "sevenhundredfourteen"
否则,如果十位数不为零,请附加适当的表示形式:
2-> twenty
3-> thirty
4-> forty
5-> fifty
6-> sixty
7-> seventy
8-> eighty
9-> ninety
例如
470 -> "fourhundredseventy"
最后,如果有一个数字,则附加其表示
例如
681 -> "sixhundredeightyone"
进一步规定
对于大于100的数字,在计算字母数时应省略“和”。例如577是具有23个字母的“五百七十七”。
您的程序必须接受通过标准方法输入的所有大于0且小于1,000的整数。
您的程序必须输出标准输出方法所需的步骤数。
这是代码高尔夫,因此以最少的字节数获胜的解决方案。
测试用例
1 -> 3
4 -> 0
7 -> 2
23 -> 5
577 -> 6
600 -> 4