generate-maze
Version:
Maze generator using a JavaScript implementation of Eller's Algorithm, as described here: http://www.neocomputer.org/projects/eller.html
3 lines (2 loc) • 2.39 kB
JavaScript
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e||self).generateMaze=t()}(this,function(){function e(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function t(t){for(var n=1;n<arguments.length;n++){var o=null!=arguments[n]?arguments[n]:{};n%2?e(Object(o),!0).forEach(function(e){r(t,e,o[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(o)):e(Object(o)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(o,e))})}return t}function r(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function n(e){return e.slice(0,-1)}function o(e,t=0){return t?Array.from(Array(t-e).keys()).map(t=>t+e):Array.from(Array(e).keys())}function c(e){return[...new Set(e)]}function f(e,t){const r=c(e.map(e=>e.set)).filter(Boolean),n=(f=o(1,e.length+1),i=r,[f,i].reduce((e,t)=>e.filter(e=>!t.includes(e)))).sort(()=>.5-t());var f,i;e.filter(e=>!e.set).forEach((e,t)=>e.set=n[t])}function i(e,t,r=.5){n(e).forEach((n,o)=>{const c=e[o+1],f=n.set!==c.set,i=t()<=r;f&&i&&(function(e,t,r){e.forEach(e=>{e.set===t&&(e.set=r)})}(e,c.set,n.set),n.right=!1,c.left=!1)})}return function(e=8,r=e,u=!0,s=1){const l=function(e){return function(){let t=e+=1831565813;return t=Math.imul(t^t>>>15,1|t),t^=t+Math.imul(t^t>>>7,61|t),((t^t>>>14)>>>0)/4294967296}}(s),a=[],p=o(e);for(let t=0;t<r;t+=1){const n=p.map(n=>({x:n,y:t,top:u||t>0,left:u||n>0,bottom:u||t<r-1,right:u||n<e-1}));a.push(n)}n(a).forEach((e,r)=>{f(e,l),i(e,l),function(e,r,n){const o=Object.values(function(e,r){let n=c(e.map(e=>e.set)).reduce((e,r)=>t(t({},e),{},{[r]:[]}),{});return e.forEach(e=>n[e.set].push(e)),n}(e)),{ceil:f}=Math;o.forEach(e=>{(function(e,t,r){t=null==t?1:t;const n=null==e?0:e.length;if(!n||t<1)return[];t=t>n?n:t;let o=-1;const c=n-1,f=[...e];for(;++o<t;){const e=o+Math.floor(r()*(c-o+1)),t=f[e];f[e]=f[o],f[o]=t}return f.slice(0,t)})(e,f(n()*e.length),n).forEach(e=>{if(e){const t=r[e.x];e.bottom=!1,t.top=!1,t.set=e.set}})})}(e,a[r+1],l)});const h=(b=a)[b.length-1];var b;return f(h,l),i(h,l,1),a}});
//# sourceMappingURL=generate-maze.umd.js.map