Drafting a module to share compress grids
This commit is contained in:
parent
43900cfb64
commit
78ce48ca5c
1 changed files with 78 additions and 0 deletions
78
js/Share.js
Normal file
78
js/Share.js
Normal file
|
@ -0,0 +1,78 @@
|
|||
return {
|
||||
compress: compress,
|
||||
naive: naive
|
||||
}
|
||||
|
||||
function compress(grid) {
|
||||
var state = {
|
||||
data: '',
|
||||
stack: 0,
|
||||
size: 0
|
||||
};
|
||||
var color;
|
||||
var count;
|
||||
for(var i = 0; i < grid.length; i++) {
|
||||
for(var j = 0; j < grid.length; j++) {
|
||||
if(color == undefined) {
|
||||
color = grid[i][j];
|
||||
} else if(grid[i][j] != color) {
|
||||
} else if(count > 6) {
|
||||
} else {
|
||||
count++;
|
||||
}
|
||||
}
|
||||
}
|
||||
return atob(compressed);
|
||||
}
|
||||
|
||||
function appendLength(state, n) {
|
||||
append(state, 1);
|
||||
for(var i = 0; i < 3; i++) {
|
||||
append(state, n % 2);
|
||||
n >>= 1;
|
||||
}
|
||||
}
|
||||
|
||||
function appendColor(state, c) {
|
||||
append(state, 0);
|
||||
for(var i = 0; i < 3; i++) {
|
||||
append(state, c % 2);
|
||||
c >>= 1;
|
||||
}
|
||||
}
|
||||
|
||||
function appendColorNaive(state, c) {
|
||||
for(var i = 0; i < 3; i++) {
|
||||
append(state, c % 2);
|
||||
c >>= 1;
|
||||
}
|
||||
}
|
||||
|
||||
function append(state, one) {
|
||||
if(state.size > 7) {
|
||||
flush(state);
|
||||
}
|
||||
state.stack = 2*state.stack + (one ? 1 : 0);
|
||||
state.size++;
|
||||
}
|
||||
|
||||
function flush(state) {
|
||||
state.data = state.data + String.fromCharCode(state.stack);
|
||||
state.stack = 0;
|
||||
state.size = 0;
|
||||
}
|
||||
|
||||
function naive(grid) {
|
||||
var state = {
|
||||
data: '',
|
||||
stack: 0,
|
||||
size: 0
|
||||
};
|
||||
for(var i = 0; i < grid.length; i++) {
|
||||
for(var j = 0; j < grid.length; j++) {
|
||||
appendColorNaive(state, grid[i][j]);
|
||||
}
|
||||
}
|
||||
flush(state);
|
||||
return btoa(state.data);
|
||||
}
|
Loading…
Reference in a new issue