Created
December 13, 2025 00:37
-
-
Save rbvc8nfyv5-prog/06f92917724cf5b37839a886eed98c00 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| (function () { | |
| try { | |
| if (document.getElementById("painelRoleta")) return; | |
| var track = [32,15,19,4,21,2,25,17,34,6,27,13,36,11,30,8,23,10,5,24,16,33,1,20,14,31,9,22,18,29,7,28,12,35,3,26,0]; | |
| var vermelhos = [1,3,5,7,9,12,14,16,18,19,21,23,25,27,30,32,34,36]; | |
| var terminais = { | |
| 0:[0,10,20,30], | |
| 1:[1,11,21,31], | |
| 2:[2,12,22,32], | |
| 3:[3,13,23,33], | |
| 4:[4,14,24,34], | |
| 5:[5,15,25,35], | |
| 6:[6,16,26,36], | |
| 7:[7,17,27], | |
| 8:[8,18,28], | |
| 9:[9,19,29] | |
| }; | |
| function corNum(n){ | |
| if(n===0) return "#0f0"; | |
| return (vermelhos.indexOf(n)!==-1) ? "#e74c3c" : "#000"; | |
| } | |
| var hist = []; | |
| // cobertura de 1 terminal com ±1 vizinho na pista | |
| function coverTerminalViz(t){ | |
| var map = {}; | |
| var nums = terminais[t]; | |
| for(var i=0;i<nums.length;i++){ | |
| var n = nums[i]; | |
| var idx = track.indexOf(n); | |
| map[n] = true; | |
| map[track[(idx-1+37)%37]] = true; | |
| map[track[(idx+1)%37]] = true; | |
| } | |
| return map; | |
| } | |
| // melhor PAR (2 terminais) no momento, baseado nos últimos 14 | |
| function parVencedor(){ | |
| if(hist.length===0) return null; | |
| var ult = hist.slice(-14); | |
| var covers = []; | |
| for(var t=0;t<10;t++) covers[t] = coverTerminalViz(t); | |
| var bestA = null, bestB = null, bestHits = -1; | |
| for(var a=0;a<10;a++){ | |
| for(var b=a+1;b<10;b++){ | |
| var hits = 0; | |
| var ca = covers[a], cb = covers[b]; | |
| for(var i=0;i<ult.length;i++){ | |
| var x = ult[i]; | |
| if(ca[x] || cb[x]) hits++; | |
| } | |
| if(hits > bestHits){ | |
| bestHits = hits; | |
| bestA = a; | |
| bestB = b; | |
| } | |
| } | |
| } | |
| if(bestA===null) return null; | |
| return {a:bestA, b:bestB}; | |
| } | |
| /* ==== UI ==== */ | |
| var painel = document.createElement("div"); | |
| painel.id = "painelRoleta"; | |
| painel.style.cssText = | |
| "position:fixed;inset:0;background:#111;color:#eee;font-family:monospace;z-index:999999;overflow:auto;padding:14px;"; | |
| var box = document.createElement("div"); | |
| box.style.cssText = "max-width:1100px;margin:auto;"; | |
| painel.appendChild(box); | |
| var titulo = document.createElement("div"); | |
| titulo.textContent = "Linha do Tempo – Par vencedor (±1 vizinho)"; | |
| titulo.style.cssText = "text-align:center;font-weight:bold;margin-bottom:10px;"; | |
| box.appendChild(titulo); | |
| var linhas = document.createElement("div"); | |
| linhas.id = "linhas"; | |
| box.appendChild(linhas); | |
| for(var l=1;l<=5;l++){ | |
| var h = document.createElement("div"); | |
| h.id = "hist"+l; | |
| h.style.cssText = | |
| "border:1px solid #666;background:#222;border-radius:6px;padding:8px;margin-bottom:8px;" + | |
| "display:flex;flex-wrap:wrap;gap:6px;justify-content:center;"; | |
| linhas.appendChild(h); | |
| } | |
| var botoes = document.createElement("div"); | |
| botoes.style.cssText = | |
| "display:grid;grid-template-columns:repeat(9,1fr);gap:4px;max-width:520px;margin:12px auto;"; | |
| box.appendChild(botoes); | |
| for(var n=0;n<=36;n++){ | |
| (function(nn){ | |
| var b = document.createElement("button"); | |
| b.textContent = nn; | |
| b.style.cssText = | |
| "padding:8px;background:#333;color:#eee;border:none;border-radius:4px;"; | |
| b.onclick = function(){ | |
| hist.push(nn); | |
| if(hist.length>100) hist.shift(); | |
| render(); | |
| }; | |
| botoes.appendChild(b); | |
| })(n); | |
| } | |
| var ctrl = document.createElement("div"); | |
| ctrl.style.cssText = "text-align:center;margin-top:8px;"; | |
| ctrl.innerHTML = "<button id='clr'>Clear</button> <button id='cls'>Close</button>"; | |
| box.appendChild(ctrl); | |
| document.body.appendChild(painel); | |
| document.getElementById("clr").onclick = function(){ hist=[]; render(); }; | |
| document.getElementById("cls").onclick = function(){ painel.remove(); }; | |
| function render(){ | |
| var pair = parVencedor(); | |
| var ca = pair ? coverTerminalViz(pair.a) : {}; | |
| var cb = pair ? coverTerminalViz(pair.b) : {}; | |
| var ult = hist.slice(-14).reverse(); | |
| for(var l=1;l<=5;l++){ | |
| var h = document.getElementById("hist"+l); | |
| h.innerHTML = ""; | |
| for(var i=0;i<ult.length;i++){ | |
| var val = ult[i]; | |
| var wrap = document.createElement("div"); | |
| wrap.style.cssText = "display:flex;flex-direction:column;align-items:center;"; | |
| var num = document.createElement("div"); | |
| num.textContent = val; | |
| var bg = corNum(val); | |
| num.style.cssText = | |
| "padding:6px 8px;border-radius:6px;font-size:20px;background:"+bg+ | |
| ";color:"+(bg==="#000"?"#fff":"#000"); | |
| wrap.appendChild(num); | |
| // embaixo do número: Tn apenas se estiver dentro do PAR vencedor (±1) | |
| if(pair && (ca[val] || cb[val])){ | |
| var t = document.createElement("div"); | |
| t.textContent = ca[val] ? ("T"+pair.a) : ("T"+pair.b); | |
| t.style.cssText = "font-size:12px;color:#39ff14;margin-top:2px;"; | |
| wrap.appendChild(t); | |
| } | |
| h.appendChild(wrap); | |
| } | |
| } | |
| } | |
| render(); | |
| } catch (e) { | |
| alert("Erro no painel: " + (e && e.message ? e.message : e)); | |
| } | |
| })(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment