sudok.js 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361
  1. function res() {
  2. a0 = [];
  3. a1 = [];
  4. a2 = [];
  5. a3 = [];
  6. a4 = [];
  7. a5 = [];
  8. a6 = [];
  9. a7 = [];
  10. a8 = [];
  11. while (a0.length < 9) {
  12. do {
  13. unic = true;
  14. a = Math.floor(Math.random() * 9) + 1;
  15. for (i = 0; i < a0.length; i++) {
  16. if (a == a0[i]) {
  17. // такое число уже было
  18. unic = false;
  19. break;
  20. }
  21. }
  22. } while (!unic) // повторить генерацию числа
  23. a0.push(a);
  24. }
  25. while (a1.length < 9) {
  26. do {
  27. unic = true;
  28. a = Math.floor(Math.random() * 9) + 1;
  29. for (i = 0; i < a1.length; i++) {
  30. if (a == a1[i]) {
  31. // такое число уже было
  32. unic = false;
  33. break;
  34. }
  35. }
  36. } while (!unic) // повторить генерацию числа
  37. a1.push(a);
  38. for (q = 0; q < 3; q++) {
  39. for (t = 0; t < 3; t++)
  40. if (a1[q] == a0[t]) {
  41. a1.length = 0
  42. }
  43. }
  44. for (q = 3; q < 6; q++) {
  45. for (t = 3; t < 6; t++)
  46. if (a1[q] == a0[t]) {
  47. a1.length = 0
  48. }
  49. }
  50. for (q = 6; q < 9; q++) {
  51. for (t = 6; t < 9; t++)
  52. if (a1[q] == a0[t]) {
  53. a1.length = 0
  54. }
  55. }
  56. }
  57. while (a2.length < 9) {
  58. do {
  59. unic = true;
  60. a = Math.floor(Math.random() * 9) + 1;
  61. for (i = 0; i < a1.length; i++) {
  62. if (a == a2[i]) {
  63. // такое число уже было
  64. unic = false;
  65. break;
  66. }
  67. }
  68. } while (!unic) // повторить генерацию числа
  69. a2.push(a);
  70. for (q = 0; q < 3; q++) {
  71. for (t = 0; t < 3; t++)
  72. if (a2[q] == a0[t] || a2[q] == a1[t]) {
  73. a2.length = 0
  74. }
  75. }
  76. for (q = 3; q < 6; q++) {
  77. for (t = 3; t < 6; t++)
  78. if (a2[q] == a0[t] || a2[q] == a1[t]) {
  79. a2.length = 0
  80. }
  81. }
  82. for (q = 6; q < 9; q++) {
  83. for (t = 6; t < 9; t++)
  84. if (a2[q] == a0[t] || a2[q] == a1[t]) {
  85. a2.length = 0
  86. }
  87. }
  88. }
  89. while (a3.length < 9) {
  90. do {
  91. unic = true;
  92. a = Math.floor(Math.random() * 9) + 1;
  93. for (i = 0; i < a3.length; i++) {
  94. if (a == a3[i]) {
  95. // такое число уже было
  96. unic = false;
  97. break;
  98. }
  99. }
  100. } while (!unic) // повторить генерацию числа
  101. a3.push(a);
  102. for (c = 0; c < a3.length; c++) {
  103. if (a3[c] == a2[c] || a3[c] == a1[c] || a3[c] == a0[c]) {
  104. a3.length = 0
  105. }
  106. }
  107. }
  108. var mek = 0
  109. while (a4.length < 9) {
  110. mek++
  111. if (mek == 20000) {
  112. res()
  113. }
  114. do {
  115. unic = true;
  116. a = Math.floor(Math.random() * 9) + 1;
  117. for (i = 0; i < a1.length; i++) {
  118. if (a == a4[i]) {
  119. // такое число уже было
  120. unic = false;
  121. break;
  122. }
  123. }
  124. } while (!unic) // повторить генерацию числа
  125. a4.push(a);
  126. for (c = 0; c < a3.length; c++) {
  127. if (a4[c] == a3[c] || a4[c] == a2[c] || a4[c] == a1[c] || a4[c] == a0[c]) {
  128. a4.length = 0
  129. }
  130. }
  131. for (q = 0; q < 3; q++) {
  132. for (t = 0; t < 3; t++)
  133. if (a4[q] == a3[t]) {
  134. a4.length = 0
  135. }
  136. }
  137. for (q = 3; q < 6; q++) {
  138. for (t = 3; t < 6; t++)
  139. if (a4[q] == a3[t]) {
  140. a4.length = 0
  141. }
  142. }
  143. for (q = 6; q < 9; q++) {
  144. for (t = 6; t < 9; t++)
  145. if (a4[q] == a3[t]) {
  146. a4.length = 0
  147. }
  148. }
  149. }
  150. console.log(mek + "*444")
  151. var gek = 0
  152. while (a5.length < 9) {
  153. gek++
  154. if (gek == 160000) {
  155. res()
  156. break;
  157. }
  158. do {
  159. unic = true;
  160. a = Math.floor(Math.random() * 9) + 1;
  161. for (i = 0; i < a5.length; i++) {
  162. if (a == a5[i]) {
  163. // такое число уже было
  164. unic = false;
  165. break;
  166. }
  167. }
  168. } while (!unic) // повторить генерацию числа
  169. a5.push(a);
  170. for (c = 0; c < a5.length; c++) {
  171. if (a5[c] == a4[c] || a5[c] == a3[c] || a5[c] == a2[c] || a5[c] == a1[c] || a5[c] == a0[c]) {
  172. a5.length = 0
  173. }
  174. }
  175. for (q = 0; q < 3; q++) {
  176. for (t = 0; t < 3; t++)
  177. if (a5[q] == a3[t] || a5[q] == a4[t]) {
  178. a5.length = 0
  179. }
  180. }
  181. for (q = 3; q < 6; q++) {
  182. for (t = 3; t < 6; t++)
  183. if (a5[q] == a3[t] || a5[q] == a4[t]) {
  184. a5.length = 0
  185. }
  186. }
  187. for (q = 6; q < 9; q++) {
  188. for (t = 6; t < 9; t++)
  189. if (a5[q] == a3[t] || a5[q] == a4[t]) {
  190. a5.length = 0
  191. }
  192. }
  193. }
  194. console.log(gek + "*555")
  195. var fek = 0
  196. while (a6.length < 9) {
  197. fek++
  198. if (fek == 500000) {
  199. res();
  200. break;
  201. }
  202. do {
  203. unic = true;
  204. a = Math.floor(Math.random() * 9) + 1;
  205. for (i = 0; i < a6.length; i++) {
  206. if (a == a6[i]) {
  207. // такое число уже было
  208. unic = false;
  209. break;
  210. }
  211. }
  212. } while (!unic) // повторить генерацию числа
  213. a6.push(a);
  214. for (c = 0; c < a3.length; c++) {
  215. if (a6[c] == a5[c] || a6[c] == a4[c] || a6[c] == a3[c] || a6[c] == a2[c] || a6[c] == a1[c] || a6[c] == a0[c]) {
  216. a6.length = 0
  217. }
  218. }
  219. }
  220. console.log(fek + "*666")
  221. var rek = 0
  222. while (a7.length < 9) {
  223. rek++
  224. if (rek == 500000) {
  225. res();
  226. break;
  227. }
  228. do {
  229. unic = true;
  230. a = Math.floor(Math.random() * 9) + 1;
  231. for (i = 0; i < a7.length; i++) {
  232. if (a == a7[i]) {
  233. // такое число уже было
  234. unic = false;
  235. break;
  236. }
  237. }
  238. } while (!unic) // повторить генерацию числа
  239. a7.push(a);
  240. for (c = 0; c < a3.length; c++) {
  241. if (a7[c] == a6[c] || a7[c] == a5[c] || a7[c] == a4[c] || a7[c] == a3[c] || a7[c] == a2[c] || a7[c] == a1[c] || a7[c] == a0[c]) {
  242. a7.length = 0
  243. }
  244. }
  245. for (q = 0; q < 3; q++) {
  246. for (t = 0; t < 3; t++)
  247. if (a7[q] == a6[t]) {
  248. a7.length = 0
  249. }
  250. }
  251. for (q = 3; q < 6; q++) {
  252. for (t = 3; t < 6; t++)
  253. if (a7[q] == a6[t]) {
  254. a7.length = 0
  255. }
  256. }
  257. for (q = 6; q < 9; q++) {
  258. for (t = 6; t < 9; t++)
  259. if (a7[q] == a6[t]) {
  260. a7.length = 0
  261. }
  262. }
  263. }
  264. console.log(rek + "*777")
  265. var sec8 = 0
  266. while (a8.length < 9) {
  267. sec8++
  268. if (sec8 == 700000) {
  269. res();
  270. break;
  271. }
  272. do {
  273. unic = true;
  274. a = Math.floor(Math.random() * 9) + 1;
  275. for (i = 0; i < a8.length; i++) {
  276. if (a == a8[i]) {
  277. // такое число уже было
  278. unic = false;
  279. break;
  280. }
  281. }
  282. } while (!unic) // повторить генерацию числа
  283. a8.push(a);
  284. for (c = 0; c < a5.length; c++) {
  285. if (a8[c] == a7[c] || a8[c] == a6[c] || a8[c] == a5[c] || a8[c] == a4[c] || a8[c] == a3[c] || a8[c] == a2[c] || a8[c] == a1[c] || a8[c] == a0[c]) {
  286. a8.length = 0
  287. }
  288. }
  289. for (q = 0; q < 3; q++) {
  290. for (t = 0; t < 3; t++)
  291. if (a8[q] == a6[t] || a8[q] == a7[t]) {
  292. a8.length = 0
  293. }
  294. }
  295. for (q = 3; q < 6; q++) {
  296. for (t = 3; t < 6; t++)
  297. if (a8[q] == a6[t] || a8[q] == a7[t]) {
  298. a8.length = 0
  299. }
  300. }
  301. for (q = 6; q < 9; q++) {
  302. for (t = 6; t < 9; t++)
  303. if (a8[q] == a6[t] || a8[q] == a7[t]) {
  304. a8.length = 0
  305. }
  306. }
  307. }
  308. console.log(sec8 + "*888")
  309. return arr = [a0, a1, a2, a3, a4, a5, a6, a7, a8]
  310. }
  311. res()
  312. function show() {
  313. var newTable = document.createElement("table");
  314. for (var yy = 0; yy <= 8; yy++) {
  315. var newRow = newTable.insertRow(yy)
  316. for (var xx = 0; xx <= 8; xx++) {
  317. var newCell = newRow.insertCell(xx)
  318. newCell.innerHTML = arr[yy][xx]
  319. newCell.width = 50;
  320. newCell.height = 50;
  321. }
  322. }
  323. document.body.appendChild(newTable)
  324. }
  325. show()
  326. function oddEvenClass(elem, color1, color2) {
  327. var c = document.getElementsByTagName(elem)
  328. for (i = 0; i < c.length; i++) {
  329. if (i % 3 == 0) {
  330. c[i].style.backgroundColor = color2;
  331. c[i].className = "color2";
  332. } else {
  333. c[i].style.backgroundColor = color1;
  334. c[i].className = "color1"
  335. }
  336. }
  337. }
  338. oddEvenClass("td", "green", "red")