Bạn được cung cấp 6 số: 5 chữ số [0-9] và một số mục tiêu. Mục tiêu của bạn là xen kẽ các toán tử giữa các chữ số để đến gần nhất có thể với mục tiêu. Bạn phải sử dụng chính xác từng chữ số một lần và có thể sử dụng các toán tử sau bao nhiêu lần tùy ý : + - * / () ^ sqrt sin cos tan
. Ví dụ, nếu tôi được cung cấp, 8 2 4 7 2 65
tôi có thể xuất ra 82-(2*7)-4
. Điều này đánh giá là 64, do đó cho tôi điểm 1 vì tôi cách mục tiêu 1 điểm. Lưu ý: Bạn không thể đặt dấu thập phân giữa các chữ số.
Tôi đang sử dụng mã từ này câu trả lời StackOverflow để đánh giá các biểu thức toán học. Ở dưới cùng của câu hỏi này có các chương trình bạn có thể sử dụng để kiểm tra nó.
Chức năng xâu chuỗi (Cập nhật!)
@mdahmoune đã tiết lộ một mức độ phức tạp mới cho thử thách này. Như vậy, tôi đang thêm một tính năng mới: xâu chuỗi các chức năng đơn nguyên. Điều này hoạt động trên sin, cos, tan và sqrt. Bây giờ thay vì viết sin(sin(sin(sin(10))))
, bạn có thể viết sin_4(10)
. Hãy thử nó trong đánh giá!
Đầu vào
200 trường hợp kiểm tra phân tách dòng gồm 5 chữ số và một số mục tiêu được phân tách bằng dấu cách. Bạn có thể sử dụng chương trình ở cuối câu hỏi để tạo các trường hợp kiểm tra mẫu, nhưng tôi sẽ có các trường hợp kiểm tra riêng để chấm điểm chính thức. Các trường hợp thử nghiệm được chia thành 5 phần của 40 thử nghiệm với các phạm vi sau cho số mục tiêu:
- Mục 1: [0,1] (đến 5 điểm thập phân)
- Mục 2: [0,10] (đến 4 điểm thập phân)
- Mục 3: [0,1000] (đến 3 điểm thập phân)
- Mục 4: [0,10 6 ] (đến 1 dấu thập phân)
- Mục 5: [0,10 9 ] (đến 0 điểm thập phân)
Đầu ra
200 biểu thức toán học tách dòng. Ví dụ: nếu trường hợp kiểm tra là 5 6 7 8 9 25.807
, một đầu ra có thể có thể là78-59+6
Chấm điểm
Mục tiêu mỗi vòng là để đến gần số mục tiêu hơn các chương trình cạnh tranh khác. Tôi sẽ sử dụng tính năng ghi điểm Mario Kart 8 , đó là : . Nếu nhiều câu trả lời có cùng số điểm chính xác, các điểm được chia đều, làm tròn đến int gần nhất. Ví dụ: nếu các chương trình ở vị trí thứ 5-8 được gắn kết, chúng sẽ nhận được (8 + 7 + 6 + 5) / 4 = 6,5 => 7 điểm trong vòng đó. Kết thúc 200 vòng, chương trình nào có nhiều điểm nhất sẽ chiến thắng. Nếu hai chương trình có cùng số điểm ở cuối, thì bộ ngắt kết nối là chương trình hoàn thành chạy nhanh hơn.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
Quy tắc
- Bạn chỉ có thể sử dụng một trong những ngôn ngữ thường được cài đặt sẵn trên Mac như C, C ++, Java, PhP, Perl, Python (2 hoặc 3), Ruby và Swift. Nếu bạn có một ngôn ngữ bạn muốn sử dụng với trình biên dịch / trình thông dịch là một bản tải xuống tương đối nhỏ, tôi có thể thêm nó vào. Bạn cũng có thể sử dụng ngôn ngữ với trình thông dịch trực tuyến, nhưng ngôn ngữ đó sẽ không chạy nhanh như vậy.
- Chỉ định trong câu trả lời của bạn nếu bạn muốn các hàm lượng giác được tính theo độ hoặc radian .
- Chương trình của bạn phải xuất các giải pháp cho tất cả 200 trường hợp thử nghiệm (sang tệp hoặc STDOUT) trong vòng 60 giây trên máy Mac của tôi.
- Sự ngẫu nhiên phải được gieo hạt.
- Tổng sản lượng của bạn cho tất cả các trường hợp thử nghiệm không thể nhiều hơn 1 MB .
- Nếu bạn đã cải thiện giải pháp của mình và muốn được chấm điểm lại, hãy thêm Điểm lại ở đầu câu trả lời của bạn in đậm.
Chương trình
(thay đổi đối số "deg" thành "rad" nếu bạn muốn radian)
- Kiểm tra đánh giá
- Điểm số đầu ra của chương trình cho các trường hợp thử nghiệm
- Tạo các trường hợp thử nghiệm:
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>
Bảng xếp hạng
Điểm số phần (# chiến thắng):
- [0-1] người dùng202729 : 40, mdahmoune: 0
- [0-10] người dùng202729 : 40, mdahmoune: 0
- [0-1000] người dùng202729 : 39, mdahmoune: 1
- [0-10 6 ] người dùng202729 : 33, mdahmoune: 7
- [0-10 9 ] người dùng202729: 0, mdahmoune : 40
Liên quan: Tạo phương trình hợp lệ bằng các số do người dùng chỉ định
cos(0)/sin(0^0)/sin(0^0)
.