diff options
| author | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2021-01-31 22:58:24 +0000 |
|---|---|---|
| committer | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2021-01-31 22:58:24 +0000 |
| commit | 9bc5b6863b0bbbfce07cb174b37a767651b3d1f4 (patch) | |
| tree | c2b40ee38673ce94e7ce0f79648c72dc2154e4f3 /challenge-097 | |
| parent | 5ced64a047e5f4fb70b4a8b145f031db3bfb22cd (diff) | |
| download | perlweeklychallenge-club-9bc5b6863b0bbbfce07cb174b37a767651b3d1f4.tar.gz perlweeklychallenge-club-9bc5b6863b0bbbfce07cb174b37a767651b3d1f4.tar.bz2 perlweeklychallenge-club-9bc5b6863b0bbbfce07cb174b37a767651b3d1f4.zip | |
- Added solutions by Laurent Rosenfeld.
Diffstat (limited to 'challenge-097')
| -rw-r--r-- | challenge-097/laurent-rosenfeld/blog.txt | 1 | ||||
| -rw-r--r-- | challenge-097/laurent-rosenfeld/perl/ch-1.pl | 17 | ||||
| -rw-r--r-- | challenge-097/laurent-rosenfeld/perl/ch-2.pl | 17 | ||||
| -rw-r--r-- | challenge-097/laurent-rosenfeld/python/ch-1.py | 15 | ||||
| -rw-r--r-- | challenge-097/laurent-rosenfeld/raku/ch-1.raku | 16 | ||||
| -rw-r--r-- | challenge-097/laurent-rosenfeld/raku/ch-2.raku | 17 | ||||
| -rw-r--r-- | challenge-097/laurent-rosenfeld/scala/ch-1.scala | 12 |
7 files changed, 95 insertions, 0 deletions
diff --git a/challenge-097/laurent-rosenfeld/blog.txt b/challenge-097/laurent-rosenfeld/blog.txt new file mode 100644 index 0000000000..b6a3edb8b5 --- /dev/null +++ b/challenge-097/laurent-rosenfeld/blog.txt @@ -0,0 +1 @@ +http://blogs.perl.org/users/laurent_r/2021/01/perl-weekly-challenge-97-caesar-cypher-and-binary-substrings.html diff --git a/challenge-097/laurent-rosenfeld/perl/ch-1.pl b/challenge-097/laurent-rosenfeld/perl/ch-1.pl new file mode 100644 index 0000000000..6cff64e87d --- /dev/null +++ b/challenge-097/laurent-rosenfeld/perl/ch-1.pl @@ -0,0 +1,17 @@ +use strict; +use warnings; +use feature "say"; +use constant MIN => ord 'A'; + +my $in_string = shift // "THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG"; +my $shift = shift // 3; +say rotate(uc $in_string, $shift); + +sub rotate { + my ($in, $shift) = @_; + return join "", + map { my $let = ord($_) - $shift; + $let += 26 if $let < MIN; + $_ eq " " ? " " : chr $let + } split "", $in; +} diff --git a/challenge-097/laurent-rosenfeld/perl/ch-2.pl b/challenge-097/laurent-rosenfeld/perl/ch-2.pl new file mode 100644 index 0000000000..4e90843775 --- /dev/null +++ b/challenge-097/laurent-rosenfeld/perl/ch-2.pl @@ -0,0 +1,17 @@ +use strict; +use warnings; +use feature qw/say/; + +my ($in_string, $size) = @ARGV; +my $sub_str_len = length($in_string) / $size; +my $flips = 0; +for my $i (0 .. $sub_str_len - 1) { + my $ones = 0; + for my $j (0 .. $size - 1) { + my $idx = $j * $sub_str_len + $i; + $ones++ if substr ($in_string, $idx, 1) == 1; + } + my $zeroes = $size - $ones; + $flips += $zeroes > $ones ? $ones : $zeroes; +} +say $flips; diff --git a/challenge-097/laurent-rosenfeld/python/ch-1.py b/challenge-097/laurent-rosenfeld/python/ch-1.py new file mode 100644 index 0000000000..ad5e10b786 --- /dev/null +++ b/challenge-097/laurent-rosenfeld/python/ch-1.py @@ -0,0 +1,15 @@ +ALPHA_COUNT = 26 +MIN = ord('A') + +input_string = "THE QUICK BROWN FOR JUMPS OVER THE LAZY DOG" +shift = 3 +out = "" +for char in input_string: + if 'A' <= char <= 'Z': + asc_code = ord(char) - shift + if asc_code < MIN: + asc_code += ALPHA_COUNT + out += chr(asc_code) + else: + out += char +print(out) diff --git a/challenge-097/laurent-rosenfeld/raku/ch-1.raku b/challenge-097/laurent-rosenfeld/raku/ch-1.raku new file mode 100644 index 0000000000..2972a4c768 --- /dev/null +++ b/challenge-097/laurent-rosenfeld/raku/ch-1.raku @@ -0,0 +1,16 @@ +use v6; +constant $default = "THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG"; +constant $min = 'A'.ord; +constant $max = 'Z'.ord; + +sub MAIN (Str $in-string = $default, Int $shift = 3) { + say rotate($in-string.uc, $shift); + #say $out; +} +sub rotate ($in, $shift) { + return join "", + map { my $let= $_ - $shift; + $let += 26 if $let < $min; + $min <= $_ <= $max ?? $let.chr !! $_.chr; + }, $in.comb>>.ord; +} diff --git a/challenge-097/laurent-rosenfeld/raku/ch-2.raku b/challenge-097/laurent-rosenfeld/raku/ch-2.raku new file mode 100644 index 0000000000..5e4a844eec --- /dev/null +++ b/challenge-097/laurent-rosenfeld/raku/ch-2.raku @@ -0,0 +1,17 @@ +use v6; +subset Binstr of Str where /^<[01]>*$/; + +sub MAIN (Binstr $in-string, Int $size) { + my $sub-str-len = $in-string.chars / $size; + my $flips = 0; + for 0..^$sub-str-len -> $i { + my $ones = 0; + for 0..^$size -> $j { + my $idx = $j * $sub-str-len + $i; + $ones++ if substr($in-string, $idx, 1) == 1 + } + my $zeroes = $size - $ones; + $flips += min ($zeroes, $ones) + } + say $flips; +} diff --git a/challenge-097/laurent-rosenfeld/scala/ch-1.scala b/challenge-097/laurent-rosenfeld/scala/ch-1.scala new file mode 100644 index 0000000000..4955cf936f --- /dev/null +++ b/challenge-097/laurent-rosenfeld/scala/ch-1.scala @@ -0,0 +1,12 @@ +object caesar extends App { + val test = "THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG" + val shift = 3 + println( test.map(convert(_, shift))) + + def convert(c: Char, shift: Int): Char = { + val min = 'A'.toByte + val asc = c.toByte - shift; + val conv = if (asc < min) asc + 26 else asc + return if (c == ' ') ' ' else conv.toChar + } +} |
