sr-scrambler
Version:
utilitiy to generate scrambles for twisty puzzles (rubiks cube, megaminx, pyraminx, skewb, square1)
2 lines • 3.31 kB
JavaScript
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports["sr-scrambler"]=t():e["sr-scrambler"]=t()}(self,(function(){return(()=>{"use strict";var e,t,o,r={d:(e,t)=>{for(var o in t)r.o(t,o)&&!r.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:t[o]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},l={};function n(e){return!Array.isArray(e)||e.length<1?null:e[Math.floor(Math.random()*e.length)]}r.r(l),r.d(l,{cube:()=>p,megaminx:()=>a,pyraminx:()=>c,skewb:()=>h,square1:()=>d}),function(e){e.X="x",e.Y="y",e.Z="z"}(e||(e={})),function(e){e.L="L",e.R="R",e.U="U",e.D="D",e.F="F",e.B="B"}(t||(t={})),function(e){e.Double="2",e.CounterClockwise="'",e.Clockwise=""}(o||(o={}));const i=(e,t,o,r,l)=>{let i,s,f=[];for(var u=0;u<l;u++){do{s=n(e)}while(t[i]===t[s]);f.push({face:s,depth:Math.floor(Math.random()*r)+1,modifier:n(o)}),i=s}return f},s=["D","R"],f=["++","--"],u=e=>e.map((e=>Array.isArray(e)?u(e)+"\n":(e=>{const t=e.depth>2?`${e.depth}`:"",o=e.depth>1?"w":"";return`${t}${e.face}${o}${e.modifier}`})(e))).join(" "),p=(r=3,l=21)=>u(((r=3,l=21)=>i([t.L,t.R,t.U,t.D,t.F,t.B],{[t.L]:e.X,[t.R]:e.X,[t.U]:e.Y,[t.D]:e.Y,[t.F]:e.Z,[t.B]:e.Z},[o.Double,o.CounterClockwise,o.Clockwise],Math.floor(r/2),l))(r,l)),a=()=>u(((e=10,t=6)=>{let o=[];for(let r=0;r<t;r++){o[r]=[];for(let t=0;t<e;t++)o[r].push({face:s[t%s.length],modifier:n(f),depth:1});o[r].push({face:"U",modifier:n(["","'"]),depth:1})}return o})()),c=e=>u(((e=10)=>{let r=i([t.L,t.R,t.U,t.B],{[t.L]:"L",[t.R]:"R",[t.U]:"U",[t.B]:"B"},[o.CounterClockwise,o.Clockwise],1,e);var l;return(l=["l","r","u","b"],l.map((e=>({value:e,sort:Math.random()}))).sort(((e,t)=>e.sort-t.sort)).map((({value:e})=>e))).forEach((e=>{let t=n([o.Clockwise,o.CounterClockwise,null]);null!=t&&r.push({face:e,modifier:t,depth:1})})),r})(e)),h=e=>u(((e=9)=>i([t.L,t.R,t.U,t.B],{[t.L]:"L",[t.R]:"R",[t.U]:"U",[t.B]:"B"},[o.CounterClockwise,o.Clockwise],1,e))(e)),d=e=>((e=12)=>{let t=[2,1,2,1,2,1,2,1],o=[1,2,1,2,1,2,1,2];const r=e=>{for(;0!=e;)if(e<0){let o=t.shift();e+=o,t.push(o)}else if(e>0){let o=t.pop();e-=o,t.unshift(o)}},l=e=>{for(;0!=e;)if(e<0){let t=o.shift();e+=t,o.push(t)}else if(e>0){let t=o.pop();e-=t,o.unshift(t)}},i=()=>{let e=0,r=0,l=0;for(let o=t.length;o>0&&l<6;o--)l+=t[o-1],e++;l=0;for(let e=0;e<o.length&&l<6;e++)l+=o[e],r++;const n=t.splice(t.length-e,t.length),i=o.splice(0,r);t=t.concat(i),o=n.concat(o)},s=e=>{let t=0;for(let o=0;o<e.length&&t<6;o++)if(t+=e[o],t>6)return!1;return!0},f=(e,t)=>{if(t<0){for(;t<0;){let o=e.shift();if(o>Math.abs(t))return!1;t+=o,e.push(o)}return s(e)}if(t>0){for(;t>0;){let o=e.pop();if(t<o)return!1;t-=o,e.unshift(o)}return s(e)}return!0},u=()=>{let e=[],r=[];for(let l=-6;l<=6;l++)f([...t],l)&&e.push(l),f([...o],l)&&r.push(l);return{possibleTop:e,possibleBottom:r}};let p=[];for(let t=0;t<e;t++){let e=u(),t=0,o=0;do{t=n(e.possibleTop),o=n(e.possibleBottom)}while(0===t&&0===o);p.push({top:t,bottom:o}),r(t),l(o),i()}return p})(e).map((e=>` (${e.top}, ${e.bottom}) /`)).join("");return l})()}));
//# sourceMappingURL=index.js.map