From fff9e4703ed20a60640c4ef24219499eb532ecb3 Mon Sep 17 00:00:00 2001 From: Lance Wicks Date: Wed, 21 Apr 2021 20:21:20 +0100 Subject: Perl implementation for 108, thanks Mohammad! --- challenge-109/lance-wicks/perl/ch-1.pl | 12 ++++++++++++ challenge-109/lance-wicks/perl/lib/Chowla.pm | 26 ++++++++++++++++++++++++++ challenge-109/lance-wicks/perl/t/01-chowla.t | 12 ++++++++++++ 3 files changed, 50 insertions(+) create mode 100644 challenge-109/lance-wicks/perl/ch-1.pl create mode 100644 challenge-109/lance-wicks/perl/lib/Chowla.pm create mode 100644 challenge-109/lance-wicks/perl/t/01-chowla.t 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; -- cgit From 301ec61e8e2d6f50164f399759d521dfdde53ff7 Mon Sep 17 00:00:00 2001 From: Lance Wicks Date: Sat, 24 Apr 2021 18:06:15 +0100 Subject: Challenge-109 Elm --- challenge-109/lance-wicks/elm/elm.json | 26 ++++++++++++++++++ challenge-109/lance-wicks/elm/src/Chowla.elm | 31 +++++++++++++++++++++ challenge-109/lance-wicks/elm/tests/N.elm | 41 ++++++++++++++++++++++++++++ challenge-109/lance-wicks/elm/tests/Nums.elm | 19 +++++++++++++ 4 files changed, 117 insertions(+) create mode 100644 challenge-109/lance-wicks/elm/elm.json create mode 100644 challenge-109/lance-wicks/elm/src/Chowla.elm create mode 100644 challenge-109/lance-wicks/elm/tests/N.elm create mode 100644 challenge-109/lance-wicks/elm/tests/Nums.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 ] + ] -- cgit From dd387fc9adf23c79aefdeebbcea8083f8c304d7f Mon Sep 17 00:00:00 2001 From: Lance Wicks Date: Sat, 24 Apr 2021 21:22:05 +0100 Subject: Add link to the blog post --- challenge-109/lance-wicks/blog.txt | 1 + 1 file changed, 1 insertion(+) create mode 100644 challenge-109/lance-wicks/blog.txt 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/ -- cgit