diff options
| -rw-r--r-- | challenge-035/arne-sommer/perl6/lib/BinaryMorse.pm6 | 54 | ||||
| -rw-r--r-- | challenge-035/arne-sommer/perl6/lib/BinaryMorse2.pm6 | 93 |
2 files changed, 147 insertions, 0 deletions
diff --git a/challenge-035/arne-sommer/perl6/lib/BinaryMorse.pm6 b/challenge-035/arne-sommer/perl6/lib/BinaryMorse.pm6 new file mode 100644 index 0000000000..db0650504d --- /dev/null +++ b/challenge-035/arne-sommer/perl6/lib/BinaryMorse.pm6 @@ -0,0 +1,54 @@ +unit module BinaryMorse; + +our %morse = +( + A => '.-', + B => '-...', + C => '-.-.', + D => '-..', + E => '.', + F => '..-.', + G => '--.', + H => '....', + I => '..', + J => '.---', + K => '-.-', + L => '.-..', + M => '--', + N => '-.', + O => '---', + P => '.--.', + Q => '--.-', + R => '.-.', + S => '...', + T => '-', + U => '..-', + V => '...-', + W => '.--', + X => '-..-', + Y => '-.--', + Z => '--..', + 0 => '-----', + 1 => '.----', + 2 => '..---', + 3 => '...--', + 4 => '....-', + 5 => '.....', + 6 => '-....', + 7 => '--...', + 8 => '---..', + 9 => '----.', + '.' => '.-.-.', + ',' => '--..--' +); + +our %remorse = %morse.antipairs; + +our %binary-morse; + +for %morse.kv -> $char, $value +{ + %binary-morse{$char} = $value.comb.map({ $_ eq '.' ?? '1' !! '111' }).join('0'); +} + +our %binary-remorse = %binary-morse.antipairs; diff --git a/challenge-035/arne-sommer/perl6/lib/BinaryMorse2.pm6 b/challenge-035/arne-sommer/perl6/lib/BinaryMorse2.pm6 new file mode 100644 index 0000000000..42d9fbbf4b --- /dev/null +++ b/challenge-035/arne-sommer/perl6/lib/BinaryMorse2.pm6 @@ -0,0 +1,93 @@ +unit module BinaryMorse2; + +my %morse = +( + A => '.-', + B => '-...', + C => '-.-.', + D => '-..', + E => '.', + F => '..-.', + G => '--.', + H => '....', + I => '..', + J => '.---', + K => '-.-', + L => '.-..', + M => '--', + N => '-.', + O => '---', + P => '.--.', + Q => '--.-', + R => '.-.', + S => '...', + T => '-', + U => '..-', + V => '...-', + W => '.--', + X => '-..-', + Y => '-.--', + Z => '--..', + 0 => '-----', + 1 => '.----', + 2 => '..---', + 3 => '...--', + 4 => '....-', + 5 => '.....', + 6 => '-....', + 7 => '--...', + 8 => '---..', + 9 => '----.', + '.' => '.-.-.', + ',' => '--..--', + '?' => '..--..' +); + +my %remorse = %morse.antipairs; + +my %binary-morse; + +for %morse.kv -> $char, $value +{ + %binary-morse{$char} = $value.comb.map({ $_ eq '.' ?? '1' !! '111' }).join('0'); +} + +my %binary-remorse = %binary-morse.antipairs; + +constant unknown = '?'; + +our sub morsify (Str $text) +{ + my @words; + + for $text.split(/\s+/) -> $word + { + my @new-word; + for $word.comb -> $character + { + @new-word.push(%binary-morse{$character} // %binary-morse{$character.uc} // %binary-morse{unknown} ); + } + @words.push(@new-word.join('000')); + } + + return @words.join("0000000"); +} + +subset BinaryMorse of Str where * ~~ /^<[01]>*$/; + +our sub demorsify (BinaryMorse $text) +{ + my @words; + + for $text.split("0000000") -> $word + { + my $new-word = ""; + for $word.split("000") -> $character + { + $new-word ~= %binary-remorse{$character} //unknown; + } + @words.push($new-word); + } + return @words.join(" "); +} + |
