आपको 6 नंबर दिए गए हैं: 5 अंक [0-9] और एक लक्ष्य संख्या। आपका लक्ष्य अंकों के बीच परिचालकों को फैलाना है ताकि आप लक्ष्य के करीब पहुंच सकें। आप प्रत्येक अंक का उपयोग करने के बिल्कुल एक बार, और निम्न ऑपरेटरों का उपयोग कर सकते हैं कई के रूप में कई बार के रूप में आप चाहते हैं: + - * / () ^ sqrt sin cos tan
। उदाहरण के लिए, अगर मुझे दिया जाता है तो मैं 8 2 4 7 2 65
आउटपुट कर सकता हूं 82-(2*7)-4
। यह 64 का मूल्यांकन करता है, इस प्रकार मुझे 1 का स्कोर देता है क्योंकि मैं लक्ष्य से 1 दूर था। नोट: आप अंकों के बीच एक दशमलव बिंदु नहीं रख सकते।
मैं गणितीय अभिव्यक्तियों का मूल्यांकन करने के लिए इस StackOverflow उत्तर से कोड का उपयोग कर रहा हूं । इस प्रश्न के निचले भाग में ऐसे प्रोग्राम हैं जिन्हें आप इसका परीक्षण करने के लिए उपयोग कर सकते हैं।
चेनिंग फ़ंक्शंस (अपडेट!)
@mdahmoune ने इस चुनौती के लिए एक नए स्तर की जटिलता का खुलासा किया है। जैसे, मैं एक नई सुविधा जोड़ रहा हूँ: यूनिरी फ़ंक्शंस का पीछा करते हुए। यह पाप, cos, tan और sqrt पर काम करता है। अब लिखने के बजाय लिख sin(sin(sin(sin(10))))
सकते हैं sin_4(10)
। मूल्यांकनकर्ता में इसे आज़माएं!
इनपुट
5 अंकों के 200 लाइन-अलग-अलग परीक्षण मामले और अंतरिक्ष-अलग होने वाले लक्ष्य संख्या। आप नमूना परीक्षण मामलों को बनाने के लिए प्रश्न के निचले भाग में कार्यक्रम का उपयोग कर सकते हैं, लेकिन मेरे पास आधिकारिक स्कोरिंग के लिए अपने स्वयं के परीक्षण मामले होंगे। लक्ष्य संख्या के लिए निम्नलिखित सीमा के साथ परीक्षण मामलों को 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
स्कोरिंग
लक्ष्य प्रत्येक गोल अन्य प्रतिस्पर्धी कार्यक्रमों की तुलना में लक्ष्य संख्या के करीब पहुंचना है। मैं मारियो कार्ट 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
नियम
- आप केवल मैक पर C, C ++, Java, PhP, पर्ल, पायथन (2 या 3), रूबी, और स्विफ्ट जैसी भाषाओं में से किसी एक का उपयोग कर सकते हैं। यदि आपके पास एक भाषा है जिसे आप संकलक / दुभाषिया के साथ उपयोग करना चाहते हैं जो एक अपेक्षाकृत छोटा डाउनलोड है जो मैं इसे जोड़ सकता हूं। आप एक भाषा का उपयोग ऑनलाइन दुभाषिया के साथ भी कर सकते हैं, लेकिन यह उतनी तेज़ नहीं चलेगी।
- अपने जवाब में निर्दिष्ट करें कि क्या आप ट्रिगर कार्यों को डिग्री या रेडियन में गणना करना चाहते हैं ।
- आपके कार्यक्रम को मेरे मैक पर 60 सेकंड के भीतर सभी 200 परीक्षण मामलों (एक फ़ाइल या एसटीडीयूएसटी) के लिए अपने समाधान का उत्पादन करना होगा ।
- बेतरतीब होना चाहिए।
- सभी परीक्षण मामलों के लिए आपका कुल उत्पादन 1 एमबी से अधिक नहीं हो सकता है ।
- यदि आपने अपने समाधान में सुधार किया है और फिर से स्कोर करना चाहते हैं, तो अपने उत्तर में सबसे ऊपर पुनः स्कोर को बोल्ड में जोड़ें।
कार्यक्रम
(यदि आप रेडियन चाहते हैं तो "deg" तर्क को "रेड" में बदलें)
- मूल्यांकनकर्ता का परीक्षण करें
- परीक्षण मामलों के लिए अपने कार्यक्रम का आउटपुट स्कोर करें
- परीक्षण के मामले उत्पन्न करें:
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] उपयोगकर्ता 202729 : 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 ] उपयोगकर्ता 202729: 0, mdahmoune : 40
संबंधित: उपयोगकर्ता-निर्दिष्ट संख्याओं का उपयोग करके एक वैध समीकरण बनाएं
cos(0)/sin(0^0)/sin(0^0)
।