aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--challenge-006/stuart-little/README1
-rwxr-xr-xchallenge-006/stuart-little/raku/ch-1.p610
-rwxr-xr-xchallenge-006/stuart-little/raku/ch-2.p615
-rw-r--r--challenge-046/stuart-little/README1
-rwxr-xr-xchallenge-046/stuart-little/raku/ch-1.p627
-rwxr-xr-xchallenge-046/stuart-little/raku/ch-2.p66
-rw-r--r--challenge-050/stuart-little/README1
-rwxr-xr-xchallenge-050/stuart-little/raku/ch-1.p618
-rwxr-xr-xchallenge-050/stuart-little/raku/ch-2.p610
-rw-r--r--challenge-051/stuart-little/README1
-rwxr-xr-xchallenge-051/stuart-little/raku/ch-1.p610
-rwxr-xr-xchallenge-051/stuart-little/raku/ch-2.p611
-rw-r--r--challenge-052/stuart-little/README1
-rwxr-xr-xchallenge-052/stuart-little/raku/ch-1.p629
-rwxr-xr-xchallenge-052/stuart-little/raku/ch-2.p610
-rw-r--r--challenge-053/stuart-little/README1
-rwxr-xr-xchallenge-053/stuart-little/raku/ch-1.p619
-rwxr-xr-xchallenge-053/stuart-little/raku/ch-2.p624
-rw-r--r--challenge-090/aaronreidsmith/blog.txt1
-rw-r--r--challenge-090/aaronreidsmith/raku/ch-1.raku17
-rw-r--r--challenge-090/aaronreidsmith/raku/ch-2.raku21
-rwxr-xr-xchallenge-090/alexander-pankoff/perl/ch-1.pl17
-rwxr-xr-xchallenge-090/alexander-pankoff/perl/ch-2.pl45
-rw-r--r--challenge-090/andinus/README94
-rw-r--r--challenge-090/andinus/README.org75
-rw-r--r--challenge-090/andinus/blog-2.txt1
-rwxr-xr-xchallenge-090/andinus/raku/ch-2.raku38
-rw-r--r--challenge-090/cristian-heredia/perl/ch-2.pl38
-rw-r--r--challenge-090/dave-jacoby/blog.txt1
-rw-r--r--challenge-090/dave-jacoby/perl/ch-1.pl22
-rw-r--r--challenge-090/dave-jacoby/perl/ch-2.pl38
-rw-r--r--challenge-090/garrett-goebel/README1
-rw-r--r--challenge-090/garrett-goebel/raku/ch-1.raku5
-rw-r--r--challenge-090/garrett-goebel/raku/ch-2.raku19
-rw-r--r--challenge-090/laurent-rosenfeld/blog.txt1
-rw-r--r--challenge-090/laurent-rosenfeld/perl/ch-1.pl12
-rw-r--r--challenge-090/laurent-rosenfeld/perl/ch-2.pl12
-rw-r--r--challenge-090/laurent-rosenfeld/raku/ch-1.raku13
-rw-r--r--challenge-090/laurent-rosenfeld/raku/ch-2.raku10
-rw-r--r--challenge-090/pete-houston/perl/ch-1.pl27
-rw-r--r--challenge-090/pete-houston/perl/ch-2.pl77
-rw-r--r--challenge-090/tyler-wardhaugh/clojure/README.md10
-rw-r--r--challenge-090/tyler-wardhaugh/clojure/deps.edn10
-rw-r--r--challenge-090/tyler-wardhaugh/clojure/pom.xml24
-rw-r--r--challenge-090/tyler-wardhaugh/clojure/src/tw/weekly/c90/core.clj12
-rw-r--r--challenge-090/tyler-wardhaugh/clojure/src/tw/weekly/c90/t1.clj28
-rw-r--r--challenge-090/tyler-wardhaugh/clojure/src/tw/weekly/c90/t2.clj22
-rw-r--r--challenge-090/tyler-wardhaugh/clojure/test/tw/weekly/c90_test.clj16
-rw-r--r--challenge-090/tyler-wardhaugh/lua/README.md6
-rwxr-xr-xchallenge-090/tyler-wardhaugh/lua/ch-1.lua35
-rwxr-xr-xchallenge-090/tyler-wardhaugh/lua/ch-2.lua27
-rwxr-xr-xchallenge-090/tyler-wardhaugh/lua/run.lua9
-rwxr-xr-xchallenge-090/tyler-wardhaugh/lua/test.lua21
-rw-r--r--challenge-090/tyler-wardhaugh/lua/util.lua14
-rw-r--r--challenge-090/ziameraj16/README.md1
-rwxr-xr-xchallenge-090/ziameraj16/java/EthiopianMultiplication.java25
-rw-r--r--guests.json4
-rw-r--r--members.json1
-rw-r--r--stats/pwc-challenge-006.json375
-rw-r--r--stats/pwc-challenge-046.json269
-rw-r--r--stats/pwc-challenge-050.json321
-rw-r--r--stats/pwc-challenge-051.json453
-rw-r--r--stats/pwc-challenge-052.json279
-rw-r--r--stats/pwc-challenge-053.json505
-rw-r--r--stats/pwc-challenge-088.json624
-rw-r--r--stats/pwc-challenge-089.json282
-rw-r--r--stats/pwc-current.json258
-rw-r--r--stats/pwc-language-breakdown-summary.json64
-rw-r--r--stats/pwc-language-breakdown.json662
-rw-r--r--stats/pwc-leaders.json422
-rw-r--r--stats/pwc-summary-1-30.json112
-rw-r--r--stats/pwc-summary-121-150.json58
-rw-r--r--stats/pwc-summary-151-180.json38
-rw-r--r--stats/pwc-summary-181-210.json62
-rw-r--r--stats/pwc-summary-31-60.json62
-rw-r--r--stats/pwc-summary-61-90.json112
-rw-r--r--stats/pwc-summary-91-120.json116
-rw-r--r--stats/pwc-summary.json484
78 files changed, 3873 insertions, 2730 deletions
diff --git a/challenge-006/stuart-little/README b/challenge-006/stuart-little/README
new file mode 100644
index 0000000000..78439907de
--- /dev/null
+++ b/challenge-006/stuart-little/README
@@ -0,0 +1 @@
+Solutions by Stuart Little
diff --git a/challenge-006/stuart-little/raku/ch-1.p6 b/challenge-006/stuart-little/raku/ch-1.p6
new file mode 100755
index 0000000000..c475bdde13
--- /dev/null
+++ b/challenge-006/stuart-little/raku/ch-1.p6
@@ -0,0 +1,10 @@
+#!/usr/bin/env perl6
+use v6;
+
+# run as <script> <space-separated list entries>
+
+sub compactify(@a) {
+ S:g/\D*\-\D*/-/ with @a.sort.unique.map({ (($_-1,$_,$_+1).all == @a.any) ?? '-' !! $_ }).join(',')
+}
+
+say @*ARGS.map(*.Int).&compactify
diff --git a/challenge-006/stuart-little/raku/ch-2.p6 b/challenge-006/stuart-little/raku/ch-2.p6
new file mode 100755
index 0000000000..fb07fe23cd
--- /dev/null
+++ b/challenge-006/stuart-little/raku/ch-2.p6
@@ -0,0 +1,15 @@
+#!/usr/bin/env perl6
+use v6;
+
+# run as <script>
+
+use Inline::Perl5;
+my $p5 = Inline::Perl5.new;
+
+$p5.run(q{
+ use v5.12;
+ use Math::BigFloat;
+ Math::BigFloat->precision(-60);
+
+ say substr(Math::BigFloat->new('1')->bexp()->bpow(Math::BigFloat->bpi()->bmul(Math::BigFloat->new('163')->bsqrt())->bround(60)),0,52);
+ });
diff --git a/challenge-046/stuart-little/README b/challenge-046/stuart-little/README
new file mode 100644
index 0000000000..78439907de
--- /dev/null
+++ b/challenge-046/stuart-little/README
@@ -0,0 +1 @@
+Solutions by Stuart Little
diff --git a/challenge-046/stuart-little/raku/ch-1.p6 b/challenge-046/stuart-little/raku/ch-1.p6
new file mode 100755
index 0000000000..4a94cafd3c
--- /dev/null
+++ b/challenge-046/stuart-little/raku/ch-1.p6
@@ -0,0 +1,27 @@
+#!/usr/bin/env perl6
+use v6;
+
+# run as <script>
+
+sub rep_across_msgs(@a) {
+ (roundrobin @a.List).map({ ($_.Bag (-) $_.Set).keys })
+}
+
+my @a1=(
+ <H x l 4 !>,
+ <c e - l o>,
+ <z e 6 l g>,
+ <H W l v R>,
+ <q 9 m # o>,
+);
+
+my @a2=(
+ Q:w{P + 2 l ! a t o},
+ Q:w{1 e 8 0 R $ 4 u},
+ Q:w{5 - r ] + a > /},
+ Q:w{P x w l b 3 k \},
+ Q:w{2 e 3 5 R 8 y u},
+ Q:w{< ! r ^ ( ) k 0},
+);
+
+for (@a1, @a2) {.&rep_across_msgs.say}
diff --git a/challenge-046/stuart-little/raku/ch-2.p6 b/challenge-046/stuart-little/raku/ch-2.p6
new file mode 100755
index 0000000000..415f17ec1a
--- /dev/null
+++ b/challenge-046/stuart-little/raku/ch-2.p6
@@ -0,0 +1,6 @@
+#!/usr/bin/env perl6
+use v6;
+
+# run as <script>
+
+say (1..500).grep({ $_.sqrt.floor ** 2 == $_ })
diff --git a/challenge-050/stuart-little/README b/challenge-050/stuart-little/README
new file mode 100644
index 0000000000..78439907de
--- /dev/null
+++ b/challenge-050/stuart-little/README
@@ -0,0 +1 @@
+Solutions by Stuart Little
diff --git a/challenge-050/stuart-little/raku/ch-1.p6 b/challenge-050/stuart-little/raku/ch-1.p6
new file mode 100755
index 0000000000..7d14b691dd
--- /dev/null
+++ b/challenge-050/stuart-little/raku/ch-1.p6
@@ -0,0 +1,18 @@
+#!/usr/bin/env perl6
+use v6;
+
+sub mrg(@a) {
+ my @srta = @a.sort;
+ given @a.elems {
+ when * <= 1 { @srta }
+ default {
+ (@srta[0;1] < @srta[1;0])
+ ?? (@srta[0], |mrg(@srta[1..*]))
+ !! (((@srta[0;0],max(@srta[0;1],@srta[1;1])), |@srta[2..*]).&mrg)
+ }
+ }
+}
+
+say @*ARGS.map(*.split(',').map(*.Int)).&mrg
+
+# run as <script> <space-separated intervals with comma-separated endpoints; e.g. <script> 2,7 3,9 10,12 15,19 18,22
diff --git a/challenge-050/stuart-little/raku/ch-2.p6 b/challenge-050/stuart-little/raku/ch-2.p6
new file mode 100755
index 0000000000..1488e7ec86
--- /dev/null
+++ b/challenge-050/stuart-little/raku/ch-2.p6
@@ -0,0 +1,10 @@
+#!/usr/bin/env perl6
+use v6;
+
+sub nob(@a) {
+ @a.grep({ $_ == @a.grep( * > $_ ) })
+}
+
+say nob(@*ARGS.map(*.Int));
+
+# run as <script> <space-separated array entries>
diff --git a/challenge-051/stuart-little/README b/challenge-051/stuart-little/README
new file mode 100644
index 0000000000..78439907de
--- /dev/null
+++ b/challenge-051/stuart-little/README
@@ -0,0 +1 @@
+Solutions by Stuart Little
diff --git a/challenge-051/stuart-little/raku/ch-1.p6 b/challenge-051/stuart-little/raku/ch-1.p6
new file mode 100755
index 0000000000..e395d47003
--- /dev/null
+++ b/challenge-051/stuart-little/raku/ch-1.p6
@@ -0,0 +1,10 @@
+#!/usr/bin/env perl6
+use v6;
+
+sub sum3($t, @a) {
+ @a.combinations(3).grep({ $_.sum == $t })
+}
+
+say sum3(@*ARGS[0].Int, @*ARGS[1..*].map(*.Int));
+
+# run as <script> <target> <space-separated array entries>
diff --git a/challenge-051/stuart-little/raku/ch-2.p6 b/challenge-051/stuart-little/raku/ch-2.p6
new file mode 100755
index 0000000000..324e1ac8f0
--- /dev/null
+++ b/challenge-051/stuart-little/raku/ch-2.p6
@@ -0,0 +1,11 @@
+#!/usr/bin/env perl6
+use v6;
+
+sub iscol($n) {
+ ((^$n.chars) X (^$n.chars)).grep({ $_[1] >= $_[0] }).map({ $n.substr($_[0]..$_[1]) }).map({ $_.split('',:skip-empty).reduce(&infix:<*>) }).unique.elems
+ == $n.chars * ($n.chars+1) /2
+}
+
+say (100..999).grep(&iscol);
+
+# run as <script>
diff --git a/challenge-052/stuart-little/README b/challenge-052/stuart-little/README
new file mode 100644
index 0000000000..78439907de
--- /dev/null
+++ b/challenge-052/stuart-little/README
@@ -0,0 +1 @@
+Solutions by Stuart Little
diff --git a/challenge-052/stuart-little/raku/ch-1.p6 b/challenge-052/stuart-little/raku/ch-1.p6
new file mode 100755
index 0000000000..abe8385aff
--- /dev/null
+++ b/challenge-052/stuart-little/raku/ch-1.p6
@@ -0,0 +1,29 @@
+#!/usr/bin/env perl6
+use v6;
+
+sub p1max(@a where *.elems %% 2) {
+ given @a.elems {
+ when 0 { 0 }
+ when 2 { @a.max }
+ default { (
+ @a[0] + (@a[2..*].&p1max, @a[1..^(@a-1)].&p1max).min,
+ @a[*-1] + (@a[1..^(@a-1)].&p1max, @a[0..^(@a-2)].&p1max).min
+ ).max }
+ }
+}
+
+sub winner(@a) {
+ given @a.&p1max {
+ when * > @a.sum/2 {"Player 1 wins"}
+ when * < @a.sum/2 {"Player 2 wins"}
+ default {"Draw"}
+ }
+}
+
+
+my @coins=(1, 0.50, 0.01, 0.10, 0.05, 0.20, 2, 0.02);
+
+say "Best strategy for player 1 results in winning ", @coins.&p1max;
+say @coins.&winner;
+
+# run as <script>
diff --git a/challenge-052/stuart-little/raku/ch-2.p6 b/challenge-052/stuart-little/raku/ch-2.p6
new file mode 100755
index 0000000000..8c55a49ab4
--- /dev/null
+++ b/challenge-052/stuart-little/raku/ch-2.p6
@@ -0,0 +1,10 @@
+#!/usr/bin/env perl6
+use v6;
+
+sub isstep($n) {
+ (($n.split('',:skip-empty) Z- $n.substr(1..*).split('',:skip-empty)).all ~~ *.abs==1).Bool
+}
+
+say (100..999).grep(&isstep);
+
+# run as <script>
diff --git a/challenge-053/stuart-little/README b/challenge-053/stuart-little/README
new file mode 100644
index 0000000000..78439907de
--- /dev/null
+++ b/challenge-053/stuart-little/README
@@ -0,0 +1 @@
+Solutions by Stuart Little
diff --git a/challenge-053/stuart-little/raku/ch-1.p6 b/challenge-053/stuart-little/raku/ch-1.p6
new file mode 100755
index 0000000000..f35fdf94e3
--- /dev/null
+++ b/challenge-053/stuart-little/raku/ch-1.p6
@@ -0,0 +1,19 @@
+#!/usr/bin/env perl6
+use v6;
+
+sub rot(@a,$a) {
+ given $a {
+ when 0 { @a }
+ when 90 { @a[0].keys.map({ @a[0..^@a;$_] }).map(*.reverse) }
+ when 180 { @a.reverse.map(*.reverse) }
+ when 270 { rot(@a,90).reverse.map(*.reverse) }
+ }
+}
+
+my @a=((1,2,3),(4,5,6),(7,8,9));
+
+for rot(@a,@*ARGS[0]) {
+ .say
+}
+
+# run as <script> <angle in degrees>
diff --git a/challenge-053/stuart-little/raku/ch-2.p6 b/challenge-053/stuart-little/raku/ch-2.p6
new file mode 100755
index 0000000000..c7a93d448c
--- /dev/null
+++ b/challenge-053/stuart-little/raku/ch-2.p6
@@ -0,0 +1,24 @@
+#!/usr/bin/env perl6
+use v6;
+
+sub allwstr(Int $l where * >= 0, %h) {
+ given $l {
+ when 0 { () }
+ when 1 { %h.keys.sort }
+ default {
+ allwstr($l-1, %h).map({ $_ X~ @(%h.{$_.substr(*-1)}).sort }).flat
+ }
+ }
+}
+
+my %h = (
+ a => <e i>,
+ e => <i>,
+ i => <a e o u>,
+ o => <a u>,
+ u => <o e>,
+);
+
+say allwstr(@*ARGS[0].Int,%h);
+
+# run as <script> <string length>
diff --git a/challenge-090/aaronreidsmith/blog.txt b/challenge-090/aaronreidsmith/blog.txt
new file mode 100644
index 0000000000..c0bf9276a7
--- /dev/null
+++ b/challenge-090/aaronreidsmith/blog.txt
@@ -0,0 +1 @@
+https://aaronreidsmith.github.io/blog/perl-weekly-challenge-090/ \ No newline at end of file
diff --git a/challenge-090/aaronreidsmith/raku/ch-1.raku b/challenge-090/aaronreidsmith/raku/ch-1.raku
new file mode 100644
index 0000000000..3c12a719c9
--- /dev/null
+++ b/challenge-090/aaronreidsmith/raku/ch-1.raku
@@ -0,0 +1,17 @@
+#!/usr/bin/env perl6
+
+subset ValidDna of Str where { $_ ~~ /^^[A|T|G|C]+$$/ }
+
+# Since DNA is generally read from 5' to 3', I included the option to find the
+# reverse compliment in addition to the complement
+sub MAIN($dna where $dna ~~ ValidDna, Bool :rc(:$reverse-complement) = False) {
+ say "Input stats:\n{$dna.comb.Bag.Hash}\n";
+
+ say "Complement:";
+ my $translated = $dna.trans('ATGC' => 'TACG');
+ if $reverse-complement {
+ say "5'-{$translated.flip}-3'";
+ } else {
+ say "3'-$translated-5'"
+ }
+}
diff --git a/challenge-090/aaronreidsmith/raku/ch-2.raku b/challenge-090/aaronreidsmith/raku/ch-2.raku
new file mode 100644
index 0000000000..fa5fe375c6
--- /dev/null
+++ b/challenge-090/aaronreidsmith/raku/ch-2.raku
@@ -0,0 +1,21 @@
+#!/usr/bin/env perl6
+
+subset PositiveInt of Int where { $_ ~~ Int && $_ > 0 }
+
+sub generate-pairs($a, $b) {
+ sprintf("%02d, %02d", $a, $b).put;
+ if $a == 1 {
+ (($a, $b),);
+ } else {
+ (($a, $b), |generate-pairs($a div 2, $b * 2));
+ }
+}
+
+sub MAIN(PositiveInt $A, PositiveInt $B) {
+ say "Input: A=$A, B=$B";
+ say "Divide A by 2 (ignoring remainders) until it is 1. Multiply B by 2 as we go:";
+ my @pairs = generate-pairs($A, $B);
+ say "Then, wherever A is odd, we add the Bs together:";
+ my @odd-bs = @pairs.grep(-> @pair { !(@pair[0] %% 2) }).map(-> @pair { @pair[1] });
+ say "{@odd-bs.join(' + ')} = {@odd-bs.sum}";
+}
diff --git a/challenge-090/alexander-pankoff/perl/ch-1.pl b/challenge-090/alexander-pankoff/perl/ch-1.pl
new file mode 100755
index 0000000000..15f2c016bc
--- /dev/null
+++ b/challenge-090/alexander-pankoff/perl/ch-1.pl
@@ -0,0 +1,17 @@
+#!/usr/bin/env perl
+use v5.20;
+use utf8;
+use strict;
+use warnings;
+use feature qw(say signatures);
+no warnings 'experimental::signatures';
+
+{
+ my ( $sequence ) = @ARGV;
+ die 'need dna sequence' unless $sequence;
+ my %complements = ( T => 'A', G => 'C' );
+ %complements = ( %complements, reverse %complements );
+
+ say 'Nucleiobase count: ' . length( $sequence );
+ say 'Complementary sequence: ' . join( '', map { $complements{$_} } split( '', $sequence ) );
+}
diff --git a/challenge-090/alexander-pankoff/perl/ch-2.pl b/challenge-090/alexander-pankoff/perl/ch-2.pl
new file mode 100755
index 0000000000..a66c4feea7
--- /dev/null
+++ b/challenge-090/alexander-pankoff/perl/ch-2.pl
@@ -0,0 +1,45 @@
+#!/usr/bin/env perl
+use v5.20;
+use utf8;
+use strict;
+use warnings;
+use feature qw(say signatures);
+no warnings 'experimental::signatures';
+
+use List::Util qw(sum0);
+
+use Test::Simple tests => 20;
+
+use constant VERBOSE => $ENV{VERBOSE} // 0;
+
+{
+ for ( 0 .. 19 ) {
+ my ( $a, $b ) = map { int( rand( 1000 ) ) + 1 } 0 .. 1;
+ my $expected = $a * $b;
+ ok( ethopian_mul( $a, $b ) == $expected, "ethopian_mul($a, $b) = $a * $b = $expected" );
+ }
+}
+
+sub ethopian_mul ( $a, $b ) {
+ my @chain = ethopian_mul_chain( $a, $b );
+ verbose( "halving $a, doubling $b, till $a becomes 1" );
+ verbose( $_->[0] . ' & ' . $_->[1] ) for @chain;
+
+ my @filtered = map { $_->[1] } grep { odd( $_->[0] ) } @chain;
+ verbose( "taking right values where left value is odd" );
+ verbose( $_ ) for @filtered;
+ my $product = sum0( @filtered );
+ verbose( "product is $product" );
+ return $product;
+}
+
+sub ethopian_mul_chain ( $a, $b ) {
+ return [ $a, $b ] if $a <= 1;
+
+ # using bit shifts to avoid use of multiplication
+ return ( [ $a, $b ], ethopian_mul_chain( $a >> 1, $b << 1 ) );
+}
+
+sub odd($x) {
+ $x & 1;
+}
diff --git a/challenge-090/andinus/README b/challenge-090/andinus/README
index b372bec8d3..b662f1cb50 100644
--- a/challenge-090/andinus/README
+++ b/challenge-090/andinus/README
@@ -1,67 +1,95 @@
━━━━━━━━━━━━━━━
- CHALLENGE 086
+ CHALLENGE 090
Andinus
━━━━━━━━━━━━━━━
- 2020-11-15
+ 2020-12-08
Table of Contents
─────────────────
<