斐波那契素数

2010年10月29日

最近编程挑战要求您解决以下问题:

找出大于给定输入数的最小素数斐波那契数。将一加到斐波那契素数上,找到结果的因子,并返回因子之和。例如,如果输入的数字是10,那么大于10的最小fibonacci素数是13,13+1=14的因子是2和7,它们的和是9。

您的任务是编写一个函数来解决该问题,然后将您的函数应用于输入编号227000。完成后,欢迎您阅读运行建议的解决方案,或在下面的评论中发布自己的解决方案或讨论练习。

页:1 2

本福德定律

2010年10月26日

本福德定律由西蒙·纽科姆于1881年发现,弗兰克·本福德于1938年重新发现的,指出,对于许多以比例不变的方式出现的数字集,第一位是对数分布的,第一位1约有30%的时间,逐位递减,直到第一位9约有5%的时间。以数学方式表示,前导数字∈ {1 …b条-1} 对于以基数表示的数字b条将有可能发生=日志b条(1 +1/)。因此,以10为基数,第一位数字是数字1、2、…9的概率为30.1%、17.6%、12.5%、9.7%、7.9%、6.7%、5.8%、5.1%和4.6%。

本福德定律是反直觉的,但在自然界中经常出现。它也经常发生用于审计列出过去一年中簿记员写的支票金额;如果超过5%是以数字8或9开头的,那么簿记员很可能是盗用公款的人。更重要的是,一年前有争议的伊朗选举的选区结果显示第一位数异常,建议投票舞弊.

最近,克里希纳穆提发表了编程挑战在Racket邮件列表上,要求最小/最紧/最干净/最好的代码来计算数字列表的第一位数百分比;他还要求读者将该函数应用于逗号分隔的值文件中的数据。他没有透露消息来源,但提到他对米塞索塔湖沿岸地区(以英亩计)感兴趣;示例数据显示在下一页.

您的第一个任务是编写一个函数,计算数字列表的第一位数百分比。第二个任务是计算下一页数据的第一位数百分比。完成后,欢迎您阅读运行建议的解决方案,或在下面的评论中发布自己的解决方案或讨论练习。

页:1 2

以前的练习我们开发了四个功能,用于从各种类型的文本文件数据库读取记录。在今天的练习中,我们开发了四个用于处理这些记录的函数,包括map、fold、filter和for-each。我们还在上一次练习,这给了我们第五个处理函数。

所有四个函数都以读者从输入中获取下一条记录的函数;我们在上一个练习中编写了一些阅读器函数,通常为特定的输入格式编写其他函数。Map接受读取器函数和转换器函数,并将转换器应用于每个输入记录,以与输入相同的顺序返回转换值的列表。Fold采用一个读取器函数、一个组合函数和一个基值,并将组合器依次应用于每个基值和输入中的下一条记录,当输入耗尽时返回最终的基值。Filter是一个组合子;它接受一个reader函数和一个谓词,并返回一个新的reader函数,该函数只传递谓词为true的那些输入记录。For-each采用一个读取器函数和另一个过程,并依次将该过程应用于每个输入记录,仅用于其副作用,直到输入耗尽;它不返回任何结果。

您的任务是编写处理文本文件数据库记录的四个函数。完成后,欢迎您阅读运行建议的解决方案,或在下面的评论中发布自己的解决方案或讨论练习。

页:1 2

有很多数据存储在由换行符分隔的记录组成的纯ascii文本文件中,每个记录由多个字段组成,有一个函数库来处理这些数据很有用。本练习介绍一些读取数据的函数;下一个练习将研究处理数据的一些函数。

我们将考虑四种常见类型的文本文件数据库。具有固定长度数据字段的文件具有固定字符数的记录,每个记录都包含在固定位置上类似的字段;数据前面可以是固定长度的报头。具有字符分隔字段的文件具有可变长度的记录,每个记录的字段由一个单字符分隔符分隔;分隔符通常是制表符或竖线。一种特殊类型的可变长度分隔的文本数据库称为逗号分隔值,其中分隔符是逗号,字段可能由双引号字符包围,因此引号字段中的逗号失去了作为字段分隔符的意义;在这种情况下,文字双引号字符可能会在引用字段中连续出现两个双引号字符。我们将考虑的第四种类型是名称值记录,其中每个记录由多个字段组成,每行一个字段,由空行分隔,每个字段由类型名称和由分隔符分隔的值组成;这种格式通常用于具有许多可选字段的数据库,例如书目数据库。

我们希望每个文件格式的读取器函数在每次调用时都返回一条记录,或者在输入耗尽时返回文件结束标记,并将文件指针前进到下一条记录的开头。返回值应该是一个列表或数组(以方便的为准),其中包含每个元素中一个字段的值,但名称值记录除外,该记录应该返回名称/值对的列表。

不同的操作系统具有不同的发送线路末端信号的方法。为了最大限度地实现可移植性,函数应该接受回车符、换行符或按任意顺序同时使用这两个字符表示的行的末尾。您应该准备接受任何类型的线标记,因为数据可能来自任何来源;例如,运行带有CRLF行标记的MS Windows的计算机可能会从带有空LF作为行标记的Linux计算机中获取数据。您还应该接受文件中的最后一行,无论它是否有尾随行标记。

您的任务是编写函数,从上述四种文件类型中的每一种中读取一条记录。完成后,欢迎您阅读运行建议的解决方案,或者发布你自己的解决方案,或者在下面的评论中讨论这个练习。

页:1 2

格雷普林发布了编程挑战最近,这要求程序员解决三个问题;完成后,格雷普林发出邀请,向他们发送简历。第一个问题要求程序员在以下1169个字符的字符串中找到最长的回文:


通过本次研究,获得了四分和七年的地面工作者
自由概念中的一个国家并致力于此
只要所有人都被创造成平等的人
t测试是否有午睡或运动的概念和药物
ated can longendure Weareqmeto再次与沙特瓦尔作战
将该字段的一部分作为最终测试位置
无论是谁给了他们国家可能活着的生命
以太坊和我们应该做的事情
我们不能奉献我们不能放弃这片土地
挣扎着的埃尔曼生前和死后都已奉献给了他们
我们贫穷的前进道路或减损世界的财富
记住了我们在这里说的话,但频道忘记了我在这里说了什么
tis用于将其专用于未完工工程
谁在这里有这样的进步
对于之前已被遗传到离境的婴儿
从这些应得的加薪中,我们增加了对wh的加薪
ichthey保存了我们高度重视的进化的最后一个完整测量值
解决这些死亡不应在这个国家的任何情况下死亡
上帝将享有自由和人民政府
先于其他人的人不会从地球上消失

您的任务是编写一个函数,查找字符串中最长的回文,并将其应用于上述字符串。当你完成后,欢迎你阅读运行建议的解决方案,或在下面的评论中发布自己的解决方案或讨论练习。

页:1 2

旋转阵列

2010年10月12日

今天的练习很简单但很棘手:编写一个函数来旋转数组的元素。该函数有两个参数:要旋转的数组和要旋转的元素数,其中正计数向左旋转,负计数向右旋转。例如,给定数组[1 2 3 4 5 6],向左旋转2将得到[3 4 5 6 1 2],再向右旋转2将恢复原始数组。

你应该确保正确处理边缘案例。如果计数为零或数组的长度,则数组应保持不变。如果计数大于数组的长度,您仍然应该做正确的事情;例如,在上面给出的数组上旋转8得到[3 4 5 6 12],与旋转2相同。

您的任务是编写上述旋转函数。完成后,欢迎您阅读运行建议的解决方案,或在下面的评论中发布自己的解决方案或讨论练习。

页:1 2

泽勒一致性

2010年10月8日

Zeller一致性是一种简单的数学方法,用于确定给定日期的星期几。

19世纪80年代,德国数学家克里斯蒂安·泽勒(Christian Zeller)注意到,如果你把一年从3月计算到2月,每个月的累计天数几乎形成一条直线;这是可行的,因为通常会扰乱直线的二月被移到了末尾。他算出了公式⌊(13−1)/5⌋给出每月月初移动的工作日数,其中是月份数。

然后很容易计算任何给定日期的星期几:加上月份的日期、自3月以来月份数的偏移量、每年的偏移量以及闰年和闰世纪的额外偏移量(记住一月和二月的日期减去一年),取整个mod 7。自己计算算术很有趣,但如果你不想花时间,整个公式都会显示在解中。

您的任务是编写一个函数,该函数使用Zeller同余来计算任意给定日期的星期几。完成后,欢迎您阅读运行建议的解决方案,或在下面的评论中发布自己的解决方案或讨论练习。

页:1 2

帖子在Usenet上,数学家、统计学家、计算机科学家、华盛顿州立大学和佛罗里达州立大学教授George Marsaglia描述了一系列九个高质量的32位随机数生成器;参考资料页描述了各种生成器及其在各种情况下的优雅使用。它们在这里是C:

#定义znew(z=36969*(z&65535)+(z>>16))
#定义wnew(w=18000*(w&65535)+(w>>16))
#定义MWC((znew<<16)+wnew)
#定义SHR3(jsr^=(jsr<<17),jsr^=(jsr>>13),jsr ^=(jsr<<5))
#定义CONG(jcong=69069*jcong+1234567)
#定义FIB((b=a+b),(a=b-a))
#定义KISS((MWC^CONG)+SHR3)
#定义LFIB4(c++,t[c]=t[c]+t[UC(c+58)]+t[UC(c+119)]+t[UC(c+178)])
#定义SWB(c++,bro=(x<y),t[c]=(x=t[UC(c+34)])-(y=t[UC(c+19)]+bro))
#定义UNI(KISS*2.328306e-10)
#定义VNI((长)KISS)*4.656613e-10
#定义UC(无符号字符)/*转换操作*/
typedef unsigned long UL;

/*全局静态变量:*/
静态UL z=362436069,w=521288629,jsr=123456789,jcong=380116160;
静态UL a=224466889,b=7584631,t[256],x=0,y=0,bro;
静态无符号字符c=0;

/*使用KISS设置表格的步骤示例:*/
可设置无效(UL i1、UL i2、UL i 3、UL ii 4、UL iii、UL iv)
{整数i;z=i1;w=i2;jsr=i3;jcong=i4;a=i5;b=i6;
对于(i=0;i<256;i=i+1)t[i]=KISS;}

就我个人而言,我认为代码在外观上有点难看,但在内部绝对漂亮,非常优雅。Marsaglia还提供了一个测试套件,它应该在连续的行上打印七个零:

#包括<stdio.h>
int main(无效){
整数i;UL k;
可设置(123456543522112345998365195746118);

对于(i=1;i<100001;i++){k=LFIB4;}printf(“%u\n”,k-1064612766U);
对于(i=1;i<1000001;i++){k=SWB;}打印f(“%u\n”,k-627749721U);
对于(i=1;i<1000001;i++){k=KISS;}printf(“%u\n”,k-1372460312U);
对于(i=1;i<1000001;i++){k=CONG;}printf(“%u\n”,k-1529210297U);
对于(i=1;i<1000001;i++){k=SHR3;}打印f(“%u\n”,k-2642725982U);
对于(i=1;i<1000001;i++){k=MWC;}printf(“%u\n”,k-904977562U);
对于(i=1;i<1000001;i++){k=FIB;}打印f(“%u\n”,k-3519793928U);}

你的任务是把这九个随机数生成器翻译成你最喜欢的语言。完成后,欢迎您阅读运行建议的解决方案,或在下面的评论中发布自己的解决方案或讨论练习。

页:1 2

Oban数字

2010年10月1日

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

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

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

页:1 2