From 21776fb1f62dab2ae84b66f362d86b0afe1833ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A1s=20B=20Nagy?= <20251272+BNAndras@users.noreply.github.com> Date: Tue, 17 Oct 2023 20:58:27 -0700 Subject: [PATCH 1/3] Add pop-count exercise --- config.json | 8 ++++ .../practice/pop-count/.docs/instructions.md | 8 ++++ .../practice/pop-count/.docs/introduction.md | 47 +++++++++++++++++++ .../practice/pop-count/.meta/config.json | 19 ++++++++ .../practice/pop-count/.meta/example.vim | 14 ++++++ exercises/practice/pop-count/.meta/tests.toml | 22 +++++++++ exercises/practice/pop-count/pop_count.vader | 20 ++++++++ exercises/practice/pop-count/pop_count.vim | 14 ++++++ 8 files changed, 152 insertions(+) create mode 100644 exercises/practice/pop-count/.docs/instructions.md create mode 100644 exercises/practice/pop-count/.docs/introduction.md create mode 100644 exercises/practice/pop-count/.meta/config.json create mode 100644 exercises/practice/pop-count/.meta/example.vim create mode 100644 exercises/practice/pop-count/.meta/tests.toml create mode 100644 exercises/practice/pop-count/pop_count.vader create mode 100644 exercises/practice/pop-count/pop_count.vim diff --git a/config.json b/config.json index 8e2f379..ee8dec3 100644 --- a/config.json +++ b/config.json @@ -147,6 +147,14 @@ "strings" ] }, + { + "slug": "pop-count", + "name": "Pop Count", + "uuid": "9ef83f95-6fae-486a-9a42-d763961066cb", + "practices": [], + "prerequisites": [], + "difficulty": 2 + }, { "slug": "roman-numerals", "name": "Roman Numerals", diff --git a/exercises/practice/pop-count/.docs/instructions.md b/exercises/practice/pop-count/.docs/instructions.md new file mode 100644 index 0000000..b0c2df5 --- /dev/null +++ b/exercises/practice/pop-count/.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/pop-count/.docs/introduction.md b/exercises/practice/pop-count/.docs/introduction.md new file mode 100644 index 0000000..49eaffd --- /dev/null +++ b/exercises/practice/pop-count/.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/pop-count/.meta/config.json b/exercises/practice/pop-count/.meta/config.json new file mode 100644 index 0000000..36056b5 --- /dev/null +++ b/exercises/practice/pop-count/.meta/config.json @@ -0,0 +1,19 @@ +{ + "authors": [ + "BNAndras" + ], + "files": { + "solution": [ + "pop_count.vim" + ], + "test": [ + "pop_count.vader" + ], + "example": [ + ".meta/example.vim" + ] + }, + "blurb": "Count the 1 bits in a number", + "source": "Christian Willner, Eric Willigers", + "source_url": "https://forum.exercism.org/t/new-exercise-suggestion-pop-count/7632/5" +} diff --git a/exercises/practice/pop-count/.meta/example.vim b/exercises/practice/pop-count/.meta/example.vim new file mode 100644 index 0000000..a584d65 --- /dev/null +++ b/exercises/practice/pop-count/.meta/example.vim @@ -0,0 +1,14 @@ +function! EggCount(num) abort + let counter = 0 + + let working = a:num + while working != 0 + if working % 2 + let counter += 1 + endif + + let working /= 2 + endwhile + + return counter +endfunction diff --git a/exercises/practice/pop-count/.meta/tests.toml b/exercises/practice/pop-count/.meta/tests.toml new file mode 100644 index 0000000..e11683c --- /dev/null +++ b/exercises/practice/pop-count/.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/pop-count/pop_count.vader b/exercises/practice/pop-count/pop_count.vader new file mode 100644 index 0000000..d81aaa4 --- /dev/null +++ b/exercises/practice/pop-count/pop_count.vader @@ -0,0 +1,20 @@ + +Execute (0 eggs): + let g:number = 0 + let g:expected = 0 + AssertEqual g:expected, EggCount(g:number) + +Execute (1 egg): + let g:number = 16 + let g:expected = 1 + AssertEqual g:expected, EggCount(g:number) + +Execute (4 eggs): + let g:number = 89 + let g:expected = 4 + AssertEqual g:expected, EggCount(g:number) + +Execute (13 eggs): + let g:number = 2000000000 + let g:expected = 13 + AssertEqual g:expected, EggCount(g:number) diff --git a/exercises/practice/pop-count/pop_count.vim b/exercises/practice/pop-count/pop_count.vim new file mode 100644 index 0000000..7d41370 --- /dev/null +++ b/exercises/practice/pop-count/pop_count.vim @@ -0,0 +1,14 @@ +" +" Given a base-ten number, compute how many 1 bits are present +" +" Examples: +" +" :echo EggCount(0) +" 0 +" +" :echo EggCount(16) +" 1 +" +function! EggCount(num) abort + " your code goes here +endfunction From 73a13b7d2afd87c789d1a54c4810a3b2e4bd7d78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A1s=20B=20Nagy?= <20251272+BNAndras@users.noreply.github.com> Date: Thu, 2 Nov 2023 16:23:21 -0700 Subject: [PATCH 2/3] Update pop-count exercise name Related to https://github.com/exercism/problem-specifications/pull/2335 --- config.json | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/config.json b/config.json index ee8dec3..d1b14d2 100644 --- a/config.json +++ b/config.json @@ -135,6 +135,14 @@ "math" ] }, + { + "slug": "pop-count", + "name": "Eliud's Eggs", + "uuid": "9ef83f95-6fae-486a-9a42-d763961066cb", + "practices": [], + "prerequisites": [], + "difficulty": 2 + }, { "slug": "pangram", "name": "Pangram", @@ -147,14 +155,6 @@ "strings" ] }, - { - "slug": "pop-count", - "name": "Pop Count", - "uuid": "9ef83f95-6fae-486a-9a42-d763961066cb", - "practices": [], - "prerequisites": [], - "difficulty": 2 - }, { "slug": "roman-numerals", "name": "Roman Numerals", From 76b5ea9b4c5370fb87f4385e6d2a80dfe1b80bf9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A1s=20B=20Nagy?= <20251272+BNAndras@users.noreply.github.com> Date: Thu, 2 Nov 2023 16:30:35 -0700 Subject: [PATCH 3/3] Update track config --- config.json | 52 ++++++++-------------------------------------------- 1 file changed, 8 insertions(+), 44 deletions(-) diff --git a/config.json b/config.json index 0b60eff..91f9ed4 100644 --- a/config.json +++ b/config.json @@ -85,6 +85,14 @@ "math" ] }, + { + "slug": "pop-count", + "name": "Eliud's Eggs", + "uuid": "9ef83f95-6fae-486a-9a42-d763961066cb", + "practices": [], + "prerequisites": [], + "difficulty": 2 + }, { "slug": "etl", "name": "ETL", @@ -201,50 +209,6 @@ "prerequisites": [], "difficulty": 1 }, - { - "slug": "bob", - "name": "Bob", - "uuid": "345a440a-f995-4ead-9890-f5075c7f962e", - "practices": [], - "prerequisites": [], - "difficulty": 2, - "topics": [ - "conditionals", - "strings" - ] - }, - { - "slug": "difference-of-squares", - "name": "Difference of Squares", - "uuid": "e6662c3e-9d5e-4744-977e-ed12f3171e1e", - "practices": [], - "prerequisites": [], - "difficulty": 2, - "topics": [ - "algorithms", - "math" - ] - }, - { - "slug": "pop-count", - "name": "Eliud's Eggs", - "uuid": "9ef83f95-6fae-486a-9a42-d763961066cb", - "practices": [], - "prerequisites": [], - "difficulty": 2 - }, - { - "slug": "pangram", - "name": "Pangram", - "uuid": "fa80ef6a-db6a-429d-ae7a-ceba0ba96dab", - "practices": [], - "prerequisites": [], - "difficulty": 2, - "topics": [ - "loops", - "strings" - ] - }, { "slug": "roman-numerals", "name": "Roman Numerals",