Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // See https://www.youtube.com/watch?v=JaXo_i3ktwM
- (() => {
- const randV = [2, 4, 6, 0, 9, 3, 1, 4, 0, 5];
- const randH = [7, 4, 5, 1, 8, 1, 1, 2, 2, 8];
- const tileCounts = {
- a: 9,
- b: 2,
- c: 2,
- d: 4,
- e: 12,
- f: 2,
- g: 3,
- h: 2,
- i: 9,
- j: 1,
- k: 1,
- l: 4,
- m: 2,
- n: 6,
- o: 8,
- p: 2,
- q: 1,
- r: 6,
- s: 4,
- t: 6,
- u: 4,
- v: 2,
- w: 2,
- x: 1,
- y: 2,
- z: 1,
- ' ': 2
- };
- const repeat = (item, c) => {
- const r = [];
- for (let i = 0; i < c; i++) r.push(item);
- return r;
- };
- const allTiles = [].concat(...Object.keys(tileCounts).map(l => repeat(l.toUpperCase(), tileCounts[l])));
- const grid = [];
- for (let i = 0; i < 10; i++) {
- grid.push(allTiles.slice(i * 10, i * 10 + 10));
- }
- const dupeGrid = grid => grid.map(row => row.slice());
- const transposed = grid => {
- const r = dupeGrid(grid);
- for (x = 0; x < 10; x++) {
- for (y = 0; y < 10; y++) {
- r[x][y] = grid[y][x];
- }
- }
- return r;
- };
- const flipRow = r => r.slice().reverse();
- const rrl = (r, n) => [...r.slice(n), ...r.slice(0, n)];
- const rrr = (r, n) => flipRow(rrl(flipRow(r), n));
- const hFlipGrid = grid => grid.map(flipRow);
- const vFlipGrid = grid => transposed(hFlipGrid(transposed(grid)));
- const rgl = (grid, n) => grid.map((r, i) => rrl(r, n[i]));
- const rgr = (grid, n) => hFlipGrid(rgl(hFlipGrid(grid), n));
- const rgu = (grid, n) => transposed(rgl(transposed(grid), n));
- const rgd = (grid, n) => transposed(rgr(transposed(grid), n));
- const nRowShuffle = (grid, n) => {
- const r = dupeGrid(grid);
- for (let i = n - 1; i < 10; i += n) {
- r.unshift(r.splice(i, 1)[0]);
- }
- return r;
- }
- const nColShuffle = (grid, n) => transposed(nRowShuffle(transposed(grid), n));
- const step0 = dupeGrid(grid);
- const step1 = rgd(step0, randV);
- const step2 = rgr(step1, randH);
- const step3 = nRowShuffle(step2, 2);
- const step4 = nColShuffle(step3, 2);
- const rs = r => r.join(',').replace(/ /g, '_');
- const gs = g => '\n' + g.map(rs).join('\n') + '\n';
- console.log(gs(step0), gs(step1), gs(step2), gs(step3), gs(step4));
- //console.log(rs(step0[9]), rs(step1[9]), rs(step2[9]), rs(step3[0]), rs(step4[0]));
- })();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement