# @param {Integer[][]} board

# @return {Integer}

def snakes_and_ladders(board)

    q=[];l=r=0

    board.reverse!

    b=0

    board.each{|v|v.reverse! if b==1;b^=1}

    board.flatten!.map!{|v|v<0?v:v-1}

    p board

    push=->(x){q[r]=x;r+=1}

    pop=->{t=q[l];l+=1;t}

    vis=[]

    push.call([0,0])

    while l<r

        t,d=pop.call

        next if vis[t]

        p [t,d]

        vis[t]=d

        (1..6).each do|dc|

            break if t+dc>=board.size

            if board[t+dc]<0

                push.call([t+dc,d+1])

            else

                push.call([board[t+dc],d+1])

            end


        end

    end

    vis[board.size-1]||-1

end


루비가 너무 좋아요