Straddling checkerboard: Difference between revisions
→{{header|Perl 6}}: various fixes, works again
Thundergnat (talk | contribs) (→{{header|Perl 6}}: Mark as broken) |
SqrtNegInf (talk | contribs) (→{{header|Perl 6}}: various fixes, works again) |
||
Line 1,481:
=={{header|Perl 6}}==
{{works with|Rakudo|2018.03}}
The .trans method in Perl 6 improves on Perl 5's tr/// by allowing multi-character translation tables.
Line 1,487:
<lang perl6>class Straddling_Checkerboard {
has @!flat_board; # 10x3 stored as 30x1
has $!plain2code; #
has @!table; # Printable layout, like Wikipedia entry
Line 1,493:
my $exclude = /<-[A..Z0..9.]>/; # Omit the escape character
method display_table {
method decode ( Str $s --> Str ) {
$s.trans($!plain2code.
}
Line 1,506:
submethod BUILD ( :$alphabet, :$u where 0..9, :$v where 0..9 ) {
die if $u == $v;
die if $alphabet.comb.sort.join ne [~] flat './', 'A'..'Z';
@!flat_board = $alphabet.uc.comb;
Line 1,512:
@!flat_board.splice( $u max $v, 0, Any );
@!table = [ ' ', [ 0 .. 9] ],
[ ' ',
[ $u, @!flat_board[10 .. 19] ],
[ $v, @!flat_board[20 .. 29] ];
my @order = 0..9; # This may be passed as a param in the future
my @nums = flat @order,
@order.map({ +"$u$_" }),
@order.map({ +"$v$_" });
my %
%
my %p2c = %c2p.invert;
%p2c{$_} = %p2c{$numeric_escape} ~ $_ for 0..9;
$!plain2code = [%p2c.keys] => [%p2c.values];
}
|