#!/usr/bin/perl sub initialize { @pieces = (' 1',' 2',' 3',' 4',' 5',' 6',' 7',' 8',' 9','10','11','12','13','14','15'); @ops = (); } sub rot_A { local(@pieces) = @_; local($i); for ($i = 0; $i < 8; $i++) { $pieces[$i] = $_[$i+1]; } $pieces[8] = $_[0]; push(@ops, ('A')); return (@pieces); } sub rot_a { local(@pieces) = @_; local($i); $pieces[0] = $_[8]; for ($i = 1; $i < 9; $i++) { $pieces[$i] = $_[$i-1]; } push(@ops, ('a')); return (@pieces); } sub rot_B { local(@pieces) = @_; local($i); $pieces[6] = $_[14]; for ($i = 7; $i < 15; $i++) { $pieces[$i] = $_[$i-1]; } push(@ops, ('B')); return (@pieces); } sub rot_b { local(@pieces) = @_; local($i); for ($i = 6; $i < 14; $i++) { $pieces[$i] = $_[$i+1]; } $pieces[14] = $_[6]; push(@ops, ('b')); return (@pieces); } sub rot_C { return rot_A(rot_B(@_)); } sub rot_c { return rot_b(rot_a(@_)); } sub show_ops { local($i); foreach $i (@ops) { print "$i"; } print "\n"; } sub showpic { local($i); print "[$pieces[1]][$pieces[2]][$pieces[3]][$pieces[4]]\n"; print "[$pieces[0]] [$pieces[5]]\n"; print "[$pieces[8]][$pieces[7]][$pieces[6]] \n"; print "[$pieces[9]] [$pieces[14]]\n"; print "[$pieces[10]][$pieces[11]][$pieces[12]][$pieces[13]]\n"; print "> "; } initialize; showpic; while ($op = ) { chomp; if ($op =~ /^A/) { @pieces = rot_A(@pieces); } if ($op =~ /^a/) { @pieces = rot_a(@pieces); } if ($op =~ /^B/) { @pieces = rot_B(@pieces); } if ($op =~ /^b/) { @pieces = rot_b(@pieces); } if ($op =~ /^C/) { @pieces = rot_C(@pieces); } if ($op =~ /^c/) { @pieces = rot_c(@pieces); } if ($op =~ /^01/){ @pieces = op01(@pieces); } if ($op =~ /^p/) { show_ops; print "> "; next;} if ($op =~ /^[xX]/) { last; } if ($op =~ /^reset/) { initialize; } showpic; } show_ops;