var STATE = null,
CODE = "",
LEVEL = 0;
function create(id, state) {
var W = {
draw: document.getElementById(id),
state: state,
charriots: [],
caisses: []
}, i, w, x,
margin = 8;
W.draw.innerHTML = "";
W.draw.style.height = (2 * margin + 2 * 40 + 32) + "px";
// Création des caisses.
for (i = 0 ; i < 4 ; i++) {
w = document.createElement("div");
if (i < 2) {
w.className = "movable charriotH";
} else {
w.className = "movable charriotB";
}
W.draw.appendChild(w);
W.charriots.push(w);
}
// Création des charriots.
for (i = 4 ; i < state.length ; i++) {
w = document.createElement("div");
w.className = "movable caisse";
var txt = document.createElement("div");
txt.innerHTML = "ABCDEFGHIJKLOMNOQRSTUVWXYZ".charAt(i - 4);
w.appendChild(txt);
W.draw.appendChild(w);
W.caisses.push(w);
}
setTimeout(
function() {setPositions(W);},
100
);
return W;
}
function setPositions(W) {
var i, w, x, margin = 8;
// Positionner les charriots.
for (i = 0 ; i < 4 ; i++) {
w = W.charriots[i];
w.style.left = (margin + 40 * W.state[i]) + "px";
}
// Positionner les caisses.
for (i = 4 ; i < W.state.length ; i++) {
w = W.caisses[i - 4];
x = W.state[i];
if (x < -2) {
w.style.top = (margin + 40 + 36) + "px";
x = W.state[- 1 - x];
} else if (x < 0) {
w.style.top = (margin + 4) + "px";
x = W.state[- 1 - x];
} else {
w.style.top = (margin + 40) + "px";
}
w.style.left = (margin + 4 + x * 40) + "px";
}
}
function init() {
document.addEventListener("keydown", onKeyDown);
start();
}
function showCode() {
var txt = "", code = "", bug = null, state = [], i, k, c, ok, pts = 0;
for (i = 0 ; i < STATE.state.length ; i++) {
state.push(STATE.state[i]);
}
for (k = 0 ; k < CODE.length ; k++) {
c = CODE.charAt(k);
var idx = k % 4;
if (c == "<") {
if (((idx == 0 || idx == 2) && state[idx] == 0)
|| (idx == 1 && state[0] == state[1] - 1)
|| (idx == 3 && state[2] == state[3] - 1)) {
bug = c;
break;
}
state[idx]--;
pts++;
}
else if (c == ">") {
if (((idx == 1 || idx == 3) && state[idx] == state.length - 5)
|| (idx == 0 && state[0] == state[1] - 1)
|| (idx == 2 && state[2] == state[3] - 1)) {
bug = c;
break;
}
state[idx]++;
pts++;
}
else if (c == "#") {
var load = -1;
for (i = 4 ; i < state.length ; i++) {
if (state[i] == -idx - 1) {
load = i - 4;
break;
}
}
if (load < 0) {
// Le charriot est à vide, peut-il charger une caisse ?
ok = false;
for (i = 4 ; i < state.length ; i++) {
if (state[i] == state[idx]) {
// La caisse i est en face du charriot qui veut
// en prendre une.
ok = true;
state[i] = -idx - 1;
break;
}
}
if (!ok) {
bug = c;
break;
}
}
else {
// Le charriot est chargé, peut-il déposer sa caisse ?
ok = true;
for (i = 4 ; i < state.length ; i++) {
if (state[i] == state[idx]) {
// Il y a déjà une caisse à cet endroit.
break;
}
}
if (ok) {
state[load + 4] = state[idx];
} else {
bug = c;
break;
}
}
pts += 2;
}
code += c;
txt += c;
if (idx == 3) {
txt += " ";
pts += 10;
}
}
if (bug) {
txt += "" + bug + "";
} else {
txt += " ";
}
if (code.length % 4 != 0) pts += 10;
document.getElementById("code").innerHTML = txt;
document.getElementById("cout").innerHTML = pts;
CODE = code;
setPositions(
{
state: state,
draw: STATE.draw,
charriots: STATE.charriots,
caisses: STATE.caisses
}
);
for (i = 4 ; i < state.length ; i++) {
if (state[i] != i - 4) return;
}
var ptsMax = parseInt(document.getElementById("coutmax").innerHTML);
console.log("pts", pts);
console.log("ptsMax", ptsMax);
if (pts <= ptsMax) {
document.getElementById("congratulation").style.display = "block";
localStorage.setItem("robotsort.level", LEVEL + 1);
} else {
alert("Vous avez la bonne réponse, mais elle est encore trop chère.");
}
}
function onKeyDown(evt) {
var c = evt.keyCode;
if (c == 8 || c == 46) {
c = "DEL";
if (CODE.length > 0) {
CODE = CODE.substr(0, CODE.length - 1);
}
}
else if (c == 37) {
c = "<";
CODE += "<";
}
else if (c == 39) {
c = ">";
CODE += ">";
}
else if (c == 40 || c == 38) {
c = "#";
CODE += "#";
}
else if (c == 32 || c == 109 || c == 110 || c == 190) {
c = "-";
CODE += "-";
}
else {
c = null;
}
if (c) {
evt.preventDefault();
evt.stopPropagation();
showCode();
}
}
function start() {
var state = [0, 4, 0, 4];
var level = localStorage.getItem("robotsort.level");
if (!level) level = 0;
else level = parseInt(level);
LEVEL = level;
var rest = cases[level][0];
document.getElementById("coutmax").innerHTML = cases[level][2];
document.getElementById("level").innerHTML = 1 + level;
for (var i = 0 ; i < rest.length ; i++) {
state.push(rest[i]);
}
var x = create("draw", state);
window.STATE = x;
window.CODE = "";
showCode();
}
var cases = [[[1, 3, 2, 0, 4], "#--< >-># >-#< >-<< #-##", 70],
[[0, 4, 2, 1, 3], "><-# ##-< >>-< >--< ##-#", 70],
[[0, 1, 2, 4, 3], "-<-- -#-# ->-< -#-#", 51],
[[1, 0, 2, 3, 4], ">--- #-#- <->- #-#-", 51],
[[0, 3, 2, 1, 4], ">--< #--# >--< >--< #--#", 64],
[[1, 4, 2, 0, 3], "#<-# >#>< >>#< >-<< ####", 76],
[[0, 2, 3, 1, 4], ">->- #->< >-## >-<< #-##", 70],
[[1, 2, 0, 3, 4], "#--< >->< --## >-<< #-##", 69],
[[0, 1, 4, 2, 3], "><-# >#-< #>-- >--< ##-#", 69],
[[1, 0, 2, 4, 3], "><-- #### <>>< ####", 62],
[[0, 2, 1, 3, 4], ">--- >->- #-#- <->- #-#-", 63],
[[0, 1, 3, 2, 4], ">--- >--< #--# >--< #--#", 63],
[[0, 4, 1, 3, 2], "-<-# -<-< >#-- #>-< >>-< ##-#", 81],
[[2, 1, 3, 0, 4], ">-#- >->- #<-- <#>- <<>- ###-", 81],
[[0, 2, 4, 1, 3], "><>- ##># >>#< >-<< ####", 76],
[[0, 1, 4, 3, 2], "-<-- -<-- -#-# ->-< ->-< -#-#", 74],
[[2, 1, 0, 3, 4], ">--- >--- #-#- <->- <->- #-#-", 74],
[[0, 3, 1, 2, 4], "-<-< -#-< -<># --#> -<>- -###", 80],
[[1, 0, 3, 2, 4], "-<-- ><-< #### <>>< ####", 74],
[[0, 2, 1, 4, 3], ">--- ><>- #### <>>< ####", 74],
[[1, 4, 0, 3, 2], "-<-# -<-< ##>- >>#< >><< ####", 87],
[[2, 1, 4, 0, 3], ">-#- >->< ##-# <<>> <<>- ####", 87],
[[0, 1, 3, 4, 2], ">--< >--< >--# ##-> <<-> ##-#", 81],
[[1, 3, 0, 2, 4], "-<-< #<-# >#>< ->#- >-<< ####", 86],
[[1, 0, 4, 3, 2], "-<-- -<-- >#-# #>#< <>>< ####", 85],
[[2, 1, 0, 4, 3], ">--- >--- #<#- <#># <>>< ####", 85],
[[0, 4, 2, 3, 1], "-<-- -<-- -<-- -#-# ->-< ->-< ->-< -#-#", 97],
[[3, 1, 2, 0, 4], ">--- >--- >--- #-#- <->- <->- <->- #-#-", 97],
[[1, 2, 0, 4, 3], "---# #<-< >#-# -->< --## >><< ####", 99],
[[1, 0, 4, 2, 3], "--#- >#>- #<#< --># --#> <<>- ####", 99],
[[1, 3, 0, 4, 2], "---# -<-< -#-# ---< >-## #<>> <<>> ####", 111],
[[0, 3, 4, 1, 2], ">--< >--< >-># ###> <<>> <<>- ####", 100],
[[0, 4, 1, 2, 3], "--># >-#< ><>- ###- -><< >-<< ##-#", 98],
[[0, 3, 1, 4, 2], ">--- >--< >--< #-># <##> <<>> ####", 98],
[[2, 0, 3, 1, 4], "-<-- -<>- -<>- -##< #><# >><< ####", 98],
[[0, 2, 4, 3, 1], "-<-- -<-- -<-- -#>- ->># ->#< -><< -###", 103],
[[3, 1, 2, 4, 0], "#->- >->- -->- >-#- >-<< ##<# <<<> -###", 109],
[[2, 4, 0, 3, 1], "-<-- -<-- -<>- -#># #>#< >><< >><< ####", 111],
[[2, 0, 1, 3, 4], ">--< >--< #--< <--# --#> <->- #-##", 91],
[[3, 0, 2, 4, 1], ">--< >--< >--< #--# <--> <##> <<>> ####", 110],
[[3, 1, 0, 2, 4], ">--- >--- >--< #--< <-## <->> <->- #-##", 103],
[[3, 1, 4, 0, 2], ">--- >--< >--< #-## <#>> <<>> <<>- ####", 111],
[[1, 4, 2, 3, 0], "#->< >-#< --<< ##-# -<-> -<-> <<-> -###", 109],
[[2, 1, 4, 3, 0], "#->- >->- >-#< --<< ##-# -<-> <<<> -###", 109],
[[2, 0, 4, 3, 1], "-<-- -<-- -<>- -#>- ->## #><< >><< ####", 109],
[[3, 0, 2, 1, 4], ">--- >--< >--< #--< <--# <-#> <->> #-##", 104],
[[3, 1, 0, 4, 2], ">--- >--- >--< #--< <-## <#>> <<>> ####", 109],
[[0, 3, 2, 4, 1], "-<-- -<>- -<>- -#>- ->#- -><# -><< -###", 104],
[[1, 2, 3, 0, 4], "><#- #<>- <<#- -#>< ->## -><< ####", 102],
[[1, 0, 3, 4, 2], "--#- ><>- #<#- -#>- ->>- --## <><< ####", 111],
[[2, 4, 1, 3, 0], "><#- #<>- <<#- -#># ->#< >><< >><< ####", 117],
[[2, 1, 3, 4, 0], ">-#- >->- #<>- <<#- -#>- ->## <><< ####", 113],
[[2, 0, 4, 1, 3], "--#- >->- #-#- -<>- -### >><< >-<< ####", 111],
[[1, 2, 4, 3, 0], ">-#- >->- #<>- <<#- -#<# ->#< -><< ####", 113],
[[2, 0, 1, 4, 3], "--#- >->- #-#- -->- -<#- -#<# >><< ####", 109],
[[2, 3, 0, 1, 4], "-<-- -<-- -<>- -#>< #>## >><< >-<< ####", 110],
[[3, 4, 2, 0, 1], "-<-- -<>- -<>- -#>- #>## >><< >><< >-<< ####", 124],
[[2, 3, 4, 0, 1], ">#-< ><-< #--< <<-# -##> ->>- -#-> -<>> <<>- ####", 138],
[[1, 2, 3, 4, 0], "-#-- ><#< >-># ##>- <<#- -#<- ->#- -><< ####", 127],
[[1, 4, 0, 2, 3], "--#- >->- >-># #<#< -#<< ->#- >-<< ####", 112],
[[4, 0, 2, 3, 1], "-<-# -<-< -<-- -#-< ->-< >>-# #-#> <>>- ###-", 119],
[[0, 2, 3, 4, 1], ">->- #->- >-#< #-<< >--# ##-> <<-> ####", 112],
[[4, 1, 0, 3, 2], "-#-< -<-< -<-# -->> -->- ###- >><- >-<> #-##", 119],
[[1, 3, 2, 4, 0], "#-># ><>< >### #-<< <--# #<-> <<>> ####", 119],
[[2, 3, 0, 4, 1], "---# -<-< -#-# ---< >--< >--# #-#> <<>> <<>> ####", 135],
[[2, 3, 1, 0, 4], "><#- #<>- <<#- -#>< ->## >><< >-<< ####", 116],
[[4, 1, 2, 0, 3], "-#-< -<># -->> -->- ###- >-<- >><- >-<- #-##", 119],
[[1, 3, 4, 0, 2], "-<-# -<-< ##-< ---# >--> ->># >>#< >-<< ####", 124],
[[4, 0, 1, 3, 2], "-<-# -<-< -#-< >>-# >--< #--# <-#> <>>- ####", 123],
[[2, 4, 0, 1, 3], "--#- >->- >#>- #<#- --<< --## <<>> <<>- ####", 124],
[[4, 1, 3, 0, 2], "-<-# >#-< >>-# >--< #-## <->> <<>> <<>- ####", 127],
[[3, 4, 0, 1, 2], "#--< >--< >#># #--- >--- #--- <<#> <<>> <<>- ####", 136],
[[4, 0, 2, 1, 3], "-<-# >#-< >>-# >--< #--< <--# <-#> <->> ####", 124],
[[4, 1, 0, 2, 3], "-<-# -<-< -#-< >>-- >--# #-#> <-># <->> ####", 123],
[[0, 4, 3, 1, 2], ">--- >--- >--< ##-< <<># #-#> <<>> <<>- -###", 122],
[[2, 3, 1, 4, 0], "-#-- #<>- >->< >-## ##-- <<-- -#-- #><< >><< ####", 139],
[[3, 2, 0, 1, 4], ">--< >--< >--< #--# <<#> <<>- -#-> <<>- ####", 122],
[[3, 4, 1, 0, 2], ">--< #--< >#-# #--- >--- #-#- <<>> <<>> <<>- ####", 136],
[[3, 2, 1, 4, 0], "#--< >->< >-## #-<< >--# #--> <--# <#>> <<>> ####", 141],
[[3, 0, 1, 2, 4], ">--- >--- >--< #--< <<-< <<-# -##> <>>- ####", 120],
[[3, 2, 0, 4, 1], ">--< #--< >--# #--< >--# #--> <-## <#>> <<>> ####", 139],
[[2, 0, 3, 4, 1], "---# ><>< -#-# ---< --<< >--# #--> <-#> <<>> ####", 135],
[[3, 4, 2, 1, 0], "--#- ><>- #<#- <<>- -#>- ->## >><< >><< >-<< ####", 140],
[[3, 0, 4, 1, 2], "--#- >->- #-#- -<>- -<>- -##- -><# >><< >-<< ####", 135],
[[4, 0, 1, 2, 3], "#<-# ><>< -##< #>-- >--# #--> <--# <->> ####", 127],
[[1, 2, 4, 0, 3], "#<-- >#-- >>># >--< #--- <--- #-#- <-<< ####", 121],
[[1, 4, 3, 0, 2], ">#-< #<-< <<## ##>> >>>- >--- ##-> <<>- ####", 130],
[[0, 3, 4, 2, 1], ">->- #->- >-#< #-<< >--# ##-> <<>> <<>- ####", 126],
[[3, 0, 1, 4, 2], "--#- >->- #-#- -->- -<>- -<#- -#<- -><# >><< ####", 133],
[[4, 2, 0, 3, 1], "-<-# -<-< -<-< -#-< #>-# >>-> -->- --## >><< ####", 135],
[[3, 1, 4, 2, 0], ">-#- >->- >->- #->- <##- <<<< ---# --#> <<>- ####", 135],
[[4, 1, 2, 3, 0], "##-< ><># -->> -#>- >>## >-<< ##<# <<<> -###", 131],
[[1, 4, 3, 2, 0], ">-#- ><>- ##>- <<>- -### -><< >#<< ->#- >-<< ####", 142],
[[0, 4, 3, 2, 1], "-<-# -<-< -<-< -#-< ->-# >>-> >--> #>-# >--< ##-#", 131],
[[4, 3, 0, 1, 2], "><-# ##-< >>-< >--< #--# <<-> <-## #<>> <<>> ####", 143],
[[3, 4, 1, 2, 0], "#--< >--< >--# #--> >--- ##-# <<-< --># <<#> <<>> ####", 151],
[[1, 3, 4, 2, 0], "#<>< ><## <#<< >>-< >#-# ->-> ##-# -<-> <<-> -###", 143],
[[2, 4, 1, 0, 3], "--#- -->- -->- -<>- -### --<< >-#- #-<< >><< ####", 133],
[[2, 3, 4, 1, 0], "#->- >->- >-#< --<< #-<# >-#- -->- ###> <<>> <<>- ####", 152],
[[3, 2, 1, 0, 4], ">-#- >->- >->- #->- <-#- <<<- -<<- -##- <<>- ###-", 131],
[[4, 0, 3, 1, 2], "--#- >#>< #<## -#>> -<>- -##- -><- >><< >-<< ####", 141],
[[4, 3, 1, 0, 2], "#<-# >#>< >>#< >-<< #--# <<-> <--# #<>> <<>> ####", 145],
[[3, 0, 4, 2, 1], "-<-- -<-- -<-- -#>- #>>- >>># #-#- >-<- #><< >-<< ####", 147],
[[4, 1, 3, 2, 0], ">##< ><># #->> <<>- -##- -><- -##- >><< >-<< ####", 143],
[[4, 3, 2, 0, 1], "-<-# -<-< -<-< -#-< #>-# >--> ---> ->># >>#< >-<< ####", 148],
[[4, 2, 1, 3, 0], "><## #<>< <<#< -#<< ->-# >>-> -->- --## >><< ####", 143],
[[3, 2, 4, 1, 0], "#--< >->< >-## #-<< >--# #--> <-># -#-> <<>> <<>- ####", 153],
[[3, 4, 0, 2, 1], ">--< #--< >--# #--> >--- ##-# <<-< --## <<>> <<>> ####", 151],
[[4, 2, 3, 0, 1], "-#>- -<>- -<#- -#<- -<-- -##- #>>- >>#< >><# >-<< ####", 151],
[[3, 2, 4, 0, 1], ">--< #--< >--# #--< >--# #-#> <-># -#-> <<>> <<>- ####", 151],
[[4, 2, 0, 1, 3], ">->< >### #<>> <<>- #-#- <-<- ###- >><- >-<- #-##", 141],
[[4, 2, 1, 0, 3], ">-#< >#># #<>> <<>- -##- <<<- -##- -><- >-<- ####", 141],
[[2, 4, 3, 1, 0], ">-#- ><>- ##>- <<>- <-## ##<< >>-- ##-- >><< >-<< ##-#", 154],
[[4, 3, 2, 1, 0], "#--# ><>< >##< -><< >--# #--> <<>> <<># #--> <<>- ####", 156],
[[2, 4, 3, 0, 1], "><-# ##-< >>-< >--< #--# <-#> #->> <<># ---> <<>- ####", 153],
[[4, 0, 3, 2, 1], "#--- >#>< -<># -<#> -#>- <<#- -#<- ->#- -><< >><< ####", 153],
[[4, 3, 0, 2, 1], "><>- >### #>>< >#<< --## #-<< <#-# #<#> <<>> <<>> ####", 165],
[[4, 2, 3, 1, 0], "#->- >->- >-#< ##<< <<-# #<#> -#>> ->## >-<< ->-# >-<< #-##", 169],
[[4, 3, 1, 2, 0], "-##< -<># -#>- -<-- -##> >>>- --#- -#<< -<-- -#-- #><< >><< ####", 177]];