Advertisement
Guest User

Untitled

a guest
Apr 8th, 2020
323
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // See https://www.youtube.com/watch?v=JaXo_i3ktwM
  2. (() => {
  3.   const randV = [2, 4, 6, 0, 9, 3, 1, 4, 0, 5];
  4.   const randH = [7, 4, 5, 1, 8, 1, 1, 2, 2, 8];
  5.   const tileCounts = {
  6.     a: 9,
  7.     b: 2,
  8.     c: 2,
  9.     d: 4,
  10.     e: 12,
  11.     f: 2,
  12.     g: 3,
  13.     h: 2,
  14.     i: 9,
  15.     j: 1,
  16.     k: 1,
  17.     l: 4,
  18.     m: 2,
  19.     n: 6,
  20.     o: 8,
  21.     p: 2,
  22.     q: 1,
  23.     r: 6,
  24.     s: 4,
  25.     t: 6,
  26.     u: 4,
  27.     v: 2,
  28.     w: 2,
  29.     x: 1,
  30.     y: 2,
  31.     z: 1,
  32.     ' ': 2
  33.   };
  34.   const repeat = (item, c) => {
  35.     const r = [];
  36.     for (let i = 0; i < c; i++) r.push(item);
  37.     return r;
  38.   };
  39.   const allTiles = [].concat(...Object.keys(tileCounts).map(l => repeat(l.toUpperCase(), tileCounts[l])));
  40.   const grid = [];
  41.   for (let i = 0; i < 10; i++) {
  42.     grid.push(allTiles.slice(i * 10, i * 10 + 10));
  43.   }
  44.   const dupeGrid = grid => grid.map(row => row.slice());
  45.   const transposed = grid => {
  46.     const r = dupeGrid(grid);
  47.     for (x = 0; x < 10; x++) {
  48.       for (y = 0; y < 10; y++) {
  49.         r[x][y] =  grid[y][x];
  50.       }
  51.     }
  52.     return r;
  53.   };
  54.   const flipRow = r => r.slice().reverse();
  55.   const rrl = (r, n) => [...r.slice(n), ...r.slice(0, n)];
  56.   const rrr = (r, n) => flipRow(rrl(flipRow(r), n));
  57.  
  58.   const hFlipGrid = grid => grid.map(flipRow);
  59.   const vFlipGrid = grid => transposed(hFlipGrid(transposed(grid)));
  60.   const rgl = (grid, n) => grid.map((r, i) => rrl(r, n[i]));
  61.   const rgr = (grid, n) => hFlipGrid(rgl(hFlipGrid(grid), n));
  62.   const rgu = (grid, n) => transposed(rgl(transposed(grid), n));
  63.   const rgd = (grid, n) => transposed(rgr(transposed(grid), n));
  64.  
  65.   const nRowShuffle = (grid, n) => {
  66.     const r = dupeGrid(grid);
  67.     for (let i = n - 1; i < 10; i += n) {
  68.       r.unshift(r.splice(i, 1)[0]);
  69.     }
  70.     return r;
  71.   }
  72.  
  73.   const nColShuffle = (grid, n) => transposed(nRowShuffle(transposed(grid), n));
  74.  
  75.   const step0 = dupeGrid(grid);
  76.   const step1 = rgd(step0, randV);
  77.   const step2 = rgr(step1, randH);
  78.   const step3 = nRowShuffle(step2, 2);
  79.   const step4 = nColShuffle(step3, 2);
  80.  
  81.   const rs = r => r.join(',').replace(/ /g, '_');
  82.   const gs = g => '\n' + g.map(rs).join('\n') + '\n';
  83.   console.log(gs(step0), gs(step1), gs(step2), gs(step3), gs(step4));
  84.   //console.log(rs(step0[9]), rs(step1[9]), rs(step2[9]), rs(step3[0]), rs(step4[0]));
  85. })();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement