aboutsummaryrefslogtreecommitdiff
path: root/challenge-097
diff options
context:
space:
mode:
authorMohammad S Anwar <mohammad.anwar@yahoo.com>2021-01-31 22:58:24 +0000
committerMohammad S Anwar <mohammad.anwar@yahoo.com>2021-01-31 22:58:24 +0000
commit9bc5b6863b0bbbfce07cb174b37a767651b3d1f4 (patch)
treec2b40ee38673ce94e7ce0f79648c72dc2154e4f3 /challenge-097
parent5ced64a047e5f4fb70b4a8b145f031db3bfb22cd (diff)
downloadperlweeklychallenge-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.txt1
-rw-r--r--challenge-097/laurent-rosenfeld/perl/ch-1.pl17
-rw-r--r--challenge-097/laurent-rosenfeld/perl/ch-2.pl17
-rw-r--r--challenge-097/laurent-rosenfeld/python/ch-1.py15
-rw-r--r--challenge-097/laurent-rosenfeld/raku/ch-1.raku16
-rw-r--r--challenge-097/laurent-rosenfeld/raku/ch-2.raku17
-rw-r--r--challenge-097/laurent-rosenfeld/scala/ch-1.scala12
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
+ }
+}