Oban数字

2010年10月1日

版权所有FXer,许可证是来自WikiPedia的Gnu FDL奥本是苏格兰西海岸的一个小镇,有一个多岩石的港口酿酒厂,半成品愚蠢由一位资金不足、缺乏理智的银行家创办。我怀念1987年访问奥班的情景。我母亲在大街上的一家小商店买了一条围巾、一罐酥饼和一小杯当地威士忌(我不确定这可能是照片中的一家商店),因为晚餐用错了叉子而被女服务员斥责。奥本的数字与苏格兰无关,只是这个名字是令人愉快回忆的时刻。

数学世界描写oban数字是一个数字,当字母“o”用单词拼写出来时,其中的字母“o“将被“禁止”)将丢失。

你的任务是把所有的欧班号码列成一个完整的清单。如果你的语言提供了一个用单词拼写数字的函数,不要使用它,而是写你自己的。完成后,欢迎您阅读运行建议的解决方案,或在下面的评论中发布自己的解决方案或讨论练习。

页码:1 2

6对“奥巴马数字”的回应

  1. […]实践–奥本数字Remco Niemeijer在今天的编程实践练习中,我们的任务是打印所有奥本数字的列表([…]

  2. 雷姆科·尼梅耶

    My Haskell解决方案(请参阅http://bonsaicode.wordpress.com/2010/10/01/programming-praxis-oban-numbers网站/对于带有注释的版本):

    欧本::[国际]obans=过滤器(notElem'o'.spell)[1..999]其中拼写n|n<20=个!!n个|n<100=十!!div n 10++拼写(mod n 10)|真=拼写(div n 100)++“百”++拼写(mod n 100)ones=“”:words“一二三四五六七八\\九点一十一点一十三点十四\\十五、十六、十七、十八、十九“tens=“”:“”:words“二十、三十、四十五、六十\\七十八九十“tens=“”:“”:words“二十、三十、四十五、六十\\七十八九十“主::IO()main=mapM_打印obans
  3. 雷姆科·尼梅耶

    哎哟。意外复制了十位数的定义。以下是正确的版本:

    欧本::[国际]obans=过滤器(notElem'o'.spell)[1..999]其中拼写n|n<20=个!!n个|n<100=十!!div n 10++拼写(mod n 10)|真=拼写(div n 100)++“百”++拼写(mod n 100)ones=“”:words“一二三四五六七八\\九点一十一点一十三点十四\\十五、十六、十七、十八、十九“tens=“”:“”:words“二十、三十、四十五、六十\\七十八九十“主::IO()main=mapM_打印obans
  4. 山姆

    -我们真的不需要把它们拼出来,是吗?

    obanNumbers=过滤器(mkOban.show)[1..]

    mkOban::String->Bool
    mkOban[]=正确
    mkOban['1',_]=真
    mkOban('1':_)=错误
    mkOban('2':_)=错误
    mkOban('4':_)=错误
    mkOban(x:xs)=mkOpan xs

  5. 伊恩

    山姆,我认为你的版本不会打印11或12,这是一个数字。我不确定,因为我不读哈斯克尔的书。

    这是我的Python版本。结果与雷姆科的版本非常相似。

    定义int2str(数量):
    to_20=[“,‘一’,‘二’,‘三’,‘四’,‘五’,‘六’,‘七’,‘八’,
    “九”、“十”、“十一”、“十二”、“十三”、“十四”,
    “十五”、“十六”、“十七”、“十八”、“十九”]
    tens=[“,”,“二十”,“三十”,“四十”,“五十”,“六十”,“七十”,
    “八十”、“九十”]

    如果num<20:
    返回到20[num]
    如果num<100:
    return tens[num//10]+“”+to_20[num%10]
    其他:
    返回到_20[num//100]+“一百”+int2str(num%100)

    定义oban():
    如果int2str(i).find('o')==-1],则返回[i代表范围(1000)内的i

    打印oban()

  6. 康(Khanh)

    类似地,F中的mine#

    让rec为Oban(n:int)=让数字=[“”;“一”;“二”;“三”;“四”;“五”;“六”;“七”;“八”;“九”;“十”;“十一”;“十二”;“第十四”;“十四”;“十五”;“十六”;“十七”;“十八”;“十九”]让十位数=[“”;“”;”二十“;”三十“;”四十“;”五十“;”六十“;”七十“;”八十“;”九十“]如果n<20,则not(数字。[n].包含(“o”))elif n<100则not(tens.[n/10].包含(“o”)&&(isOban(n%10))elif n<1000则not(数字。[n/100]。包含(“o”)&&(isOban(n%100))否则为false设l=List.filter为Oban[1..1000]|>List.length

留下评论