diff options
| author | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2020-05-10 17:55:12 +0100 |
|---|---|---|
| committer | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2020-05-10 17:55:12 +0100 |
| commit | aa268a15060ccd7d3eb0c04c4e50fe588e224a94 (patch) | |
| tree | 95b7cf506e1117993b748b08c2b409b00aeaea2c /challenge-059 | |
| parent | 8eb6a7efcc6698fe1c1fb7e1d98a36b93d667f5c (diff) | |
| download | perlweeklychallenge-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.txt | 1 | ||||
| -rw-r--r-- | challenge-059/laurent-rosenfeld/perl/ch-1.pl | 16 | ||||
| -rw-r--r-- | challenge-059/laurent-rosenfeld/perl/ch-1a.pl | 31 | ||||
| -rw-r--r-- | challenge-059/laurent-rosenfeld/perl/ch-2.pl | 22 | ||||
| -rw-r--r-- | challenge-059/laurent-rosenfeld/raku/ch-1.p6 | 13 | ||||
| -rw-r--r-- | challenge-059/laurent-rosenfeld/raku/ch-1a.p6 | 6 | ||||
| -rw-r--r-- | challenge-059/laurent-rosenfeld/raku/ch-2.p6 | 17 |
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; |
