summaryrefslogtreecommitdiff
path: root/common.js
blob: dbc34847728bdaf62311f7b27ace469025297cc9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
var W=7,H=8;

function emptyboard(){
	return new Array(H).fill(0).map(function(){
		return new Array(W).fill(0).map(function(){
			return {n:0,c:0};
		});
	});
}

function bdcopy(bd){
	return bd.map(function(r){
		return r.map(function(c){
			return {n:c.n,c:c.c};
		});
	});
}

function stabilise(bd){
	var newbd;
	var changes;
	var x,y,nnei,quo;
	do {
		changes=false;
		newbd=bdcopy(bd);
		for(y=0;y<H;y++){
			for(x=0;x<W;x++){
				nnei=(y>0)+(x>0)+(y<H-1)+(x<W-1);
				if(bd[y][x].n>=nnei){
					quo=~~(bd[y][x].n/nnei);
					newbd[y][x].n-=quo*nnei;
					if(y>0)  {newbd[y-1][x].n+=quo;newbd[y-1][x].c=bd[y][x].c;}
					if(x>0)  {newbd[y][x-1].n+=quo;newbd[y][x-1].c=bd[y][x].c;}
					if(y<H-1){newbd[y+1][x].n+=quo;newbd[y+1][x].c=bd[y][x].c;}
					if(x<W-1){newbd[y][x+1].n+=quo;newbd[y][x+1].c=bd[y][x].c;}
					changes=true;
				}
			}
		}
		bd=newbd;
	} while(changes);
	return bd;
}