@moves = qw ( R U R
' U' R
' F R2 U' R
' U' R U R
' F' ) ;
$state = 'UF UR UB UL DF DR DB DL FR FL BR BL UFR URB UBL ULF DRF DFL DLB DBR' ;
%turns = ( U => 'FLBR' , D => 'FRBL' , R => 'FUBD' , L => 'FDBU' , F => 'URDL' , B => 'ULDR' ) ;
sub move {
my ( $pos ) = @_ ;
( $cycled = $turns { $side } ) =~ s/(.)(.*)/$2$1/ ;
eval "\$ pos =~ y/$turns{$side}/$cycled/" ; $pos ;
}
print "Moves: @moves\n Start: $state\n " ; for $move ( @moves ) {
$move =~ s/'/3/ ;
( $side , $angle ) = split //, $move . 1 ; $state =~ s/\w*$side\w*/move($&)/ge while $angle --;
}
QG1vdmVzID0gcXcoUiBVIFInIFUnIFInIEYgUjIgVScgUicgVScgUiBVIFInIEYnKTsKCiRzdGF0ZSA9ICdVRiBVUiBVQiBVTCBERiBEUiBEQiBETCBGUiBGTCBCUiBCTCBVRlIgVVJCIFVCTCBVTEYgRFJGIERGTCBETEIgREJSJzsKJXR1cm5zID0gKFUgPT4gJ0ZMQlInLCBEID0+ICdGUkJMJywgUiA9PiAnRlVCRCcsIEwgPT4gJ0ZEQlUnLCBGID0+ICdVUkRMJywgQiA9PiAnVUxEUicpOwoKc3ViIG1vdmUgewogIG15ICgkcG9zKSA9IEBfOwogICgkY3ljbGVkID0gJHR1cm5zeyRzaWRlfSkgPX4gcy8oLikoLiopLyQyJDEvOwogIGV2YWwgIlwkcG9zID1+IHkvJHR1cm5zeyRzaWRlfS8kY3ljbGVkLyI7CiAgJHBvczsKfQoKcHJpbnQgIk1vdmVzOiBAbW92ZXNcblN0YXJ0OiAkc3RhdGVcbiI7CmZvciAkbW92ZSAoQG1vdmVzKSB7CiAgJG1vdmUgPX4gcy8nLzMvOwogICgkc2lkZSwgJGFuZ2xlKSA9IHNwbGl0IC8vLCAkbW92ZSAuIDE7CiAgJHN0YXRlID1+IHMvXHcqJHNpZGVcdyovbW92ZSgkJikvZ2Ugd2hpbGUgJGFuZ2xlLS07Cn0KcHJpbnQgIkVuZDogICAkc3RhdGVcbiI7