Playfair cipher: Difference between revisions
Content added Content deleted
(Add haskell version) |
SqrtNegInf (talk | contribs) m (→{{header|Perl 6}}: fix synxtax issues) |
||
Line 1,101: | Line 1,101: | ||
=={{header|Perl 6}}== |
=={{header|Perl 6}}== |
||
{{Works with|rakudo|2016.07}} |
|||
<lang perl6># Instantiate a specific encoder/decoder. |
<lang perl6># Instantiate a specific encoder/decoder. |
||
Line 1,111: | Line 1,112: | ||
# Build 5x5 matrix. |
# Build 5x5 matrix. |
||
my @m = canon($key ~ ('A'..'Z').join).comb. |
my @m = canon($key ~ ('A'..'Z').join).comb.unique.map: |
||
-> $a,$b,$c,$d,$e { [$a,$b,$c,$d,$e] } |
|||
# Pregenerate all forward translations. |
# Pregenerate all forward translations. |
||
Line 1,118: | Line 1,119: | ||
# Map pairs in same row. |
# Map pairs in same row. |
||
for @m -> @r { |
for @m -> @r { |
||
for ^@r X ^@r -> \i,\j { |
for ^@r X ^@r -> (\i,\j) { |
||
next if i == j; |
next if i == j; |
||
take @r[i] ~ @r[j] => @r[(i+1)%5] ~ @r[(j+1)%5]; |
take @r[i] ~ @r[j] => @r[(i+1)%5] ~ @r[(j+1)%5]; |
||
Line 1,127: | Line 1,128: | ||
for ^5 -> $c { |
for ^5 -> $c { |
||
my @c = @m.map: *.[$c]; |
my @c = @m.map: *.[$c]; |
||
for ^@c X ^@c -> \i,\j { |
for ^@c X ^@c -> (\i,\j) { |
||
next if i == j; |
next if i == j; |
||
take @c[i] ~ @c[j] => @c[(i+1)%5] ~ @c[(j+1)%5]; |
take @c[i] ~ @c[j] => @c[(i+1)%5] ~ @c[(j+1)%5]; |
||
Line 1,134: | Line 1,135: | ||
# Map pairs with cross-connections. |
# Map pairs with cross-connections. |
||
for ^5 X ^5 X ^5 X ^5 -> \i1,\j1,\i2,\j2 { |
for ^5 X ^5 X ^5 X ^5 -> (\i1,\j1,\i2,\j2) { |
||
next if i1 == i2 or j1 == j2; |
next if i1 == i2 or j1 == j2; |
||
take @m[i1][j1] ~ @m[i2][j2] => @m[i1][j2] ~ @m[i2][j1]; |
take @m[i1][j1] ~ @m[i2][j2] => @m[i1][j2] ~ @m[i2][j1]; |