🐸🐸
9x9 ızgarada basitleştirilmiş bir Frogger oyununa her zaman en uygun çözümü bulmak için en kısa programı yapmalısınız.
Ders Elemanları:
L- Log (Uzunluk: 3-4). Bir kütüğe atladığınızda, sizi yanınızda taşır.V- Araç (Uzunluk: 1-2)- Hız (1-2): Satırın sol tarafında, satırdaki öğelerin hareket hızı olacaktır.
- Boşluklar: Elemanlar arasında her zaman en az iki boşluk olacaktır .
- Yön: Hem Araç hem de Kütük bölümlerinde, her şeritteki hareket yönü sol ve sağ arasında değişir.
Kurs Yapısı:
- Eğer sermaye, doğru gidiyorsa; küçük harfse sola gider. Bir satırdaki tüm öğeler aynı yöne gider. Bir öğenin bir kısmı ekrandan çıktığında, ekranın karşı tarafında görünecektir.
- İlk sıra güvenli bir bölgedir. Kurbağa
Fher zaman aynı noktadan başlar. - Sonraki 3 sıra, Araçlı yollardır.
- Bir sonraki sıra güvenli bir bölgedir.
- Sonraki 3 sıra, Günlükler ile su (dokunma suyu == ölüm).
- Şeride ulaştığınızda
Wkazanırsınız. - Kurbağa ölürse
F
Oyuncu Kontrolleri:
L- AyrıldıR- SağU- YukarıD- AşağıW- Bekle
Hareket ettikten sonra başka bir çerçeve geçer. (Çerçevenin taşıma işleminizle aynı anda değil, taşıma işleminizden sonra geçtiğini unutmayın.) Programınız, bir dizi karakter olarak en uygun çözümü vermelidir URWUUL. Bir kursun çözümü yoksa, programınız çıktı almalıdır N.
Örnekler: (Bunları elle yaptığımdan beri, bunların en uygun çözüm olup olmadığını bilmiyorum.)
0WWWWWWWWW 1 lll 2 HBÖ 2 lll 0 1 vv vv 1 V V 1 vv 0 F
Çözüm: WUWUUURWUULWUU
0WWWWWWWWW 2 lll 1 HBÖ 1 lll 0 2 vv 1 VV 2 vv 0 F
Çözüm: WUWUWUUWUUWWUU
0WWWWWWWWW 2 lll 2 HBÖ 1 lll 0 2 v vv 1 VV VV 1 v v 0 F
Çözüm: WWUUUURURRWWUUU
0WWWWWWWWW 2 lll 2 HBÖ 1 lll 0 1 vv v 2 VVV 2 vvv 0 F
Çözüm: N(İlk satırı geçmenin yolu yok.)
Dersi metin kutusuna yapıştırarak ve "Ders Yükle" seçeneğine basarak bunları snippet'te test edin. Sonra çözümü "Girdi" ye yapıştırın ve gönder tuşuna basın.
Snippet: Test senaryoları yapmak zor, bu yüzden programınızın rastgele oluşturulmuş kursları çözüp çözemeyeceğini görmenizi sağlayan bu snippet'i yaptım. Test amacıyla, yapmanız gereken tek şey programınızın çözümünü (örn. LRUWL...) "Giriş" bölümüne girmek ve gönder tuşuna basmaktır. Parkuru orijinal durumuna sıfırlamak için "Sıfırla" düğmesine basın. Herhangi bir hata bulursanız bana bildirin.
var timer;
var f_x, f_y;
var replaced;
var copy;
document.body.onkeyup = function(e) {
var a = document.activeElement;
if (a !== controls && a !== data) hop(e.keyCode);
};
function setup() {
stop();
var rows = game.children;
rows[0].innerHTML = "0WWWWWWWWW";
load(logs, "L");
rows[2].innerHTML = "0 ";
load(cars, "V");
rows[4].innerHTML = "0 F ";
copy = game.innerHTML;
save();
f_x = 5;
f_y = 9;
replaced = " ";
}
function save() {
data.value = "";
for (var i = 1; i <= 9; i++) {
data.value += getRow(i).textContent;
if (i < 9) data.value += "\n";
}
}
function extLoad() {
stop();
var rows = data.value.split("\n");
replaced = " ";
for (var i = 0; i < rows.length; i++) {
var r = getRow(i + 1);
r.innerHTML = rows[i].replace(/ /g, " ");
if (rows[i].indexOf("V") !== -1 || rows[i].indexOf("L") !== -1) r.className = "right";
else if (rows[i].indexOf("v") !== -1 || rows[i].indexOf("l") !== -1) r.className = "left";
var f = rows[i].indexOf("F");
if (f !== -1) {
f_y = i + 1;
f_x = f;
}
}
copy = game.innerHTML;
}
function reset() {
stop();
game.innerHTML = copy;
f_x = 5;
f_y = 9;
replaced = " ";
}
function play() {
if (!timer) {
timer = setInterval(next, 1500);
}
}
function stop() {
if (timer) {
clearInterval(timer);
timer = null;
}
}
function input(i) {
var s = controls.value;
if (i === 0) {
stop();
sub.disabled = true;
}
if (s[i] === "L") hop(65);
else if (s[i] === "U") hop(87);
else if (s[i] === "R") hop(68);
else if (s[i] === "D") hop(83);
next();
if (i < s.length - 1) setTimeout(function() {
input(i + 1);
}, 750);
else sub.disabled = false;
}
function load(part, code) {
for (var r = 0; r < 3; r++) {
var row = part.children[r];
var s = "";
var dir = r % 2;
row.className = dir === 1 ? "right" : "left";
s += Math.floor(Math.random() * 2) + 1;
var end = 0;
for (var c = 0; c < 9-end;) {
var spaces = Math.min(9 - end - c , Math.floor(Math.random() * 2) + 2);
if(c === 0 && end===0) {
spaces = Math.floor(Math.random()*4);
end = Math.max(0,2-spaces);
}
s += " ".repeat(spaces);
c += spaces;
var type = "";
var len = 0;
var rand = Math.floor(Math.random() * 2);
if (code === "L") {
type = dir === 1 ? "L" : "l";
len = rand + 3;
} else {
type = dir === 1 ? "V" : "v";
len = rand + 1;
}
if (c + len > 9-end) continue;
s += type.repeat(len);
c += len;
}
row.innerHTML = s + " ".repeat(end);
}
}
function next() {
move(logs);
move(cars);
}
function move(part) {
var rows = part.children;
for (var i = 0; i < rows.length; i++) {
var s = rows[i].textContent;
var f = s.indexOf("F") !== -1;
if (f) {
replace(f_y, f_x, false);
s = rows[i].textContent;
}
var speed = s[0];
var stuff = s.substring(1);
var v = vel(speed, rows[i].className);
rows[i].textContent = s[0] + shift(stuff, speed, rows[i].className);
if (f) {
if (part === logs) {
f_x += v;
if (f_x < 1 || f_x > 9) {
go(5 - f_x, f_y - 9);
return;
}
}
replace(f_y, f_x, true);
s = rows[i].textContent.substring(1);
var c = f_x + v;
var t = "";
if (c > 9) t = s.substring(f_x) + s.substring(0, c - 9);
else if (c < 0) t = s.substring(0, f_x) + s.substring(9 + c);
else t = v > 0 ? s.substring(f_x, c) : s.substring(c, f_x);
if (t.indexOf("V") !== -1 || t.indexOf("v") !== -1) {
go(5 - f_x, f_y - 9);
}
}
}
}
function vel(mag, dir) {
var d = dir === "right" ? 1 : -1;
var m = parseInt(mag);
return d * m;
}
function shift(s, n, d) {
n = parseInt(n);
for (var i = 0; i < n; i++) {
if (d === "left") {
s = s.substring(1) + s.substring(0, 1);
} else {
s = s.substring(s.length - 1) + s.substring(0, s.length - 1);
}
}
return s;
}
function hop(k) {
if (k === 65) go(-1, 0);
else if (k === 87) go(0, 1);
else if (k === 68) go(1, 0);
else if (k === 83) go(0, -1);
}
function go(x, y) {
replace(f_y, f_x, false);
f_y -= y;
f_x += x;
replace(f_y, f_x, true);
if (f_x < 1 || f_x > 9 || f_y > 9) {
go(5 - f_x, f_y - 9);
return;
}
if (f_y == 1) {
alert("win!");
go(5 - f_x, f_y - 9);
}
}
function replace(y, x, f) {
var row = getRow(y);
if (!row) return false;
var s = row.textContent;
if (x < 1 || x >= s.length) return false;
if (f) {
replaced = s[x];
if (replaced === "V" || replaced === "v" || (replaced.charCodeAt(0) === 160 && y < 5)) {
go(5 - f_x, f_y - 9);
} else {
row.textContent = s.substring(0, x) + "F" + s.substring(x + 1);
}
} else {
row.textContent = s.substring(0, x) + replaced + s.substring(x + 1);
}
}
function getRow(y) {
if (y < 1 || y > 9) return false;
if (y === 1) return game.firstChild;
if (y === 9) return game.lastChild;
if (y > 5) return cars.children[y - 6];
if (y < 5) return logs.children[y - 2];
return game.children[2];
}
<body onload="setup()"><code id="game"><div></div><div id="logs"><div></div><div></div><div></div></div><div></div><div id="cars"><div></div><div></div><div></div></div><div></div></code>
<input type="button" value="Step" onclick="next()" />
<input type="button" value="Pause" onclick="stop()" />
<input type="button" value="Play" onclick="play()" />
<input type="button" value="Reset" onclick="reset()" />
<input type="button" value="New Course" onclick="setup()" />
<div>Controls: WASD</div>
<div>Input:
<input type="text" id="controls" />
<input type="submit" onclick="input(0)" id="sub" />
</div>
<div>
<textarea id="data" rows=9 cols=12></textarea>
<input type="button" onclick="extLoad()" value="Load Course" />
<input type="button" onclick="save()" value="Save Course" />
</div>
</body>
Nereden Başlamalı:
İlişkili:
Ayrıca bakınız:
WWUUUURURRWWUUU -> Chewie kurbağa oynuyor.