8 my @cups_nums = split //;
17 my ($prev, @cups, $one);
18 for (@cups_nums, 10 .. $max) {
25 $one = $cup if $cup->{num} == 1;
31 $cup->{prev_num} = $cups[$cups_pos[$cup->{num}-1]]
32 if $cup->{num} > 1 && $cup->{num} <= 10;
33 $cup->{prev_num} = $cups[-1]
39 # for my $cup (@cups) {
40 # print $cup->{num}, ": >", $cup->{next}->{num}, " <", $cup->{prev_num}->{num}, "\n";
47 my $cup = $cur->{next};
48 my $dest = $cur->{prev_num};
53 $num_seen{ $cup->{num} } = 1;
54 # print $cup->{num}, ' ';
57 $dest = $dest->{prev_num} while $num_seen{$dest->{num}};
58 # print " dest: ", $dest->{num}, "\n";
60 my $end = $dest->{next};
61 $dest->{next} = $pickup[0];
62 $pickup[-1]->{next} = $end;
67 # print $end->{num}, ',';
68 # $end = $end->{next};
69 # } while ($end->{num} != $cur->{num});
71 print "round $rounds\n" if $rounds % 100_000 == 0;
74 print "one -> ", $one->{next}->{num}, '*', $one->{next}->{next}->{num},
75 "=", $one->{next}->{num} * $one->{next}->{next}->{num}, "\n";