PPPP #1

by Santiago J

HTML

<pre id="out"></pre>

CoffeeScript

out = document.querySelector("#out")
clear = ->
    out.innerHTML = ""
print = (str) ->
    out.textContent += str

printGrid = (grid) ->
    print grid.map((row) ->
      row.map((cell) -> if cell then "H" else "T").join("")
    ).join("\n")

printGraph = (grid) ->
    res = []
    for y in [0...grid.length-1]
        row = grid[y]
        row2 = grid[y+1]
        resrow1 = ""
        for x in [0...row.length-1]
            resrow1 += if row[x] == row[x+1] then " O" else " X"

        res.push resrow1
        
        resrow2 = ""
        for x in [0...row.length]
            resrow2 += if row[x] == row2[x] then "O " else "X "
        
        res.push resrow2
    
    row = grid[grid.length - 1]
    resrow1 = ""
    for x in [0...row.length-1]
        resrow1 += if row[x] == row[x+1] then " O" else " X"
    res.push(resrow1)

    print res.join("\n")

initGrid = (len) ->
    grid = []
    for i in [0...len]
        g = []
        g.push false for i in [0...len]
        grid.push g
    grid

subflip = (grid, x, y) ->
    if y >= 0 and y < grid.length and x >= 0 and x < grid[y].length
        grid[y][x] = !grid[y][x]

flip = (grid, x, y) ->
    if y < 0 or x < 0 or y >= grid.length or x >= grid[y].length
        throw new Error "Keep flips inside the grid at all times, please."
    subflip grid, x, y
    subflip grid, x - 1, y
    subflip grid, x + 1, y
    subflip grid, x, y - 1
    subflip grid, x, y + 1

randomLocation = (grid) ->
    y = Math.random() * grid.length | 0
    x = Math.random() * grid[y].length | 0
    {x, y}

grid = initGrid 8
numSteps = 100
steps = []

steps.push randomLocation grid for i in [0...numSteps]
flip grid, xy.x, xy.y for xy in steps

printGrid grid
print "\n\n"
print "graph:\n"
printGraph grid
print "\n\n"
print "[#{xy.x+1}, #{xy.y+1}]\n" for xy in steps