lua-users home
lua-l archive

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]



Noob ducking now ...  and looking if a language war is starting :oP

:-) I took part of the lunch break to extract some sample code ( of course the full code is more complex)... but you got here the basic idea how to implement your solver, transition m is in this test top face clock turn.

Part of this test is to see how well it handle array ...

And o my machine I stiil got pretty much the same ranking
python3 35sec,  lua 20secs, luajit 0.2sec
 :o)

Lua
-------------------------------------------

ca = { 'w','w','w','w','w','w','w','w','w', 'b','b','b','b','b','b','b','b','b', 'o','o','o','o','o','o','o','o','o', 'g','g','g','g','g','g','g','g','g', 'r','r','r','r','r','r','r','r','r', 'y','y','y','y','y','y','y','y','y' }

cb = { 'x','x','x','x','x','x','x','x','x', 'x','x','x','x','x','x','x','x','x', 'x','x','x','x','x','x','x','x','x', 'x','x','x','x','x','x','x','x','x', 'x','x','x','x','x','x','x','x','x', 'x','x','x','x','x','x','x','x','x' }

cc = { 'w','w','w','w','w','w','w','w','w', 'o','o','o','b','b','b','b','b','b', 'g','g','g','o','o','o','o','o','o', 'r','r','r','g','g','g','g','g','g', 'b','b','b','r','r','r','r','r','r', 'y','y','y','y','y','y','y','y','y' }

m = { 7,4,1,8,0,2,9,6,3, 19,20,21,0,0,0,0,0,0, 28,29,30,0,0,0,0,0,0, 37,38,39,0,0,0,0,0,0, 10,11,12,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0 }


function cubeMove(ca, cb)

    for x = 1, 54 do
        if m[x] == 0 then
            cb[x] = ca[x]
        else
            cb[x] = ca[m[x]]
        end
    end
end

function cubeEqual(ca, cb)

    for x = 1, 54 do
        if ca[x] ~= cb[x] then
            return false
        end
    end
    return true
end


cubeMove(ca, cb)
assert(cubeEqual(cb, cc))


for x = 1, 2000000 do
    cubeMove(ca, cb)
    if not cubeEqual(cb, cc) then
        assert(false)
    end
end

-----


Python 3
--------------------------------------------------------


#!python3

ca = ['_', 'w','w','w','w','w','w','w','w','w', 'b','b','b','b','b','b','b','b','b', 'o','o','o','o','o','o','o','o','o', 'g','g','g','g','g','g','g','g','g', 'r','r','r','r','r','r','r','r','r', 'y','y','y','y','y','y','y','y','y' ] cb = ['_', 'x','x','x','x','x','x','x','x','x', 'x','x','x','x','x','x','x','x','x', 'x','x','x','x','x','x','x','x','x', 'x','x','x','x','x','x','x','x','x', 'x','x','x','x','x','x','x','x','x', 'x','x','x','x','x','x','x','x','x' ] cc = ['_', 'w','w','w','w','w','w','w','w','w', 'o','o','o','b','b','b','b','b','b', 'g','g','g','o','o','o','o','o','o', 'r','r','r','g','g','g','g','g','g', 'b','b','b','r','r','r','r','r','r', 'y','y','y','y','y','y','y','y','y' ] m = [ 0, 7,4,1,8,0,2,9,6,3, 19,20,21,0,0,0,0,0,0, 28,29,30,0,0,0,0,0,0, 37,38,39,0,0,0,0,0,0, 10,11,12,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0 ]

def cubeMove(ca, cb):
    for x in range(1,55):
        if m[x] == 0:
            cb[x] = ca[x]
        else:
            cb[x] = ca[m[x]]

def cubeEqual(ca, cb):
    for x in range(1, 55):
        if ca[x] != cb[x]:
            return False
    return True

cubeMove(ca, cb)
assert(cubeEqual(cb, cc))

for x in range(1, 2000000):
    cubeMove(ca, cb)
    if not cubeEqual(cb, cc):
        assert(False)


------------------------