var ProblemMapGenerator=function(t){var e={};function n(i){if(e[i])return e[i].exports;var o=e[i]={i:i,l:!1,exports:{}};return t[i].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=t,n.c=e,n.d=function(t,e,i){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:i})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var o in t)n.d(i,o,function(e){return t[e]}.bind(null,o));return i},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=2)}([function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=function(){function t(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}return function(e,n,i){return n&&t(e.prototype,n),i&&t(e,i),e}}();e.MapNode=function(){function t(e){!function(e,n){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this);var n=e.id,i=e.point,o=e.position,r=e.label;this.id=n,this.point=i,this.position=o,this.label=r,this.childs=[]}return i(t,[{key:"addChildNode",value:function(t){t.id!==this.id&&-1===this.childs.indexOf(t)&&this.childs.push(t)}},{key:"addChildNodes",value:function(t){var e=this;t.forEach(function(t){return e.addChildNode(t)})}},{key:"removeChildNode",value:function(t){-1<this.childs.indexOf(t)&&this.childs.splice(this.childs.indexOf(t),1)}},{key:"removeChildNodes",value:function(t){var e=this;t.forEach(function(t){return e.removeChildNode(t)})}}]),t}()},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=function(){function t(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}return function(e,n,i){return n&&t(e.prototype,n),i&&t(e,i),e}}();e.Point=function(){function t(e,n){!function(e,n){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this),this.x=e,this.y=n}return i(t,[{key:"distance",value:function(t){return Math.sqrt(Math.pow(this.x-t.x,2)+Math.pow(this.y-t.y,2))}}]),t}()},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=n(3);Object.defineProperty(e,"Map",{enumerable:!0,get:function(){return i.Map}});var o=n(0);Object.defineProperty(e,"MapNode",{enumerable:!0,get:function(){return o.MapNode}});var r=n(1);Object.defineProperty(e,"Point",{enumerable:!0,get:function(){return r.Point}});var u=n(4);Object.defineProperty(e,"Random",{enumerable:!0,get:function(){return u.Random}})},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Map=void 0;var i=function(){function t(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}return function(e,n,i){return n&&t(e.prototype,n),i&&t(e,i),e}}(),o=n(0),r=n(1);e.Map=function(){function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this.setSettings(e),this.random=null}return i(t,[{key:"setSettings",value:function(t){this.cols=t.cols||10,this.rows=t.rows||10,this.width=t.width||100,this.height=t.height||100,this.nodes=[]}},{key:"getNodes",value:function(){return 0===this.nodes.length&&this.buildMap(),this.nodes}},{key:"injectRandom",value:function(t){this.random=t}},{key:"buildMap",value:function(){this.calculateGutter(),this.addNodes(),this.addConnections(),this.randomizeNodes()}},{key:"calculateGutter",value:function(){this.gutter={x:this.width/this.cols,y:this.height/this.rows}}},{key:"addNodes",value:function(){for(var t=0;t<this.rows;t++)for(var e=0;e<this.cols;e++){var n=e*this.gutter.x+this.gutter.x/2,i=t*this.gutter.y+this.gutter.y/2;this.nodes.push(new o.MapNode({id:t+"-"+e,point:new r.Point(t,e),position:new r.Point(n,i)}))}}},{key:"addConnections",value:function(){var t=this;this.nodes.forEach(function(e){t.addConnectionsToNode(e)})}},{key:"addConnectionsToNode",value:function(t){var e=this;[new r.Point(t.point.x,t.point.y+1),new r.Point(t.point.x+1,t.point.y+1),new r.Point(t.point.x+1,t.point.y),new r.Point(t.point.x,t.point.y-1),new r.Point(t.point.x-1,t.point.y),new r.Point(t.point.x-1,t.point.y-1)].forEach(function(n){var i=e.findNodeByPoint(n);i&&t.addChildNode(i)})}},{key:"randomizeNodes",value:function(){var t=this;this.nodes.forEach(function(e){e.position=t.randomizePosition(e.position),t.randomizeChildNodes(e)})}},{key:"randomizePosition",value:function(t){var e={x:this.random.getBetweenMinMax(t.x-this.gutter.x/2,t.x+this.gutter.x/2),y:this.random.getBetweenMinMax(t.y-this.gutter.y/2,t.y+this.gutter.y/2)};return new r.Point(Math.min(this.width-this.gutter.x/2,Math.max(this.gutter.x/2,e.x)),Math.min(this.height-this.gutter.y/2,Math.max(this.gutter.y/2,e.y)))}},{key:"randomizeChildNodes",value:function(t){var e=this;t.childs.filter(function(){return 1===e.random.getBetweenMinMax(0,5)}).forEach(function(e){t.removeChildNode(e),e.removeChildNode(t)})}},{key:"findNodeByPosition",value:function(t){var e=1<arguments.length&&void 0!==arguments[1]?arguments[1]:4;return this.nodes.find(function(n){return Math.abs(t.x-n.position.x)+Math.abs(t.y-n.position.y)<=e})}},{key:"findNodeByPoint",value:function(t){return this.nodes.find(function(e){return e.point.x===t.x&&e.point.y===t.y})}}]),t}()},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=function(){function t(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}return function(e,n,i){return n&&t(e.prototype,n),i&&t(e,i),e}}();e.Random=function(){function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t)}return i(t,null,[{key:"getBetweenMinMax",value:function(t,e){var n=Math.ceil(t),i=Math.floor(e);return Math.floor(Math.random()*(i-n))+n}}]),t}()}]);