-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsolver-build.js
More file actions
1 lines (1 loc) · 5.67 KB
/
solver-build.js
File metadata and controls
1 lines (1 loc) · 5.67 KB
1
"use strict";function _slicedToArray(a,b){return _arrayWithHoles(a)||_iterableToArrayLimit(a,b)||_nonIterableRest()}function _nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}function _iterableToArrayLimit(a,b){if(Symbol.iterator in Object(a)||"[object Arguments]"===Object.prototype.toString.call(a)){var c=[],d=!0,e=!1,f=void 0;try{for(var g,h=a[Symbol.iterator]();!(d=(g=h.next()).done)&&(c.push(g.value),!(b&&c.length===b));d=!0);}catch(a){e=!0,f=a}finally{try{d||null==h["return"]||h["return"]()}finally{if(e)throw f}}return c}}function _arrayWithHoles(a){if(Array.isArray(a))return a}function _toConsumableArray(a){return _arrayWithoutHoles(a)||_iterableToArray(a)||_nonIterableSpread()}function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance")}function _iterableToArray(a){if(Symbol.iterator in Object(a)||"[object Arguments]"===Object.prototype.toString.call(a))return Array.from(a)}function _arrayWithoutHoles(a){if(Array.isArray(a)){for(var b=0,c=Array(a.length);b<a.length;b++)c[b]=a[b];return c}}function _classCallCheck(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function _defineProperties(a,b){for(var c,d=0;d<b.length;d++)c=b[d],c.enumerable=c.enumerable||!1,c.configurable=!0,"value"in c&&(c.writable=!0),Object.defineProperty(a,c.key,c)}function _createClass(a,b,c){return b&&_defineProperties(a.prototype,b),c&&_defineProperties(a,c),a}var Sudoku=function(){function a(b){if(_classCallCheck(this,a),Array.isArray(b[0]))this.state=b;else if("string"==typeof b){this.state=[];for(var c,d=0;9>d;d++)c=b.slice(9*d,9*d+9),this.state.push(c.split("").map(function(a){return+a}))}this.allNumbers=[1,2,3,4,5,6,7,8,9]}return _createClass(a,[{key:"getRow",value:function getRow(a){return this.state[a]}},{key:"getColumn",value:function getColumn(a){return this.state.map(function(b){return b[a]})}},{key:"checkNumberExistsInRow",value:function checkNumberExistsInRow(a,b){return this.getRow(a).includes(b)}},{key:"checkNumberExistsInColumn",value:function checkNumberExistsInColumn(a,b){return this.getColumn(a).includes(b)}},{key:"checkNumberExistsInBox",value:function checkNumberExistsInBox(a,b,c){for(var d=3*parseInt(a/3),e=3*parseInt(b/3),f=d;f<d+3;f++)for(var g=e;g<e+3;g++)if(this.state[f][g]===c)return!0;return!1}},{key:"getPossibleValues",value:function getPossibleValues(a,b){var c=this;return this.state[a][b]?[]:this.allNumbers.filter(function(d){return!c.checkNumberExistsInColumn(b,d)&&!c.checkNumberExistsInRow(a,d)&&!c.checkNumberExistsInBox(a,b,d)})}},{key:"print",value:function print(){this.state.map(function(){})}},{key:"getNextEmptyPosition",value:function getNextEmptyPosition(){var a,b;return this.state.some(function(c,d){return c.some(function(c,e){if(0===c)return a=d,b=e,!0})}),[a,b]}}]),a}(),count=0,gameSolved=!1,recursionLimit=1e7,clone=function(a){return a.map(function(a){return _toConsumableArray(a)})},solve=function(a){if(!gameSolved){var b=a.getNextEmptyPosition(),c=_slicedToArray(b,2),d=c[0],e=c[1];if(void 0===d||void 0===e)return a.print(),void(gameSolved=a.state);var f=a.getPossibleValues(d,e);f.forEach(function(b){if(count++<recursionLimit){var c=clone(a.state);c[d][e]=b;var f=new Sudoku(c);solve(f)}})}};function solveHandler(){var a="";gameSolved=!1;try{for(var c=0;9>c;c++)for(var d,e=0;9>e;e++){if(d=+document.getElementById(""+c+e).value,0>d||9<d||isNaN(d))throw new Error("Error");a+=d}}catch(a){return void alert("Please enter valid numbers!")}if(!a.split("").reduce(function(b,a){return b+ +a},0))return void alert("Enter at least one cell.");var b=new Sudoku(a);if(b.print(),solve(b),!gameSolved)alert("Unable to solve..!");else for(var f=0;9>f;f++)for(var g=0;9>g;g++)document.getElementById(""+f+g).value=gameSolved[f][g]}function clearHandler(){for(var a=0;9>a;a++)for(var b=0;9>b;b++)document.getElementById(""+a+b).value=""}var samples=["004300209005009001070060043006002087190007400050083000600000105003508690042910300","040100050107003960520008000000000017000906800803050620090060543600080700250097100","600120384008459072000006005000264030070080006940003000310000050089700000502000190","497200000100400005000016098620300040300900000001072600002005870000600004530097061","005910308009403060027500100030000201000820007006007004000080000640150700890000420","100005007380900000600000480820001075040760020069002001005039004000020100000046352","009065430007000800600108020003090002501403960804000100030509007056080000070240090","000000657702400100350006000500020009210300500047109008008760090900502030030018206","503070190000006750047190600400038000950200300000010072000804001300001860086720005","060720908084003001700100065900008000071060000002010034000200706030049800215000090","004083002051004300000096710120800006040000500830607900060309040007000205090050803","000060280709001000860320074900040510007190340003006002002970000300800905500000021","004300000890200670700900050500008140070032060600001308001750900005040012980006005","008070100120090054000003020604010089530780010009062300080040607007506000400800002","065370002000001370000640800097004028080090001100020940040006700070018050230900060","005710329000362800004000000100000980083900250006003100300106000409800007070029500","200005300000073850000108904070009001651000040040200080300050000580760100410030096","040800500080760092001005470056309000009001004320500010000200700700090030005008026","050083017000100400304005608000030009090824500006000070009000050007290086103607204","700084005300701020080260401624109038803600010000000002900000000001005790035400006"];function prePopulateRandom(){for(var a=samples[Math.floor(Math.random()*samples.length)],b=0,c=0;9>c;c++)for(var d=0;9>d;d++,b++)document.getElementById(""+c+d).value="0"===a[b]?"":a[b]}