Snake Cube Solver

Finds all solutions to 3D snake cube puzzle in <0.5s 🏁 🎉

Commands:

# build sequential search - output in bin/
just build-seq

# build parallel search - output in bin/
just build-par

# -----------------------------------------------
# run sequential search - output in solutions.json
just run-seq

START Snake Cube solver
start search_from_all_pos_sequential
sequence_in = []

done search_from_pos [0, 0, 0] runtime: 445.980378ms nb sol: 39718
done search_from_pos [0, 0, 1] runtime: 58.781836ms nb sol: 0
done search_from_pos [0, 0, 2] runtime: 2.47µs nb sol: 0
done search_from_pos [0, 1, 0] runtime: 168.300504ms nb sol: 0
done search_from_pos [0, 1, 1] runtime: 38.221371ms nb sol: 1906
done search_from_pos [0, 1, 2] runtime: 945ns nb sol: 0
done search_from_pos [0, 2, 0] runtime: 137ns nb sol: 0
done search_from_pos [0, 2, 1] runtime: 80ns nb sol: 0
done search_from_pos [0, 2, 2] runtime: 84ns nb sol: 0
done search_from_pos [1, 0, 0] runtime: 314.545223ms nb sol: 0
done search_from_pos [1, 0, 1] runtime: 51.005303ms nb sol: 1301
done search_from_pos [1, 0, 2] runtime: 1.856µs nb sol: 0
done search_from_pos [1, 1, 0] runtime: 149.508413ms nb sol: 8779
done search_from_pos [1, 1, 1] runtime: 33.577398ms nb sol: 0
done search_from_pos [1, 1, 2] runtime: 592ns nb sol: 0
done search_from_pos [1, 2, 0] runtime: 88ns nb sol: 0
done search_from_pos [1, 2, 1] runtime: 57ns nb sol: 0
done search_from_pos [1, 2, 2] runtime: 56ns nb sol: 0
done search_from_pos [2, 0, 0] runtime: 46ns nb sol: 0
done search_from_pos [2, 0, 1] runtime: 32ns nb sol: 0
done search_from_pos [2, 0, 2] runtime: 32ns nb sol: 0
done search_from_pos [2, 1, 0] runtime: 31ns nb sol: 0
done search_from_pos [2, 1, 1] runtime: 32ns nb sol: 0
done search_from_pos [2, 1, 2] runtime: 33ns nb sol: 0
done search_from_pos [2, 2, 0] runtime: 33ns nb sol: 0
done search_from_pos [2, 2, 1] runtime: 32ns nb sol: 0
done search_from_pos [2, 2, 2] runtime: 32ns nb sol: 0

done  search_from_all_pos_sequential
        runtime = 1.26206658s
        nb sol  = 51704
save solutions as solutions.json
        done in 38.628943ms

END Snake Cube solver

# -----------------------------------------------
# run parallel search - output in solutions.json
just run-par

START Snake Cube solver
start search_from_all_pos_parallel

done search_from_pos [0, 2, 0] runtime: 832ns nb sol: 0
done search_from_pos [2, 0, 0] runtime: 221ns nb sol: 0
done search_from_pos [0, 2, 1] runtime: 449ns nb sol: 0
done search_from_pos [0, 2, 2] runtime: 230ns nb sol: 0
done search_from_pos [2, 0, 1] runtime: 155ns nb sol: 0
done search_from_pos [2, 0, 2] runtime: 215ns nb sol: 0
done search_from_pos [2, 1, 0] runtime: 186ns nb sol: 0
done search_from_pos [2, 1, 1] runtime: 103ns nb sol: 0
done search_from_pos [1, 1, 2] runtime: 5.423µs nb sol: 0
done search_from_pos [2, 1, 2] runtime: 166ns nb sol: 0
done search_from_pos [2, 2, 0] runtime: 153ns nb sol: 0
done search_from_pos [2, 2, 1] runtime: 142ns nb sol: 0
done search_from_pos [1, 2, 1] runtime: 694ns nb sol: 0
done search_from_pos [1, 2, 2] runtime: 453ns nb sol: 0
done search_from_pos [1, 2, 0] runtime: 311ns nb sol: 0
done search_from_pos [0, 0, 2] runtime: 17.428µs nb sol: 0
done search_from_pos [2, 2, 2] runtime: 106ns nb sol: 0
done search_from_pos [1, 0, 2] runtime: 7.838µs nb sol: 0
done search_from_pos [0, 1, 2] runtime: 2.702µs nb sol: 0
done search_from_pos [1, 1, 1] runtime: 57.520807ms nb sol: 0
done search_from_pos [0, 1, 1] runtime: 64.220865ms nb sol: 1906
done search_from_pos [0, 0, 1] runtime: 74.440896ms nb sol: 0
done search_from_pos [1, 0, 1] runtime: 76.065942ms nb sol: 1301
done search_from_pos [0, 1, 0] runtime: 184.61434ms nb sol: 0
done search_from_pos [1, 1, 0] runtime: 211.677663ms nb sol: 8779
done search_from_pos [1, 0, 0] runtime: 376.667645ms nb sol: 0
done search_from_pos [0, 0, 0] runtime: 471.165136ms nb sol: 39718

done  search_from_all_pos_parallel
        runtime = 474.585523ms
        nb sol  = 51704
save solutions as solutions.json
        done in 40.712876ms

END Snake Cube solver