Skip to content

Instantly share code, notes, and snippets.

@kach
Created May 22, 2016 04:06
Show Gist options
  • Save kach/4be3355155e70b23d1ec97bf20e01846 to your computer and use it in GitHub Desktop.
Save kach/4be3355155e70b23d1ec97bf20e01846 to your computer and use it in GitHub Desktop.
Solve a 2x2x2 Rubik's cube in prolog
% Solve a 2x2x2 Rubik's Cube
% Kartik - 2016
% Query sample:
% | :- moveseq(X, cube(g,b,b,b, y,y,y,r, o,g,r,w, r,r,g,g, w,w,o,o, o,b,y,w), C), finished(C).
% C = cube(b,b,b,b,y,y,y,y,r,r,r,r,g,g,g,g,o,o,o,o,w,w,w,w)
% X = [l,u,f,f,f,u,u,l,u,f,f,l,f,u,f,u] ? ;
% Using this map:
% UUUU DDDD LLLL RRRR FFFF BBBB
% B3 B4
% B2 B1
% L4 L1 U1 U2 R2 R3
% L3 L2 U4 U3 R1 R4
% F1 F2
% F4 F3
% D1 D2
% D4 D3
finished(cube(A, A, A, A, B, B, B, B, C, C, C, C, D, D, D, D, E, E, E, E, F, F, F, F)).
moveseq([], C, C).
moveseq([M | T], C, E) :- moveseq(T, D, E), move(M, C, D).
% B3 B4
% B2 B1
% L4 L1 U1 U2 R2 R3
% L3 L2 U4 U3 R1 R4
% F1 F2
% F4 F3
% D1 D2
% D4 D3
move(
u,
cube(
U1, U2, U3, U4,
D1, D2, D3, D4,
L1, L2, L3, L4,
R1, R2, R3, R4,
F1, F2, F3, F4,
B1, B2, B3, B4
),
cube(
U2, U3, U4, U1,
D1, D2, D3, D4,
B1, B2, L3, L4,
F1, F2, R3, R4,
L1, L2, F3, F4,
R1, R2, B3, B4
)
).
% B3 B4
% B2 B1
% L4 L1 U1 U2 R2 R3
% L3 L2 U4 U3 R1 R4
% F1 F2
% F4 F3
% D1 D2
% D4 D3
move(
f,
cube(
U1, U2, U3, U4,
D1, D2, D3, D4,
L1, L2, L3, L4,
R1, R2, R3, R4,
F1, F2, F3, F4,
B1, B2, B3, B4
),
cube(
U1, U2, R4, R1,
L2, L3, D3, D4,
L1, U3, U4, L4,
D2, R2, R3, D1,
F2, F3, F4, F1,
B1, B2, B3, B4
)
).
% B3 B4
% B2 B1
% L4 L1 U1 U2 R2 R3
% L3 L2 U4 U3 R1 R4
% F1 F2
% F4 F3
% D1 D2
% D4 D3
move(
l,
cube(
U1, U2, U3, U4,
D1, D2, D3, D4,
L1, L2, L3, L4,
R1, R2, R3, R4,
F1, F2, F3, F4,
B1, B2, B3, B4
),
cube(
F1, U2, U3, F4,
B3, D2, D3, B2,
L2, L3, L4, L1,
R1, R2, R3, R4,
D1, F2, F3, D4,
B1, U4, U1, B4
)
).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment