Advertisement
junbjn98

Untitled

Dec 15th, 2021
768
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. let d = [
  2.     [1, 0, 0, 0, 0, 0, 0, 1],
  3.     [0, 1, 0, 0, 0, 0, 0, 1],
  4.     [0, 0, 1, 0, 0, 0, 0, 0],
  5.     [0, 1, 0, 1, 0, 1, 0, 0],
  6.     [0, 0, 0, 0, 1, 0, 0, 0],
  7.     [0, 0, 0, 0, 0, 1, 0, 1],
  8.     [1, 0, 0, 0, 0, 0, 1, 0],
  9.     [0, 0, 0, 1, 0, 0, 0, 1]
  10. ]
  11.  
  12. let l = d[0].length
  13. let c = 0
  14. let s = 0
  15.  
  16. // set count number
  17. d[l] = Array(l + 1).fill(0)
  18. for (let i = 0; i < l; i++) {
  19.     d[i][l] = 0
  20.     for (let j = 0; j < l; j++) {
  21.         let n = d[i][j] == 0 ? 1 : 0
  22.         d[i][l] += n
  23.         d[l][j] += n
  24.         d[l][l] += d[i][j] == 2 ? 1 : 0
  25.     }
  26. }
  27. // console.log(d)
  28. console.log(+new Date())
  29. check(d)
  30. // console.log(c)
  31. // console.log(s)
  32. console.log(s/c)
  33. console.log(+new Date())
  34.  
  35. function check(data, setRowIndex, setColumnIndex) {
  36.     let d = data.map((e) => e.slice())
  37.     let x = setRowIndex;
  38.     let y = setColumnIndex;
  39.  
  40.     // set value for row & column
  41.     if (x != undefined) {
  42.         for (let i = 0; i < l; i++) {
  43.             for (let j = 0; j < l; j++) {
  44.                 let m = d[i][j]
  45.                 d[i][j] = i == x && j == y ? 2 : i == x || j == y ? 1 : m
  46.                 let n = d[i][j] != m ? -1 : 0
  47.                 d[i][l] += n
  48.                 d[l][j] += n
  49.             }
  50.         }
  51.         // set number of match
  52.         d[l][l]++
  53.     }
  54.     // console.log(d)
  55.  
  56.     // get min value
  57.     let minIndex = [0, 0]
  58.     let minValue = l + 1
  59.     for (let i = 0; i < l; i++) {
  60.         if (d[i][l] != 0 && d[i][l] < d[l][i]) {
  61.             if (d[i][l] < minValue) {
  62.                 minIndex = [i, l]
  63.                 minValue = d[i][l]
  64.             }
  65.         } else if (d[l][i] != 0 && d[l][i] < minValue) {
  66.             minIndex = [l, i]
  67.             minValue = d[l][i]
  68.         }
  69.     }
  70.     // console.log(`minIndex = ${minIndex} | minValue = ${minValue}`)
  71.     if (minValue == l + 1) {
  72.         if (d[l][l] == l) {
  73.             // console.log('---- result ----')
  74.             // console.log(d)
  75.             s += d[6][7] == 2 ? 1 : 0
  76.             c++
  77.         } else {
  78.             console.log('cannot match')
  79.         }
  80.         return
  81.     }
  82.  
  83.     // for loop to set value in min
  84.     let row = minIndex[0]
  85.     for (let i = 0; i < l; i++) {
  86.         let row = minIndex[1] == l ? minIndex[0] : i
  87.         let col = minIndex[1] == l ? i : minIndex[1]
  88.         if (d[row][col] == 0) {
  89.             check(d, row, col)
  90.         }
  91.     }
  92. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement