RosettaCodeData/Task/Intersecting-number-wheels/Perl/intersecting-number-wheels.pl
2023-07-01 13:44:08 -04:00

25 lines
716 B
Perl

use strict;
use warnings;
use feature 'say';
sub get_next {
my($w,%wheels) = @_;
my $wh = \@{$wheels{$w}}; # reference, not a copy
my $value = $$wh[0][$$wh[1]];
$$wh[1] = ($$wh[1]+1) % @{$$wh[0]};
defined $wheels{$value} ? get_next($value,%wheels) : $value;
}
sub spin_wheels {
my(%wheels) = @_;
say "$_: " . join ', ', @{${$wheels{$_}}[0]} for sort keys %wheels;
print get_next('A', %wheels) . ' ' for 1..20; print "\n\n";
}
spin_wheels(%$_) for
(
{'A' => [['1', '2', '3'], 0]},
{'A' => [['1', 'B', '2'], 0], 'B' => [['3', '4'], 0]},
{'A' => [['1', 'D', 'D'], 0], 'D' => [['6', '7', '8'], 0]},
{'A' => [['1', 'B', 'C'], 0], 'B' => [['3', '4'], 0], 'C' => [['5', 'B'], 0]},
);