aboutsummaryrefslogtreecommitdiff
path: root/challenge-059
diff options
context:
space:
mode:
authorMohammad S Anwar <mohammad.anwar@yahoo.com>2020-05-10 17:55:12 +0100
committerMohammad S Anwar <mohammad.anwar@yahoo.com>2020-05-10 17:55:12 +0100
commitaa268a15060ccd7d3eb0c04c4e50fe588e224a94 (patch)
tree95b7cf506e1117993b748b08c2b409b00aeaea2c /challenge-059
parent8eb6a7efcc6698fe1c1fb7e1d98a36b93d667f5c (diff)
downloadperlweeklychallenge-club-aa268a15060ccd7d3eb0c04c4e50fe588e224a94.tar.gz
perlweeklychallenge-club-aa268a15060ccd7d3eb0c04c4e50fe588e224a94.tar.bz2
perlweeklychallenge-club-aa268a15060ccd7d3eb0c04c4e50fe588e224a94.zip
- Added solutions by Laurent Rosenfeld.
Diffstat (limited to 'challenge-059')
-rw-r--r--challenge-059/laurent-rosenfeld/blog.txt1
-rw-r--r--challenge-059/laurent-rosenfeld/perl/ch-1.pl16
-rw-r--r--challenge-059/laurent-rosenfeld/perl/ch-1a.pl31
-rw-r--r--challenge-059/laurent-rosenfeld/perl/ch-2.pl22
-rw-r--r--challenge-059/laurent-rosenfeld/raku/ch-1.p613
-rw-r--r--challenge-059/laurent-rosenfeld/raku/ch-1a.p66
-rw-r--r--challenge-059/laurent-rosenfeld/raku/ch-2.p617
7 files changed, 106 insertions, 0 deletions
diff --git a/challenge-059/laurent-rosenfeld/blog.txt b/challenge-059/laurent-rosenfeld/blog.txt
new file mode 100644
index 0000000000..ca3cb9f5cf
--- /dev/null
+++ b/challenge-059/laurent-rosenfeld/blog.txt
@@ -0,0 +1 @@
+http://blogs.perl.org/users/laurent_r/2020/05/perl-weekly-challenge-59-linked-lists-and-bit-sums.html
diff --git a/challenge-059/laurent-rosenfeld/perl/ch-1.pl b/challenge-059/laurent-rosenfeld/perl/ch-1.pl
new file mode 100644
index 0000000000..2a5c856811
--- /dev/null
+++ b/challenge-059/laurent-rosenfeld/perl/ch-1.pl
@@ -0,0 +1,16 @@
+use strict;
+use warnings;
+use feature "say";
+
+sub partition {
+ my $k = shift;
+ my @before = grep {$_ < $k} @_;
+ my @after = grep {$_ >= $k} @_;
+ return @before, @after;
+}
+
+my $k = shift;
+my $list_str = shift // "1 4 3 2 5 2";
+my @list = $list_str =~ /\d+/g;
+my @result = partition $k, @list;
+say join " → ", @result;
diff --git a/challenge-059/laurent-rosenfeld/perl/ch-1a.pl b/challenge-059/laurent-rosenfeld/perl/ch-1a.pl
new file mode 100644
index 0000000000..f67014447f
--- /dev/null
+++ b/challenge-059/laurent-rosenfeld/perl/ch-1a.pl
@@ -0,0 +1,31 @@
+use strict;
+use warnings;
+use feature qw/say/;
+use Data::Dumper;
+
+sub create_linked_list {
+ my $input = shift;
+ my $L;
+ for my $val (reverse split / /, $input) {
+ my $pt = { value => $val, next => $L };
+ $L = $pt;
+ }
+ return $L;
+}
+
+my $k = shift;
+my $list_str = shift // "1 4 3 2 5 2";
+my $list = create_linked_list $list_str;
+# say Dumper $list;
+my (@before, @after);
+while (1) {
+ last unless defined $list->{value};
+ my $temp = $list->{value};
+ if ($temp < $k) {
+ push @before, $temp;
+ } else {
+ push @after, $temp;
+ }
+ $list = $list->{next}
+}
+say join " → ", @before, @after;
diff --git a/challenge-059/laurent-rosenfeld/perl/ch-2.pl b/challenge-059/laurent-rosenfeld/perl/ch-2.pl
new file mode 100644
index 0000000000..e7eb0e583d
--- /dev/null
+++ b/challenge-059/laurent-rosenfeld/perl/ch-2.pl
@@ -0,0 +1,22 @@
+use strict;
+use warnings;
+use feature "say";
+
+sub compare {
+ my ($m, $n) = @_;
+ my @a = split //, sprintf "%08b", $m;
+ my @b = split //, sprintf "%08b", $n;
+ my $cnt = 0;
+ for my $i (0..7) {
+ $cnt++ if $a[$i] != $b[$i];
+ }
+ return $cnt;
+}
+my $diff = 0;
+my @nums = @ARGV;
+for my $i (0..$#nums) {
+ for my $j (($i+1) .. $#nums) {
+ $diff += compare $nums[$i], $nums[$j];
+ }
+}
+say $diff;
diff --git a/challenge-059/laurent-rosenfeld/raku/ch-1.p6 b/challenge-059/laurent-rosenfeld/raku/ch-1.p6
new file mode 100644
index 0000000000..8fea4b81bc
--- /dev/null
+++ b/challenge-059/laurent-rosenfeld/raku/ch-1.p6
@@ -0,0 +1,13 @@
+use v6;
+
+sub partition ($k, @list) {
+ my @before = grep {$_ < $k}, @list;
+ my @after = grep {$_ >= $k}, @list;
+ return |@before, |@after;
+}
+
+sub MAIN ($k, Str $list-str = "1 4 3 2 5 2") {
+ my @list = $list-str.comb(/\d+/);
+ my @result = partition $k, @list;
+ say @result.join(" → ");
+}
diff --git a/challenge-059/laurent-rosenfeld/raku/ch-1a.p6 b/challenge-059/laurent-rosenfeld/raku/ch-1a.p6
new file mode 100644
index 0000000000..7f74cc8a46
--- /dev/null
+++ b/challenge-059/laurent-rosenfeld/raku/ch-1a.p6
@@ -0,0 +1,6 @@
+use v6;
+
+my $k = 3;
+my @vals = <1 4 3 2 5 2>;
+my %out = classify { $_ < $k ?? 'before' !! 'after'}, @vals;
+say join " → ", |%out<before>, |%out<after>;
diff --git a/challenge-059/laurent-rosenfeld/raku/ch-2.p6 b/challenge-059/laurent-rosenfeld/raku/ch-2.p6
new file mode 100644
index 0000000000..c96a1787e9
--- /dev/null
+++ b/challenge-059/laurent-rosenfeld/raku/ch-2.p6
@@ -0,0 +1,17 @@
+use v6;
+
+sub compare (UInt $m, UInt $n) {
+ my @a = $m.fmt('%08b').comb;
+ my @b = $n.fmt('%08b').comb;
+ my $cnt = 0;
+ for 0..7 -> $i {
+ $cnt++ if @a[$i] != @b[$i];
+ }
+ return $cnt;
+}
+my $diff = 0;
+for @*ARGS.combinations(2) -> $seq {
+ $diff += compare +$seq[0], +$seq[1];
+}
+
+say $diff;