aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--challenge-109/lance-wicks/blog.txt1
-rw-r--r--challenge-109/lance-wicks/elm/elm.json26
-rw-r--r--challenge-109/lance-wicks/elm/src/Chowla.elm31
-rw-r--r--challenge-109/lance-wicks/elm/tests/N.elm41
-rw-r--r--challenge-109/lance-wicks/elm/tests/Nums.elm19
-rw-r--r--challenge-109/lance-wicks/perl/ch-1.pl12
-rw-r--r--challenge-109/lance-wicks/perl/lib/Chowla.pm26
-rw-r--r--challenge-109/lance-wicks/perl/t/01-chowla.t12
8 files changed, 168 insertions, 0 deletions
diff --git a/challenge-109/lance-wicks/blog.txt b/challenge-109/lance-wicks/blog.txt
new file mode 100644
index 0000000000..50cb30e0fb
--- /dev/null
+++ b/challenge-109/lance-wicks/blog.txt
@@ -0,0 +1 @@
+https://perl.kiwi/tales/2021/04/24/perl-weekly-challenge-109-in-perl-and-elm/
diff --git a/challenge-109/lance-wicks/elm/elm.json b/challenge-109/lance-wicks/elm/elm.json
new file mode 100644
index 0000000000..418d33c9ab
--- /dev/null
+++ b/challenge-109/lance-wicks/elm/elm.json
@@ -0,0 +1,26 @@
+{
+ "type": "application",
+ "source-directories": [
+ "src"
+ ],
+ "elm-version": "0.19.1",
+ "dependencies": {
+ "direct": {
+ "elm/browser": "1.0.2",
+ "elm/core": "1.0.5",
+ "elm/html": "1.0.0",
+ "elm-explorations/test": "1.2.2"
+ },
+ "indirect": {
+ "elm/json": "1.1.3",
+ "elm/random": "1.0.0",
+ "elm/time": "1.0.0",
+ "elm/url": "1.0.0",
+ "elm/virtual-dom": "1.0.2"
+ }
+ },
+ "test-dependencies": {
+ "direct": {},
+ "indirect": {}
+ }
+}
diff --git a/challenge-109/lance-wicks/elm/src/Chowla.elm b/challenge-109/lance-wicks/elm/src/Chowla.elm
new file mode 100644
index 0000000000..d5041545ea
--- /dev/null
+++ b/challenge-109/lance-wicks/elm/src/Chowla.elm
@@ -0,0 +1,31 @@
+module Chowla exposing (chowla, n, nums)
+
+import List
+
+
+nums : Int -> List Int
+nums max =
+ List.range 1 max
+ |> List.map n
+
+
+n : Int -> Int
+n num =
+ let
+ denominators =
+ List.range 2 (num - 1)
+
+ numbers =
+ List.map (chowla num) denominators
+ in
+ List.foldl (+) 0 numbers
+
+
+chowla : Int -> Int -> Int
+chowla num denom =
+ case remainderBy denom num of
+ 0 ->
+ denom
+
+ _ ->
+ 0
diff --git a/challenge-109/lance-wicks/elm/tests/N.elm b/challenge-109/lance-wicks/elm/tests/N.elm
new file mode 100644
index 0000000000..6a81cde5a1
--- /dev/null
+++ b/challenge-109/lance-wicks/elm/tests/N.elm
@@ -0,0 +1,41 @@
+module N exposing (..)
+
+import Chowla
+import Expect
+import Test exposing (..)
+
+
+suite : Test
+suite =
+ describe "Chowla number"
+ [ test "n 1" <|
+ \_ -> Chowla.n 1 |> Expect.equal 0
+ , test "n 4" <|
+ \_ -> Chowla.n 4 |> Expect.equal 2
+ , test "n 6" <|
+ \_ -> Chowla.n 6 |> Expect.equal 5
+ ]
+
+
+chowla : Test
+chowla =
+ describe "Chowla number logic"
+ [ test "chowla 2 2" <|
+ \_ -> Chowla.chowla 2 2 |> Expect.equal 2
+ , test "chowla 2 3" <|
+ \_ -> Chowla.chowla 2 3 |> Expect.equal 0
+ , test "chowla 2 4" <|
+ \_ -> Chowla.chowla 2 4 |> Expect.equal 0
+ ]
+
+
+list : Test
+list =
+ describe "First 20 Chowla numbers"
+ [ test "nums 6" <|
+ \_ -> Chowla.nums 6 |> Expect.equal [ 0, 0, 0, 2, 0, 5 ]
+ , test "nums 22" <|
+ \_ -> Chowla.nums 22 |> Expect.equal [ 0, 0, 0, 2, 0, 5, 0, 6, 3, 7, 0, 15, 0, 9, 8, 14, 0, 20, 0, 21, 10, 13 ]
+ , test "nums 20" <|
+ \_ -> Chowla.nums 20 |> Expect.equal [ 0, 0, 0, 2, 0, 5, 0, 6, 3, 7, 0, 15, 0, 9, 8, 14, 0, 20, 0, 21 ]
+ ]
diff --git a/challenge-109/lance-wicks/elm/tests/Nums.elm b/challenge-109/lance-wicks/elm/tests/Nums.elm
new file mode 100644
index 0000000000..8fc89e54b8
--- /dev/null
+++ b/challenge-109/lance-wicks/elm/tests/Nums.elm
@@ -0,0 +1,19 @@
+module Nums exposing (..)
+
+import Chowla
+import Expect
+import Test exposing (..)
+
+
+suite : Test
+suite =
+ describe "Chowla numbers"
+ [ test "nums 20" <|
+ \_ -> Chowla.nums 20 |> Expect.equal [ 0, 0, 0, 2, 0, 5, 0, 6, 3, 7, 0, 15, 0, 9, 8, 14, 0, 20, 0, 21 ]
+ , test "nums 18" <|
+ \_ -> Chowla.nums 18 |> Expect.equal [ 0, 0, 0, 2, 0, 5, 0, 6, 3, 7, 0, 15, 0, 9, 8, 14, 0, 20 ]
+ , test "nums 6" <|
+ \_ -> Chowla.nums 6 |> Expect.equal [ 0, 0, 0, 2, 0, 5 ]
+ , test "nums 4" <|
+ \_ -> Chowla.nums 4 |> Expect.equal [ 0, 0, 0, 2 ]
+ ]
diff --git a/challenge-109/lance-wicks/perl/ch-1.pl b/challenge-109/lance-wicks/perl/ch-1.pl
new file mode 100644
index 0000000000..ddbb11ad8a
--- /dev/null
+++ b/challenge-109/lance-wicks/perl/ch-1.pl
@@ -0,0 +1,12 @@
+use strict;
+use warnings;
+
+use lib './lib';
+use Chowla;
+
+my $c = Chowla->new;
+my $numbers = $c->list(20);
+
+for my $n (@$numbers) {
+ print "$n, ";
+}
diff --git a/challenge-109/lance-wicks/perl/lib/Chowla.pm b/challenge-109/lance-wicks/perl/lib/Chowla.pm
new file mode 100644
index 0000000000..06619c38d2
--- /dev/null
+++ b/challenge-109/lance-wicks/perl/lib/Chowla.pm
@@ -0,0 +1,26 @@
+package Chowla;
+
+use Moo;
+
+sub list {
+ my ($self,$max) = @_;
+ my @chowla_numbers;
+ for my $n (1..$max) {
+ push @chowla_numbers, $self->n($n);
+ }
+ return \@chowla_numbers;
+}
+
+sub n {
+ my ($self,$num) = @_;
+
+ my $total = 0;
+ for my $n (2..$num-1) {
+ if ($num % $n == 0) {
+ $total += $n;
+ }
+ }
+ return $total;
+}
+
+1;
diff --git a/challenge-109/lance-wicks/perl/t/01-chowla.t b/challenge-109/lance-wicks/perl/t/01-chowla.t
new file mode 100644
index 0000000000..15d50ac14e
--- /dev/null
+++ b/challenge-109/lance-wicks/perl/t/01-chowla.t
@@ -0,0 +1,12 @@
+use Test2::V0 -target => 'Chowla';
+
+is $CLASS->list(20),[0, 0, 0, 2, 0, 5, 0, 6, 3, 7, 0, 15, 0, 9, 8, 14, 0, 20, 0, 21], 'List the first 20 Chowla numbers';
+
+is $CLASS->n(1),0, 'First Chowla number should be zero';
+is $CLASS->n(2),0, 'Second Chowla number should be zero';
+is $CLASS->n(3),0, 'Third Chowla number should be zero';
+is $CLASS->n(4),2, 'Fourth Chowla number should be two';
+is $CLASS->n(5),0, 'Fifth Chowla number should be 0';
+is $CLASS->n(6),5, 'Sixth Chowla number should be 5';
+
+done_testing;