系统会为您提供6个数字:5个数字[0-9]和一个目标数字。您的目标是将运算符散布在数字之间,以尽可能接近目标。你必须使用每个数字恰好一次,可以使用下面的运营商 多达你想要的时间:+ - * / () ^ sqrt sin cos tan
。例如,如果给出的话,8 2 4 7 2 65
我可以输出82-(2*7)-4
。评估结果为64,因此我的得分是1,因为我离目标1分。注意:不能在数字之间放置小数点。
我正在使用此StackOverflow答案中的代码来评估数学表达式。在该问题的底部,可以使用一些程序进行测试。
链接功能(更新!)
@mdahmoune揭示了这一挑战的新高度。因此,我要添加一个新功能:链接一元函数。这适用于sin,cos,tan和sqrt。现在sin(sin(sin(sin(10))))
您可以写作,而不是写作sin_4(10)
。在评估器中试用!
输入值
200个行分隔的5位数字的测试用例和一个目标数字,以空格分隔。您可以使用问题底部的程序来制作示例测试用例,但是我将拥有自己的测试用例以进行官方评分。测试用例分为40个测试的5个部分,目标数量的范围如下:
- 第1节:[0,1](至5个小数点)
- 第2节:[0,10](至4个小数点)
- 第3节:[0,1000](至3个小数点)
- 第4节:[0,10 6 ](至1个小数点)
- 第5节:[0,10 9 ](至0个小数点)
输出量
200行分隔的数学表达式。例如,如果测试用例为5 6 7 8 9 25.807
,则可能的输出为78-59+6
计分
每个回合的目标是比其他竞争计划更接近目标人数。我将使用Mario Kart 8得分,即:。如果多个答案获得相同的准确分数,则将分数平均分配,四舍五入到最接近的整数。例如,如果并列第5-8位的程序,则它们各自在该回合中获得(8 + 7 + 6 + 5)/ 4 = 6.5 => 7分。在200回合结束时,得分最高的程序将获胜。如果两个程序最后的点数相同,则决胜局是指运行速度更快的程序。1st: 15 2nd: 12 3rd: 10 4th: 9 5th: 8 6th: 7 7th: 6 8th: 5 9th: 4 10th: 3 11th: 2 12th: 1 13th+: 0
规则
- 您只能使用Mac上通常预先安装的一种语言,例如C,C ++,Java,PhP,Perl,Python(2或3),Ruby和Swift。如果您要与较小的下载量一起使用的语言要与编译器/解释器一起使用,则可以添加它。您还可以将语言与在线解释器一起使用,但是运行速度不会很快。
- 在答案中指定是否要以度或弧度计算触发函数。
- 您的程序必须在Mac上60秒钟内将其解决方案输出到所有200个测试用例(文件或STDOUT)。
- 随机性必须是种子。
- 您所有测试用例的总输出不能超过1 MB。
- 如果您改进了解决方案并希望获得评分,请在答案的顶部以粗体显示“ 重新评分 ”。
程式
(如果需要弧度,请将“ deg”参数更改为“ rad”)
- 测试评估师
- 为测试用例对程序的输出评分
- 生成测试用例:
document.getElementById("but").onclick = gen;
var checks = document.getElementById("checks");
for(var i = 1;i<=6;i++) {
var val = i<6 ? i : "All";
var l = document.createElement("label");
l.for = "check" + val;
l.innerText = " "+val+" ";
checks.appendChild(l);
var check = document.createElement("input");
check.type = "checkBox";
check.id = "check"+val;
if(val == "All") {
check.onchange = function() {
if(this.checked == true) {
for(var i = 0;i<5;i++) {
this.parentNode.elements[i].checked = true;
}
}
};
}
else {
check.onchange = function() {
document.getElementById("checkAll").checked = false;
}
}
checks.appendChild(check);
}
function gen() {
var tests = [];
var boxes = checks.elements;
if(boxes[0].checked)genTests(tests,1,5,40);
if(boxes[1].checked)genTests(tests,10,4,40);
if(boxes[2].checked)genTests(tests,1000,3,40);
if(boxes[3].checked)genTests(tests,1e6,1,40);
if(boxes[4].checked)genTests(tests,1e9,0,40);
document.getElementById("box").value = tests.join("\n");
}
function genTests(testArray,tMax,tDec,n) {
for(var i = 0;i<n;i++) {
testArray.push(genNums(tMax,tDec).join(" "));
}
}
function genNums(tMax,tDec) {
var nums = genDigits();
nums.push(genTarget(tMax,tDec));
return nums;
}
function genTarget(tMax,tDec) {
return genRand(tMax,tDec);
}
function genRand(limit,decimals) {
var r = Math.random()*limit;
return r.toFixed(decimals);
}
function genDigits() {
var digits = [];
for(var i = 0;i<5;i++) {
digits.push(Math.floor(Math.random()*10));
}
return digits;
}
textarea {
font-size: 14pt;
font-family: "Courier New", "Lucida Console", monospace;
}
div {
text-align: center;
}
<div>
<label for="checks">Sections: </label><form id="checks"></form>
<input type="button" id="but" value="Generate Test Cases" /><br/><textarea id="box" cols=20 rows=15></textarea>
</div>
排行榜
部分得分(获胜次数):
- [0-1] user202729:40,mdahmoune:0
- [0-10] user202729:40,mdahmoune:0
- [0-1000] user202729:39,mdahmoune:1
- [0-10 6 ] user202729:33,mdahmoune:7
- [0-10 9 ] user202729:0, mdahmoune:40
cos(0)/sin(0^0)/sin(0^0)
。