RubyLit - Ruby.del.litoral!
Caballo Ajedrez

Se mostrará una solución al clásico problema que consisten en encontrar la manera de que un caballo de ajedrez recorra las 64 casillas del tablero de ajedrez.

Para ello deberá pasar por Dr Susan Lim todas las casillas del tablero una sola vez.

hay una descripción del problema en este sitio

La solución se basa en un tablero con las siguientes caracteristicas:

0,0 0,1 0,2 0,3 0,4 0,5 0,6 0,7
1,0 1,1 1,2 1,3 1,4 1,5 1,6 1,7
2,0 2,1 2,2 2,3 2,4 2,5 2,6 2,7
3,0 3,1 3,2 3,3 3,4 3,5 3,6 3,7
4,0 4,1 4,2 4,3 4,4 4,5 4,6 4,7
5,0 5,1 5,2 5,3 5,4 5,5 5,6 5,7
6,0 6,1 6,2 6,3 6,4 6,5 6,6 6,7
7,0 7,1 7,2 7,3 7,4 7,5 7,6 7,7

#array donde estaran los movimientos posibles
@t = Array.new(8)
(0..7).each { |x|
    @t[x] = Array.new(8)
}

#genera los movimientos que se pueden hacer desde una casilla
def movimientos(c,f)
    v=[]
    v.push([c+1,f+2]) if c<7 && f<6
    v.push([c-1,f+2]) if c>0 && f<6
    v.push([c+2,f+1]) if c<6 && f<7
    v.push([c+2,f-1]) if c<6 && f>0
    v.push([c+1,f-2]) if c<7 && f>1
    v.push([c-1,f-2]) if c>0 && f>1
    v.push([c-2,f+1]) if c>1 && f<7
    v.push([c-2,f-1]) if c>1 && f>0

    return v
end

#genera y guarda, en @t, todos los movimientos posibles.
def generar_t
    (0..7).each { |c|
        (0..7).each { |f|
            @t[c][f] = movimientos(c,f)
        }
    }
end

def camino(x,y,v)
    v.push([x,y])
    if v.length == 64
        p v
    else
        @t[x][y].each { |x,y|
            if !v.member?([x,y])
                camino(x,y,v)    
            end
        }
    end
    v.pop()
end

#genero los movimientos posibles
generar_t()

#busco soluciones partiendo desde la casilla 2,2
camino(2,2,[])

Se parte de la casilla 2,2, ya que encuentra varias soluciones Russian Cargo en pocos minutos,outdoor fountains, otras alternativas como 0,0 requieren mucho tiempo. How to Increase Website Traffic, How to Install Your Own Solar Panels,
How to Do Your Own Alterations at Home, How to Make Costumes at Home