JavaScript脚本
这个答案高度基于Python答案,感谢@xnor的设置。
您的提交应该是一个程序或函数。它应该打印输出或返回输出。这些示例提交计算阶乘的:
常规I/O
//浏览器程序,输入带提示,输出带警告n=提示();对于(p=i=1;i<=n;i++)p*=i;警报(p)//Node.js程序,从process.argv获取输入并使用console.log输出n=进程.argv[2];对于(p=i=1;i<=n;i++)p*=i;控制台.log(p)//使用console.log输出的函数(在浏览器中也可以使用alert)函数(n){用于(p=i=1;i<=n;i++)p*=i;控制台.log(p)}//返回值的函数函数(n){for(p=i=1;i<=n;i++)p*=i;返回p}//返回的函数,命名为使用递归调用f=函数(n){返回n?n*f(n-1):1}函数f(n){返回n?n*f(n-1):1}//ES6箭头功能n=>{对于(p=i=1;i<=n;i++)p*=i;返回p}//ES6箭头函数,命名为使用递归调用f=n=>n?n*f(n-1):1
您可能不希望输入预先写入变量。
//无效,应输入n对于(p=i=1;i<=n;i++)p*=i;警报(p)
也不能仅通过将结果保存到变量来输出。
//无效,将结果保存到pn=提示();对于(p=i=1;i<=n;i++)p*=i
输出也不能像交互式shell或浏览器控制台中那样只是表达式的值。
//无效,计算结果为结果,而不是输出或返回数组(+prompt()).fill().reduce(p=>p*i++,i=1)
输入
我们对输入格式很开放。例如,如果一个挑战要求获取一个数字列表,那么您可能会得到一个JavaScript数组,如[1,2,3]
,不像"1 2 3"
。因此,函数可以
函数(a){return a.length}
而不是
函数{returns s.split(“”).length}
如果您正在使用箭头函数并有多个输入,可以使用咖喱:
//非电流箭头函数(a,b)=>a+10*b//Curried箭头功能a=>b=>a+10*b
curried函数可以通过对每个参数调用一次来使用,例如。f(1)(2)
而不是f(1,2)
.
版本
如果使用最新版本的ECMAScript(ES6:箭头功能,扩散算子,模板文字,等。; 欧洲标准7:指数算子; 等等)、在报头中包括ECMAScript版本。最佳做法是使用以下标题JavaScript(ES6),JavaScript(ES7)等。对于未来的ECMAScript版本,您可能希望使用年份名称,例如。JavaScript(ES2018),因为ECMAScript已切换到此命名系统。
据您所知,如果您的代码仅在特定环境或浏览器中工作,请将其包含在标题中,例如。JavaScript(Firefox 44)。如果您提交一个Node程序,您可能希望完全跳过“JavaScript”,只需使用节点.js.
Truthy/Falsey公司
一些挑战要求输出是真实的还是虚假的,这取决于布尔值(x)
(或同等!!x
). 仅限假
,0
,未定义
,NaN公司
,无效的
,而空字符串是虚假的,其余字符串是真实的。
关于函数的更多信息
函数提交可能包括函数外部的帮助器代码,例如
S=字符串;C=S.from字符代码l=>。。。
在ES6及以上版本中,函数可以使用额外的可选参数。例如,此阶乘函数提交需要单个数字,但使用了可选输入我
帮助递归:
f=(n,i=1)=>i>n?1:i*f(n,i+1)
但是,您可能不需要使用特定的额外参数来调用函数,例如,对于
f=(n,i)=>i>n?1:i*f(n,i+1)