RosettaCodeData/Task/Mayan-numerals/Perl/mayan-numerals.pl
2023-07-01 13:44:08 -04:00

35 lines
1 KiB
Raku

use ntheory qw/fromdigits todigitstring/;
my $t_style = '"border-collapse: separate; text-align: center; border-spacing: 3px 0px;"';
my $c_style = '"border: solid black 2px;background-color: #fffff0;border-bottom: double 6px;'.
'border-radius: 1em;-moz-border-radius: 1em;-webkit-border-radius: 1em;'.
'vertical-align: bottom;width: 3.25em;"';
sub cartouches {
my($num, @digits) = @_;
my $render;
for my $d (@digits) {
$render .= "| style=$c_style | $_\n" for glyphs(@$d);
}
chomp $render;
join "\n", "\{| style=$t_style", "|+ $num", '|-', $render, '|}'
}
sub glyphs {
return 'Θ' unless $_[0] || $_[1];
join '<br>', '' x $_[0], ('') x $_[1];
}
sub mmod {
my($n,$b) = @_;
my @nb;
return 0 unless $n;
push @nb, fromdigits($_, $b) for split '', todigitstring($n, $b);
return @nb;
}
for $n (qw<4005 8017 326205 886205 26960840421>) {
push @output, cartouches($n, map { [reverse mmod($_,5)] } mmod($n,20) );
}
print join "\n<br>\n", @output;