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]];