- const A = [0,7,8,15,16,23,24,31] 
- const B = [1,2,3,4,5,6,25,26,27,28,29,30,9,17,22 ] 
- const C = [10,11,12,13,18,19,20,21, 14] 
-   
- function shuffleBoard(length) { 
-   const result = [] 
-   
-   for(let i = 0; i < length; i += 1) { 
-     while (true) { 
-       let bucket = null 
-       let rand = Math.random() 
-       if (rand < 0.5) { 
-         bucket = A 
-       } else if (rand < 0.95) { 
-         bucket = B 
-       } else { 
-         bucket = C 
-       } 
-   
-       const pick = bucket[Math.floor(Math.random() * bucket.length)] 
-   
-       if (!result.slice(-6).includes(pick)) { 
-         result.push(pick) 
-         break 
-       } 
-     } 
-   } 
-   
-   return result 
- } 
-   
- function validate(result) { 
-   const ratios = { 
-     'A': result.filter(xs => A.includes(xs)).length / result.length, 
-     'B': result.filter(xs => B.includes(xs)).length / result.length, 
-     'C': result.filter(xs => C.includes(xs)).length / result.length, 
-   } 
-   
-   return ratios 
- } 
-   
- const result = shuffleBoard(5000) 
- console.log(JSON.stringify(validate(result))) 
-   
-   
				Y29uc3QgQSA9IFswLDcsOCwxNSwxNiwyMywyNCwzMV0KY29uc3QgQiA9IFsxLDIsMyw0LDUsNiwyNSwyNiwyNywyOCwyOSwzMCw5LDE3LDIyIF0KY29uc3QgQyA9IFsxMCwxMSwxMiwxMywxOCwxOSwyMCwyMSwgMTRdCgpmdW5jdGlvbiBzaHVmZmxlQm9hcmQobGVuZ3RoKSB7CiAgY29uc3QgcmVzdWx0ID0gW10KCiAgZm9yKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSArPSAxKSB7CiAgICB3aGlsZSAodHJ1ZSkgewogICAgICBsZXQgYnVja2V0ID0gbnVsbAogICAgICBsZXQgcmFuZCA9IE1hdGgucmFuZG9tKCkKICAgICAgaWYgKHJhbmQgPCAwLjUpIHsKICAgICAgICBidWNrZXQgPSBBCiAgICAgIH0gZWxzZSBpZiAocmFuZCA8IDAuOTUpIHsKICAgICAgICBidWNrZXQgPSBCCiAgICAgIH0gZWxzZSB7CiAgICAgICAgYnVja2V0ID0gQwogICAgICB9CgogICAgICBjb25zdCBwaWNrID0gYnVja2V0W01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGJ1Y2tldC5sZW5ndGgpXQoKICAgICAgaWYgKCFyZXN1bHQuc2xpY2UoLTYpLmluY2x1ZGVzKHBpY2spKSB7CiAgICAgICAgcmVzdWx0LnB1c2gocGljaykKICAgICAgICBicmVhawogICAgICB9CiAgICB9CiAgfQoKICByZXR1cm4gcmVzdWx0Cn0KCmZ1bmN0aW9uIHZhbGlkYXRlKHJlc3VsdCkgewogIGNvbnN0IHJhdGlvcyA9IHsKICAgICdBJzogcmVzdWx0LmZpbHRlcih4cyA9PiBBLmluY2x1ZGVzKHhzKSkubGVuZ3RoIC8gcmVzdWx0Lmxlbmd0aCwKICAgICdCJzogcmVzdWx0LmZpbHRlcih4cyA9PiBCLmluY2x1ZGVzKHhzKSkubGVuZ3RoIC8gcmVzdWx0Lmxlbmd0aCwKICAgICdDJzogcmVzdWx0LmZpbHRlcih4cyA9PiBDLmluY2x1ZGVzKHhzKSkubGVuZ3RoIC8gcmVzdWx0Lmxlbmd0aCwKICB9CgogIHJldHVybiByYXRpb3MKfQoKY29uc3QgcmVzdWx0ID0gc2h1ZmZsZUJvYXJkKDUwMDApCmNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHZhbGlkYXRlKHJlc3VsdCkpKQoK