From 5b9c74b5a9179ed1bc5407860a822486c566c69a Mon Sep 17 00:00:00 2001 From: habere-et-dispertire Date: Sun, 17 Nov 2024 18:05:58 +0000 Subject: [PATCH 1/2] [ Implementation ] Eliud's Eggs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 💜²⁶ -- 🤝 https://forum.exercism.org/t/new-exercise-contributions/4077 --- config.json | 8 ++++ .../eliuds-eggs/.docs/instructions.md | 8 ++++ .../eliuds-eggs/.docs/introduction.md | 47 +++++++++++++++++++ .../practice/eliuds-eggs/.meta/config.json | 19 ++++++++ .../.meta/solutions/lib/EliudsEggs.rakumod | 5 ++ .../.meta/solutions/t/eliuds-eggs.rakutest | 1 + .../eliuds-eggs/.meta/template-data.yaml | 22 +++++++++ .../practice/eliuds-eggs/.meta/tests.toml | 22 +++++++++ .../eliuds-eggs/lib/EliudsEggs.rakumod | 4 ++ .../eliuds-eggs/t/eliuds-eggs.rakutest | 34 ++++++++++++++ 10 files changed, 170 insertions(+) create mode 100644 exercises/practice/eliuds-eggs/.docs/instructions.md create mode 100644 exercises/practice/eliuds-eggs/.docs/introduction.md create mode 100644 exercises/practice/eliuds-eggs/.meta/config.json create mode 100644 exercises/practice/eliuds-eggs/.meta/solutions/lib/EliudsEggs.rakumod create mode 120000 exercises/practice/eliuds-eggs/.meta/solutions/t/eliuds-eggs.rakutest create mode 100644 exercises/practice/eliuds-eggs/.meta/template-data.yaml create mode 100644 exercises/practice/eliuds-eggs/.meta/tests.toml create mode 100644 exercises/practice/eliuds-eggs/lib/EliudsEggs.rakumod create mode 100755 exercises/practice/eliuds-eggs/t/eliuds-eggs.rakutest diff --git a/config.json b/config.json index 9887d651..5c6eedee 100644 --- a/config.json +++ b/config.json @@ -719,6 +719,14 @@ "practices": [], "prerequisites": [], "difficulty": 1 + }, + { + "slug": "eliuds-eggs", + "name": "Eliud's Eggs", + "uuid": "cc172e3c-5537-4de8-9488-ef6db3d7d912", + "practices": [], + "prerequisites": [], + "difficulty": 1 } ] }, diff --git a/exercises/practice/eliuds-eggs/.docs/instructions.md b/exercises/practice/eliuds-eggs/.docs/instructions.md new file mode 100644 index 00000000..b0c2df59 --- /dev/null +++ b/exercises/practice/eliuds-eggs/.docs/instructions.md @@ -0,0 +1,8 @@ +# Instructions + +Your task is to count the number of 1 bits in the binary representation of a number. + +## Restrictions + +Keep your hands off that bit-count functionality provided by your standard library! +Solve this one yourself using other basic tools instead. diff --git a/exercises/practice/eliuds-eggs/.docs/introduction.md b/exercises/practice/eliuds-eggs/.docs/introduction.md new file mode 100644 index 00000000..49eaffd8 --- /dev/null +++ b/exercises/practice/eliuds-eggs/.docs/introduction.md @@ -0,0 +1,47 @@ +# Introduction + +Your friend Eliud inherited a farm from her grandma Tigist. +Her granny was an inventor and had a tendency to build things in an overly complicated manner. +The chicken coop has a digital display showing an encoded number representing the positions of all eggs that could be picked up. + +Eliud is asking you to write a program that shows the actual number of eggs in the coop. + +The position information encoding is calculated as follows: + +1. Scan the potential egg-laying spots and mark down a `1` for an existing egg or a `0` for an empty spot. +2. Convert the number from binary to decimal. +3. Show the result on the display. + +Example 1: + +```text +Chicken Coop: + _ _ _ _ _ _ _ +|E| |E|E| | |E| + +Resulting Binary: + 1 0 1 1 0 0 1 + +Decimal number on the display: +89 + +Actual eggs in the coop: +4 +``` + +Example 2: + +```text +Chicken Coop: + _ _ _ _ _ _ _ _ +| | | |E| | | | | + +Resulting Binary: + 0 0 0 1 0 0 0 0 + +Decimal number on the display: +16 + +Actual eggs in the coop: +1 +``` diff --git a/exercises/practice/eliuds-eggs/.meta/config.json b/exercises/practice/eliuds-eggs/.meta/config.json new file mode 100644 index 00000000..a23dd713 --- /dev/null +++ b/exercises/practice/eliuds-eggs/.meta/config.json @@ -0,0 +1,19 @@ +{ + "authors": [ + "habere-et-dispertire" + ], + "files": { + "solution": [ + "lib/EliudsEggs.rakumod" + ], + "test": [ + "t/eliuds-eggs.rakutest" + ], + "example": [ + ".meta/solutions/lib/EliudsEggs.rakumod" + ] + }, + "blurb": "Help Eliud count the number of eggs in her chicken coop by counting the number of 1 bits in a binary representation.", + "source": "Christian Willner, Eric Willigers", + "source_url": "https://forum.exercism.org/t/new-exercise-suggestion-pop-count/7632/5" +} diff --git a/exercises/practice/eliuds-eggs/.meta/solutions/lib/EliudsEggs.rakumod b/exercises/practice/eliuds-eggs/.meta/solutions/lib/EliudsEggs.rakumod new file mode 100644 index 00000000..7602462b --- /dev/null +++ b/exercises/practice/eliuds-eggs/.meta/solutions/lib/EliudsEggs.rakumod @@ -0,0 +1,5 @@ +unit module EliudsEggs; + +sub count-eggs ( $display ) is export { + $display.base( 2 ).comb.Bag{ '1' }; +} diff --git a/exercises/practice/eliuds-eggs/.meta/solutions/t/eliuds-eggs.rakutest b/exercises/practice/eliuds-eggs/.meta/solutions/t/eliuds-eggs.rakutest new file mode 120000 index 00000000..bfd65b5e --- /dev/null +++ b/exercises/practice/eliuds-eggs/.meta/solutions/t/eliuds-eggs.rakutest @@ -0,0 +1 @@ +../../../t/eliuds-eggs.rakutest \ No newline at end of file diff --git a/exercises/practice/eliuds-eggs/.meta/template-data.yaml b/exercises/practice/eliuds-eggs/.meta/template-data.yaml new file mode 100644 index 00000000..5cae5d93 --- /dev/null +++ b/exercises/practice/eliuds-eggs/.meta/template-data.yaml @@ -0,0 +1,22 @@ +properties: + eggCount: + test: |- + sprintf(q :to 'END', %case.Int, %case.Int, %case.raku); + cmp-ok( + count-eggs(%s), + "==", + %s, + %s, + ); + END + + +unit: module +example: |- + sub count-eggs ( $display ) is export { + $display.base( 2 ).comb.Bag{ '1' }; + } + +stub: |- + sub count-eggs ( $display ) is export { + } diff --git a/exercises/practice/eliuds-eggs/.meta/tests.toml b/exercises/practice/eliuds-eggs/.meta/tests.toml new file mode 100644 index 00000000..e11683c2 --- /dev/null +++ b/exercises/practice/eliuds-eggs/.meta/tests.toml @@ -0,0 +1,22 @@ +# This is an auto-generated file. +# +# Regenerating this file via `configlet sync` will: +# - Recreate every `description` key/value pair +# - Recreate every `reimplements` key/value pair, where they exist in problem-specifications +# - Remove any `include = true` key/value pair (an omitted `include` key implies inclusion) +# - Preserve any other key/value pair +# +# As user-added comments (using the # character) will be removed when this file +# is regenerated, comments can be added via a `comment` key. + +[559e789d-07d1-4422-9004-3b699f83bca3] +description = "0 eggs" + +[97223282-f71e-490c-92f0-b3ec9e275aba] +description = "1 egg" + +[1f8fd18f-26e9-4144-9a0e-57cdfc4f4ff5] +description = "4 eggs" + +[0c18be92-a498-4ef2-bcbb-28ac4b06cb81] +description = "13 eggs" diff --git a/exercises/practice/eliuds-eggs/lib/EliudsEggs.rakumod b/exercises/practice/eliuds-eggs/lib/EliudsEggs.rakumod new file mode 100644 index 00000000..f0c96b48 --- /dev/null +++ b/exercises/practice/eliuds-eggs/lib/EliudsEggs.rakumod @@ -0,0 +1,4 @@ +unit module EliudsEggs; + +sub count-eggs ( $display ) is export { +} diff --git a/exercises/practice/eliuds-eggs/t/eliuds-eggs.rakutest b/exercises/practice/eliuds-eggs/t/eliuds-eggs.rakutest new file mode 100755 index 00000000..086a0370 --- /dev/null +++ b/exercises/practice/eliuds-eggs/t/eliuds-eggs.rakutest @@ -0,0 +1,34 @@ +#!/usr/bin/env raku +use Test; +use lib $?FILE.IO.parent(2).add('lib'); +use EliudsEggs; + +cmp-ok( # begin: 559e789d-07d1-4422-9004-3b699f83bca3 + count-eggs(0), + "==", + 0, + "0 eggs", +); # end: 559e789d-07d1-4422-9004-3b699f83bca3 + +cmp-ok( # begin: 97223282-f71e-490c-92f0-b3ec9e275aba + count-eggs(16), + "==", + 1, + "1 egg", +); # end: 97223282-f71e-490c-92f0-b3ec9e275aba + +cmp-ok( # begin: 1f8fd18f-26e9-4144-9a0e-57cdfc4f4ff5 + count-eggs(89), + "==", + 4, + "4 eggs", +); # end: 1f8fd18f-26e9-4144-9a0e-57cdfc4f4ff5 + +cmp-ok( # begin: 0c18be92-a498-4ef2-bcbb-28ac4b06cb81 + count-eggs(2000000000), + "==", + 13, + "13 eggs", +); # end: 0c18be92-a498-4ef2-bcbb-28ac4b06cb81 + +done-testing; From 2995d60ad389d1ccb1a92c5d6aabe44976597cf8 Mon Sep 17 00:00:00 2001 From: habere-et-dispertire Date: Wed, 4 Dec 2024 21:03:01 +0000 Subject: [PATCH 2/2] Pull upstream documentation --- .../eliuds-eggs/.docs/introduction.md | 48 +++++++++++++------ 1 file changed, 33 insertions(+), 15 deletions(-) diff --git a/exercises/practice/eliuds-eggs/.docs/introduction.md b/exercises/practice/eliuds-eggs/.docs/introduction.md index 49eaffd8..81989748 100644 --- a/exercises/practice/eliuds-eggs/.docs/introduction.md +++ b/exercises/practice/eliuds-eggs/.docs/introduction.md @@ -12,36 +12,54 @@ The position information encoding is calculated as follows: 2. Convert the number from binary to decimal. 3. Show the result on the display. -Example 1: +## Example 1 + +![Seven individual nest boxes arranged in a row whose first, third, fourth and seventh nests each have a single egg.](https://assets.exercism.org/images/exercises/eliuds-eggs/example-1-coop.svg) ```text -Chicken Coop: _ _ _ _ _ _ _ |E| |E|E| | |E| +``` + +### Resulting Binary + +![1011001](https://assets.exercism.org/images/exercises/eliuds-eggs/example-1-binary.svg) + +```text + _ _ _ _ _ _ _ +|1|0|1|1|0|0|1| +``` -Resulting Binary: - 1 0 1 1 0 0 1 +### Decimal number on the display -Decimal number on the display: 89 -Actual eggs in the coop: +### Actual eggs in the coop + 4 + +## Example 2 + +![Seven individual nest boxes arranged in a row where only the fourth nest has an egg.](https://assets.exercism.org/images/exercises/eliuds-eggs/example-2-coop.svg) + +```text + _ _ _ _ _ _ _ +| | | |E| | | | ``` -Example 2: +### Resulting Binary + +![0001000](https://assets.exercism.org/images/exercises/eliuds-eggs/example-2-binary.svg) ```text -Chicken Coop: - _ _ _ _ _ _ _ _ -| | | |E| | | | | + _ _ _ _ _ _ _ +|0|0|0|1|0|0|0| +``` -Resulting Binary: - 0 0 0 1 0 0 0 0 +### Decimal number on the display -Decimal number on the display: 16 -Actual eggs in the coop: +### Actual eggs in the coop + 1 -```