คุณได้รับหมายเลข 6: 5 หลัก [0-9] และหมายเลขเป้าหมาย เป้าหมายของคุณคือการกระจายโอเปอเรเตอร์ระหว่างตัวเลขเพื่อให้ใกล้เคียงกับเป้าหมาย คุณต้องใช้ตัวเลขแต่ละตัวเพียงครั้งเดียวและสามารถใช้ตัวดำเนินการต่อไปนี้ได้ หลายครั้งตามที่คุณต้องการ: + - * / () ^ sqrt sin cos tan
. ตัวอย่างเช่นถ้าฉันให้ฉันสามารถส่งออก8 2 4 7 2 65
82-(2*7)-4
สิ่งนี้ประเมินเป็น 64 จึงให้คะแนนกับฉัน 1 เนื่องจากฉันอยู่ห่างจากเป้าหมาย 1 ข้อ หมายเหตุ:คุณไม่สามารถใส่จุดทศนิยมระหว่างตัวเลขได้
ฉันกำลังใช้รหัสจากคำตอบ StackOverflowนี้เพื่อประเมินนิพจน์ทางคณิตศาสตร์ ที่ด้านล่างของคำถามนี้มีโปรแกรมที่คุณสามารถใช้ทดสอบได้
ฟังก์ชั่นผูกมัด (อัพเดต!)
@mdahmoune ได้เปิดเผยระดับใหม่ของความซับซ้อนในการท้าทายนี้ เช่นนี้ฉันกำลังเพิ่มคุณสมบัติใหม่: การผูกมัดฟังก์ชั่นยูนารี สิ่งนี้ใช้ได้กับบาป, cos, สีแทนและ sqrt ตอนนี้แทนการเขียนคุณสามารถเขียนsin(sin(sin(sin(10))))
sin_4(10)
ลองใช้ในผู้ประเมิน!
อินพุต
กรณีทดสอบ 200 บรรทัดที่คั่นด้วยตัวเลข 5 หลักและหมายเลขเป้าหมายที่คั่นด้วยช่องว่าง คุณสามารถใช้โปรแกรมที่ด้านล่างของคำถามเพื่อสร้างกรณีทดสอบตัวอย่าง แต่ฉันจะมีกรณีทดสอบของตัวเองสำหรับการให้คะแนนอย่างเป็นทางการ กรณีทดสอบแบ่งออกเป็น 5 ส่วนจาก 40 การทดสอบพร้อมช่วงต่อไปนี้สำหรับหมายเลขเป้าหมาย:
- ส่วนที่ 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 การให้คะแนนซึ่งเป็น: หากมีหลายคำตอบที่ได้คะแนนเท่ากันคะแนนจะถูกแบ่งให้เท่ากันปัดเศษเป็น int ที่ใกล้ที่สุด ตัวอย่างเช่นหากโปรแกรมในสถานที่ที่ 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 หากคุณมีภาษาที่คุณต้องการใช้กับคอมไพเลอร์ / ล่ามที่เป็นการดาวน์โหลดที่ค่อนข้างเล็กฉันสามารถเพิ่มมันได้ คุณยังสามารถใช้ภาษาที่มีล่ามออนไลน์ได้ แต่จะไม่ทำงานอย่างรวดเร็ว
- ระบุคำตอบของคุณหากคุณต้องการให้ฟังก์ชันคำนวณได้เป็นองศาหรือเรเดียน
- โปรแกรมของคุณจะต้องส่งออกโซลูชั่นไปยังกรณีทดสอบทั้งหมด 200 กรณี (ไปยังไฟล์หรือ STDOUT) 60 วินาทีบน Mac ของฉัน
- จะต้องมีการสุ่มแบบสุ่ม
- เอาต์พุตทั้งหมดของคุณสำหรับกรณีทดสอบทั้งหมดต้องไม่เกิน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)
ด้วย