From d5256416d8f7745f197c571ed14d9a4e9926d365 Mon Sep 17 00:00:00 2001 From: Roger Bell_West Date: Mon, 4 May 2020 14:55:19 +0100 Subject: Solutions for challenge #59. --- challenge-059/roger-bell-west/perl5/ch-1.pl | 30 +++++++++++++++++++++++++++++ challenge-059/roger-bell-west/perl5/ch-2.pl | 30 +++++++++++++++++++++++++++++ challenge-059/roger-bell-west/perl6/ch-1.p6 | 18 +++++++++++++++++ challenge-059/roger-bell-west/perl6/ch-2.p6 | 24 +++++++++++++++++++++++ 4 files changed, 102 insertions(+) create mode 100755 challenge-059/roger-bell-west/perl5/ch-1.pl create mode 100755 challenge-059/roger-bell-west/perl5/ch-2.pl create mode 100755 challenge-059/roger-bell-west/perl6/ch-1.p6 create mode 100755 challenge-059/roger-bell-west/perl6/ch-2.p6 (limited to 'challenge-059') diff --git a/challenge-059/roger-bell-west/perl5/ch-1.pl b/challenge-059/roger-bell-west/perl5/ch-1.pl new file mode 100755 index 0000000000..76e2b0dad0 --- /dev/null +++ b/challenge-059/roger-bell-west/perl5/ch-1.pl @@ -0,0 +1,30 @@ +#! /usr/bin/perl + +use strict; +use warnings; +use utf8; + +my $k=3; +my @list=(1,4,3,2,5,2); + +if (@ARGV) { + $k=pop @ARGV; + @list=@ARGV; +} + +my @m; +foreach (0..$#list) { + if ($list[$_] < $k) { + push @m,1; + } else { + push @m,2; + } +} + +my @out; +foreach my $mode (1,2) { + push @out,map {$list[$_]} grep {$m[$_]==$mode} 0..$#m; +} + +binmode STDOUT,':encoding(UTF-8)'; +print join(' → ',@out),"\n"; diff --git a/challenge-059/roger-bell-west/perl5/ch-2.pl b/challenge-059/roger-bell-west/perl5/ch-2.pl new file mode 100755 index 0000000000..34619585dc --- /dev/null +++ b/challenge-059/roger-bell-west/perl5/ch-2.pl @@ -0,0 +1,30 @@ +#! /usr/bin/perl + +use strict; +use warnings; + +use List::Util qw(max); + +my $s=0; +my @list=(2,3,4); +if (@ARGV) { + @list=@ARGV; +} +foreach my $i (0..$#list-1) { + foreach my $j ($i+1..$#list) { + $s+=f($list[$i],$list[$j]); + } +} +print "$s\n"; + +sub f { + my @f=@_; + my @g=map {[split '',sprintf('%b',$_)]} @f; + my $r=max(map{scalar @{$_}} @g); + foreach my $i (0..$#g) { + unshift @{$g[$i]},((0) x ($r-scalar @{$g[$i]})); + } + my $d=0; + map {$d+=($g[0][$_]==$g[1][$_])?0:1} (0..$r-1); + return $d; +} diff --git a/challenge-059/roger-bell-west/perl6/ch-1.p6 b/challenge-059/roger-bell-west/perl6/ch-1.p6 new file mode 100755 index 0000000000..263d6249b6 --- /dev/null +++ b/challenge-059/roger-bell-west/perl6/ch-1.p6 @@ -0,0 +1,18 @@ +#! /usr/bin/perl6 + +my $k=3; +my @list=(1,4,3,2,5,2); + +if (@*ARGS) { + $k=pop @*ARGS; + @list=@*ARGS; +} + +my %m=classify { $_ < $k ?? 1 !! 2 }, @list; + +my @out; +for 1,2 -> $mode { + @out.append: %m{$mode}.flat; +} + +say join(' → ',@out); diff --git a/challenge-059/roger-bell-west/perl6/ch-2.p6 b/challenge-059/roger-bell-west/perl6/ch-2.p6 new file mode 100755 index 0000000000..fd224ea22e --- /dev/null +++ b/challenge-059/roger-bell-west/perl6/ch-2.p6 @@ -0,0 +1,24 @@ +#! /usr/bin/perl6 + +my $s=0; +my @list=(2,3,4); +if (@*ARGS) { + @list=@*ARGS; +} +for 0..@list.end-1 -> $i { + for $i+1..@list.end -> $j { + $s+=f([@list[$i],@list[$j]]); + } +} +say $s; + +sub f (@f) { + my @g=(map {comb /./,sprintf('%b',$_)}, @f[0]).flat; + my @h=(map {comb /./,sprintf('%b',$_)}, @f[1]).flat; + my $r=max(@g.elems,@h.elems); + @g.prepend(0 xx ($r-@g.elems)); + @h.prepend(0 xx ($r-@h.elems)); + my $d=0; + map {$d+=(@g[$_]==@h[$_])??0!!1}, (0..$r-1); + return $d; +} -- cgit