Skip to content

Instantly share code, notes, and snippets.

@simeg
Forked from hughrawlinson/solver.js
Created May 14, 2017 16:44
Show Gist options
  • Save simeg/3ca937de3add4e4e787023c8a83f3b20 to your computer and use it in GitHub Desktop.
Save simeg/3ca937de3add4e4e787023c8a83f3b20 to your computer and use it in GitHub Desktop.
Naive 2048 Solver
var a = (keyCode)=>{
var keyEvent = document.createEvent("Events");
keyEvent.initEvent("keydown", true, true);
keyEvent.keyCode = keyCode;
keyEvent.which = keyCode;
document.body.dispatchEvent(keyEvent);
}
const LEFT = 37;
const UP = 38;
const RIGHT = 39;
const DOWN = 40;
var b = () => Array.prototype.reduce.bind(document.querySelector(".tile-container").childNodes)((acc,item)=>acc+item.className);
var hash = null;
var c = 0;
var f = function() {
var tmphash = b();
a(DOWN);
a(LEFT);
a(DOWN);
if (tmphash == hash) {
if (c == 1) {
a(RIGHT);
a(LEFT);
c = 0;
} else {
c++;
}
}
hash = tmphash;
setTimeout(f,100);
}
f();
var a = (keyCode)=>{
var keyEvent = document.createEvent("Events");
keyEvent.initEvent("keydown", true, true);
keyEvent.keyCode = keyCode;
keyEvent.which = keyCode;
document.body.dispatchEvent(keyEvent);
}
const LEFT = 37;
const UP = 38;
const RIGHT = 39;
const DOWN = 40;
const RESTART = 82;
var b = () => Array.prototype.reduce.bind(document.querySelector(".tile-container").childNodes)((acc,item)=>acc+item.className);
var g = () => Array.prototype.map.bind(document.querySelector(".tile-container").childNodes)((item)=>
Array.prototype.filter.bind(item)((classstring)=>/./.test.bind(new RegExp("tile-[0-9]+", 'g'))(classstring)[0].split('-')[1]
).split('-')[1]);
document.querySelector(".tile-container").childNodes[0].className.split(" ").filter(
(class) => {
return RegExp.prototype.test.bind(new RegExp(class));
}
)
var hash = null;
var c = true;
var counter = 0;
var failedcounter = 0;
var d = true;
var f = function() {
var tmphash = b();
if(c){
a(DOWN);
a(DOWN);
} else {
a(LEFT);
}
if (tmphash == hash) {
c = !c;
counter = 0;
failedcounter += 1;
} else {
failedcounter = 0;
}
hash = tmphash;
counter += 1;
if(counter>15&&counter%5==0){
console.log((c?"DOWN":"LEFT")+" "+counter);
}
if (failedcounter > 3) {
a(RIGHT);
a(LEFT);
}
if (failedcounter > 4) {
a(UP);
a(DOWN);
}
if (failedcounter > 30){
a(RESTART);
console.log()
}
if (d) {
setTimeout(f,50);
}
}
f();
var a = (keyCode)=>{
var keyEvent = document.createEvent("Events");
keyEvent.initEvent("keydown", true, true);
keyEvent.keyCode = keyCode;
keyEvent.which = keyCode;
document.body.dispatchEvent(keyEvent);
}
const LEFT = 37;
const UP = 38;
const RIGHT = 39;
const DOWN = 40;
const RESTART = 82;
var b = () => Array.prototype.reduce.bind(document.querySelector(".tile-container").childNodes)((acc,item)=>acc+item.className);
var hash = null;
var c = true;
var counter = 0;
var failedcounter = 0;
var d = true;
var logs = [];
var f = function() {
var tmphash = b();
if(c){
a(DOWN);
a(DOWN);
} else {
a(LEFT);
}
if (tmphash == hash) {
c = !c;
counter = 0;
failedcounter += 1;
} else {
failedcounter = 0;
}
hash = tmphash;
counter += 1;
if(counter>15&&counter%5==0){
}
if (failedcounter > 3) {
a(RIGHT);
a(LEFT);
}
if (failedcounter > 4) {
a(UP);
a(DOWN);
}
if (failedcounter > 30){
a(RESTART);
logs.push(tmphash);
if(tmphash.indexOf("2048")>=0){
d = false;
}
}
if (d) {
setTimeout(f,50);
}
}
f();
var a = (keyCode)=>{
var keyEvent = document.createEvent("Events");
keyEvent.initEvent("keydown", true, true);
keyEvent.keyCode = keyCode;
keyEvent.which = keyCode;
document.body.dispatchEvent(keyEvent);
}
const LEFT = 37;
const UP = 38;
const RIGHT = 39;
const DOWN = 40;
const RESTART = 82;
var matrix = ()=>{let matrix=[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]];Array.prototype.map.bind(document.querySelector(".tile-container").childNodes)((item)=>/tile tile-([0-9]+) tile-position-([0-9]+)-([0-9]+)/.exec(item.className).slice(1)).forEach(each=>matrix[parseInt(each[1])-1][parseInt(each[2])-1] = Math.log2(each[0]).toString(13));return matrix;};
var b = () => Array.prototype.reduce.bind(matrix())((acc,item)=>acc.concat(item),[]).join('');
var hash = null;
var counter = 0;
var failedcounter = 0;
var f = function() {
var tmphash = b();
if (tmphash === hash) {
failedcounter += 1;
} else {
failedcounter = 0;
}
hash = tmphash;
counter += 1;
if (Math.random() < 0.1) {
a(RIGHT);
a(DOWN);
setTimeout(f,0);
return;
}
if (Math.random() > 0.7) {
a(LEFT);
}
if (failedcounter > 0) {
a(DOWN);
}
if (failedcounter > 10) {
a(LEFT);
}
if (failedcounter > 20) {
a(RIGHT);
a(LEFT);
}
if (failedcounter > 30) {
a(UP);
a(DOWN);
}
if (failedcounter > 70){
const score = parseInt(document.querySelector('.score-container').innerText.split('+')[0]);
console.log(tmphash.split('0').length);
if(tmphash.indexOf('2048') < 0 && score > 0 && tmphash.split('0').length < 3){
a(RESTART);
setTimeout(f,200);
} else { debugger; }
return;
}
setTimeout(f,10);
}
f();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment