6 my $row = join('', 'a' .. 'p');
7 # my $row = join('', 'a' .. 'e');
9 chomp (my $dance = <>);
10 my @dance = split /,/, $dance;
13 for my $move (@dance) {
15 if ($move =~ /s(\d+)/) {
16 $row =~ s/(.*)(.{$1})/\2\1/;
17 } elsif ($move =~ /x(\d+)\/(\d+)/) {
18 my ($a, $b) = (substr($row, $1, 1), substr($row, $2, 1));
19 substr($row, $1, 1) = $b;
20 substr($row, $2, 1) = $a;
21 } elsif ($move =~ /p(\w)\/(\w)/) {
22 eval "\$row =~ y/$1$2/$2$1/";
39 my $period = $i - $seen{$row};
40 say "period $period from $seen{$row} to $i";
42 my $count = 1_000_000_000 - $seen{$row};
44 do_dance() while $count--;