@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" ;
sub move {
my ( $pos ) = @_ ;
eval "\$ pos =~ y/$from/$to/" ; $pos ;
}
print "Moves: @moves\n Start: $state\n " ; for $move ( @moves ) {
$move =~ s/'/3/ ;
( $side , $angle ) = split //, $move . 1 ; $from = $to = '' ;
for ( split ' ' , $state ) { if ( /.../ && /$side/ ) {
( $t , $f ) = split '' , "$'$`" ; $from .= $f ;
$to .= $t ;
}
}
$state =~ s/\w*$side\w*/move($&)/ge while $angle --;
}
QG1vdmVzID0gcXcoUiBVIFInIFUnIFInIEYgUjIgVScgUicgVScgUiBVIFInIEYnKTsKJHN0YXRlID0gIlVGIFVSIFVCIFVMIERGIERSIERCIERMIEZSIEZMIEJSIEJMIFVGUiBVUkIgVUJMIFVMRiBEUkYgREZMIERMQiBEQlIiOwoKc3ViIG1vdmUgewogIG15ICgkcG9zKSA9IEBfOwogIGV2YWwgIlwkcG9zID1+IHkvJGZyb20vJHRvLyI7CiAgJHBvczsKfQoKcHJpbnQgIk1vdmVzOiBAbW92ZXNcblN0YXJ0OiAkc3RhdGVcbiI7CmZvciAkbW92ZSAoQG1vdmVzKSB7CiAgJG1vdmUgPX4gcy8nLzMvOwogICgkc2lkZSwgJGFuZ2xlKSA9IHNwbGl0IC8vLCAkbW92ZSAuIDE7CiAgJGZyb20gPSAkdG8gPSAnJzsKICBmb3IgKHNwbGl0ICcgJywgJHN0YXRlKSB7CiAgICBpZiAoLy4uLi8gJiYgLyRzaWRlLykgewogICAgICAoJHQsICRmKSA9IHNwbGl0ICcnLCAiJCckYCI7CiAgICAgICRmcm9tIC49ICRmOwogICAgICAkdG8gLj0gJHQ7CiAgICB9CiAgfQogICRzdGF0ZSA9fiBzL1x3KiRzaWRlXHcqL21vdmUoJCYpL2dlIHdoaWxlICRhbmdsZS0tOwp9CnByaW50ICJFbmQ6ICAgJHN0YXRlXG4iOw==