Project Euler框架.

http://projecteuler.net

 

一个朋友推荐给我的,最近拿来打发时间(同时再次感到我那杯具的鸟语和

数学是多么的不够用).做这种小东西我惯用js+windows script.但每次

在cmd下敲cscript balabala....之类的是在烦不胜烦.加之纯js要代码重

用只有copy & paste.弄个hta/html之类的又太麻烦.所以就做了这么个

小玩意.

 

euler.wsf:

<job> <mce:script language=JScript src="common.js" mce_src="common.js"></mce:script> <mce:script language=JScript><!-- function print(m) { WScript.stdOut.write(m); } function println(m) { WScript.Echo (m); } var openFile; (function () { var fso = new ActiveXObject("Scripting.Filesystemobject"); openFile = function (path){return fso.opentextfile(path);} var file = fso.opentextfile(WScript.Arguments.unnamed.item(0)); var script = file.readall(); file.close(); eval (script); })(); // --></mce:script> </job> 

逻辑很简单,读取一个js文本,然后eval,提供了两条输出函数print和println.

这样一旦脚本性能不足,可以很轻松的移到js.net.而不用处理那该死的WScript.

 

注意有个common.js,这里相当于include.常用的函数比如遍历字符串之类的

可以写在这里.

 

common.js

//求最小质数因子.如果找不到则返回1. //命名不准确啥的都是浮云= = function getminfactor (n){ for (var i = 2,r = n/i; i<= r;r = n/++i) if (n % i == 0) return i; return 1; } //遍历字串. String.prototype.foreach = function (func) { for (var i=0;i<this.length;++i) if (func(this.charAt(i),i)==false) break; } function isprime (n){return getminfactor(n)==1;} function pow2(n){ return n*n; } function lcm (a,b) { var g = a>b?a:b; var l = a>b?b:a; for (var i = 1;i <= l;++i) { var ret = g * i; if (ret % l == 0) return ret; } } //search all str in data,and call the callback function function findall (data,str,func){ for (var start = data.indexOf(str,0); start != -1; start = data.indexOf(str,++start)) { func (start); } } //quicksort 懒得写直接vc.. var quickSort = function(array) { var arr = array; var i = 0; var j = arr.length-1; var qSort = function(i, j){ if( i == j ){ return }// 当前组仅有一个元素则结束 var ai = arr[i];//取出的主元 var ii = i;//记录i的开始位置 var jj = j;//记录J的开始位置 while( i < j ){ // j <------- if( arr[j] >= ai){ j--; }else{ arr[i] = arr[j]; i++; while( i < j){ if(arr[i] > ai){ arr[j] = arr[i]; break; }else{ i++; } } var k = arr[i]; } } if( ii == i){ qSort(++i, jj); return ; } arr[i] = ai; qSort(ii, i);//第一组排序 qSort(j, jj);//第二组排序 //--- } qSort(i,j); return array; } 

最后用一个批处理负责执行:

eu.cmd

@cscript euler.wsf %* 

 

然后写个简单的题目测试一下:

Problem 1

 

 

If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. The sum of these multiples is 23.

Find the sum of all the multiples of 3 or 5 below 1000.

 

 

求小于1000且可被3或5整除的自然数之和

001.js

 

var sum = 0; for (var i = 3;i< 1000;++i) if (((i%3)==0 || (i%5)==0)) sum += i; print (sum); 

 

输入eu 001.js后回车得到结果233168

 

你可能感兴趣的:(框架,windows,function,Path,callback,Numbers)