Anda diberi 6 angka: 5 digit [0-9] dan nomor target. Tujuan Anda adalah untuk menyelingi operator di antara digit untuk mendapatkan sedekat mungkin dengan target. Anda harus menggunakan setiap digit tepat sekali, dan dapat menggunakan operator berikut sebanyak kali yang Anda inginkan: + - * / () ^ sqrt sin cos tan
. Sebagai contoh, jika saya diberi 8 2 4 7 2 65
saya dapat menampilkan 82-(2*7)-4
. Ini mengevaluasi ke 64, sehingga memberi saya skor 1 karena saya 1 jauh dari target. Catatan: Anda tidak dapat menempatkan titik desimal di antara digit.
Saya menggunakan kode dari jawaban StackOverflow ini untuk mengevaluasi ekspresi matematika. Di bagian bawah pertanyaan ini ada beberapa program yang dapat Anda gunakan untuk mengujinya.
Fungsi Rantai (Pembaruan!)
@mdahmoune telah mengungkapkan tingkat kompleksitas baru untuk tantangan ini. Karena itu, saya menambahkan fitur baru: chaining unary functions. Ini bekerja pada dosa, cos, tan, dan sqrt. Sekarang alih-alih menulis sin(sin(sin(sin(10))))
, Anda bisa menulissin_4(10)
. Cobalah di evaluator!
Memasukkan
200 case uji yang dipisahkan dengan jalur sebanyak 5 digit dan nomor target yang dipisahkan oleh ruang. Anda dapat menggunakan program di bagian bawah pertanyaan untuk membuat sampel kasus uji, tetapi saya akan memiliki kasus pengujian sendiri untuk penilaian resmi. Kasing uji dipecah menjadi 5 bagian dari 40 pengujian dengan kisaran berikut untuk nomor target:
- Bagian 1: [0,1] (hingga 5 poin desimal)
- Bagian 2: [0,10] (hingga 4 poin desimal)
- Bagian 3: [0,1000] (hingga 3 poin desimal)
- Bagian 4: [0,10 6 ] (ke 1 titik desimal)
- Bagian 5: [0,10 9 ] (hingga 0 poin desimal)
Keluaran
200 baris ekspresi matematika yang terpisah. Sebagai contoh, jika test case adalah 5 6 7 8 9 25.807
, output yang mungkin bisa78-59+6
Mencetak gol
Tujuan setiap putaran adalah untuk lebih dekat dengan jumlah target daripada program yang bersaing lainnya. Aku akan menggunakan Mario Kart 8 scoring , yaitu: . Jika beberapa jawaban mendapatkan skor persis yang sama, poin dibagi secara merata, dibulatkan ke int terdekat. Misalnya, jika program di tempat ke-5 - ke-8 diikat, mereka masing-masing mendapatkan (8 + 7 + 6 + 5) / 4 = 6,5 => 7 poin di babak itu. Di akhir 200 putaran, program yang mendapat poin terbanyak menang. Jika dua program memiliki jumlah poin yang sama di akhir, tie-breaker adalah program yang selesai berjalan lebih cepat.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
Aturan
- Anda hanya dapat menggunakan salah satu bahasa yang umumnya dipasang sebelumnya di Mac seperti C, C ++, Java, PhP, Perl, Python (2 atau 3), Ruby, dan Swift. Jika Anda memiliki bahasa yang ingin Anda gunakan dengan kompiler / juru bahasa yang merupakan unduhan yang relatif kecil saya dapat menambahkannya. Anda juga dapat menggunakan bahasa dengan penerjemah online, tetapi itu tidak akan berjalan secepat.
- Tentukan dalam jawaban Anda jika Anda ingin fungsi trigonometri dihitung dalam derajat atau radian .
- Program Anda harus menampilkan solusinya ke semua 200 kasus uji (ke file atau STDOUT) dalam waktu 60 detik pada Mac saya.
- Keacakan harus diunggulkan.
- Total output Anda untuk semua kasus uji tidak boleh lebih dari 1 MB .
- Jika Anda telah meningkatkan solusi Anda dan ingin dinilai ulang, tambahkan Skor Ulang di bagian atas jawaban Anda dengan huruf tebal.
Program
(ubah argumen "deg" menjadi "rad" jika Anda ingin radian)
- Uji evaluator
- Nilai output program Anda untuk kasus uji
- Hasilkan kasus uji:
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>
Papan peringkat
Skor bagian (# kemenangan):
- [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
Terkait: Hasilkan persamaan yang valid menggunakan angka yang ditentukan pengguna
cos(0)/sin(0^0)/sin(0^0)
.