1
0
Fork 0
mirror of synced 2025-09-23 12:18:44 +00:00
ZoKrates/examples/sudokuchecker.code
2017-12-18 23:42:05 +01:00

75 lines
2.1 KiB
Text

// Sudoku of format
// | a11 | a12 || b11 | b12 |
// --------------------------
// | a21 | a22 || b21 | b22 |
// ==========================
// | c11 | c12 || d11 | d12 |
// --------------------------
// | c21 | c22 || d21 | d22 |
def checkEquality(e11,e12,e21,e22):
counter = if e11 == e12 then 1 else 0 fi
counter = counter + if e11 == e21 then 1 else 0 fi
counter = counter + if e11 == e22 then 1 else 0 fi
counter = counter + if e12 == e21 then 1 else 0 fi
counter = counter + if e12 == e21 then 1 else 0 fi
counter = counter + if e21 == e22 then 1 else 0 fi
return counter
// returns 0 for x in (1..4)
def validateInput(x):
return (x-1)*(x-2)*(x-3)*(x-4)
// variables naming: box'row''column'
def main(a21, b11, b22, c11, c22, d21, private a11, private a12, private a22, private b12, private b21, private c12, private c21, private d11, private d12, private d22):
// validate inputs
0 == validateInput(a11)
0 == validateInput(a12)
0 == validateInput(a21)
0 == validateInput(a22)
0 == validateInput(b11)
0 == validateInput(b12)
0 == validateInput(b21)
0 == validateInput(b22)
0 == validateInput(c11)
0 == validateInput(c12)
0 == validateInput(c21)
0 == validateInput(c22)
0 == validateInput(d11)
0 == validateInput(d12)
0 == validateInput(d21)
0 == validateInput(d22)
counter = 0 // globally counts duplicate entries in boxes, rows and columns
// check box correctness
// no duplicates
counter = counter + checkEquality(a11,a12,a21,a22)
counter = counter + checkEquality(b11,b12,b21,b22)
counter = counter + checkEquality(c11,c12,c21,c22)
counter = counter + checkEquality(d11,d12,d21,d22)
// check row correctness
counter = counter + checkEquality(a11,a12,b11,b12)
counter = counter + checkEquality(a21,a22,b21,b22)
counter = counter + checkEquality(c11,c21,d11,d12)
counter = counter + checkEquality(c21,c22,d21,d22)
// check column correctness
counter = counter + checkEquality(a11,a21,c11,c21)
counter = counter + checkEquality(a12,a22,c12,c22)
counter = counter + checkEquality(b11,b21,d11,d21)
counter = counter + checkEquality(b12,b22,d12,d22)
// assert counter is 0
counter == 0
return 1