66 lines
1.4 KiB
Plaintext
66 lines
1.4 KiB
Plaintext
// Flipping Bits game.
|
|
// Transform a start grid to an end grid by flipping rows or columns.
|
|
|
|
size = 3
|
|
|
|
board = []
|
|
goal = []
|
|
for i in range(1,size)
|
|
row = []
|
|
for j in range(1,size)
|
|
row.push (rnd > 0.5)
|
|
end for
|
|
board.push row
|
|
goal.push row[0:]
|
|
end for
|
|
|
|
flipRow = function(n)
|
|
for j in range(0, size-1)
|
|
board[n-1][j] = not board[n-1][j]
|
|
end for
|
|
end function
|
|
|
|
flipCol = function(n)
|
|
for i in range(0, size-1)
|
|
board[i][n-1] = not board[i][n-1]
|
|
end for
|
|
end function
|
|
|
|
flipAny = function(s)
|
|
s = s[0].upper
|
|
if s >= "A" then flipCol s.code - 64 else flipRow val(s)
|
|
end function
|
|
|
|
for scramble in range(20)
|
|
if rnd < 0.5 then flipRow ceil(rnd*size) else flipCol ceil(rnd*size)
|
|
end for
|
|
|
|
solved = function()
|
|
for i in range(0, size-1)
|
|
for j in range(0, size-1)
|
|
if board[i][j] != goal[i][j] then return false
|
|
end for
|
|
end for
|
|
return true
|
|
end function
|
|
|
|
moveCount = 0
|
|
while true
|
|
print " CURRENT:" + " "*(4+size*3) + "GOAL:"
|
|
for i in range(1,size)
|
|
s = i + " " + str(board[i-1])
|
|
s = s + " "*(3+size*3) + str(goal[i-1])
|
|
print s
|
|
end for
|
|
s = " "
|
|
for i in range(1,size)
|
|
s = s + char(64+i) + " "
|
|
end for
|
|
print s
|
|
if solved then break
|
|
moveCount = moveCount + 1
|
|
inp = input("Move " + moveCount + "? ")
|
|
flipAny(inp)
|
|
end while
|
|
print "You did it!"
|