diff --git a/config.json b/config.json index c21a6db..51f8035 100644 --- a/config.json +++ b/config.json @@ -204,6 +204,14 @@ "prerequisites": [], "difficulty": 2 }, + { + "slug": "eliuds-eggs", + "name": "Eliud's Eggs", + "uuid": "34a2ee25-abe1-4683-a0fd-40f3e65eab55", + "practices": [], + "prerequisites": [], + "difficulty": 2 + }, { "slug": "run-length-encoding", "name": "Run Length Encoding", diff --git a/exercises/practice/eliuds-eggs/.docs/instructions.md b/exercises/practice/eliuds-eggs/.docs/instructions.md new file mode 100644 index 0000000..b0c2df5 --- /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 0000000..2b2e5c4 --- /dev/null +++ b/exercises/practice/eliuds-eggs/.docs/introduction.md @@ -0,0 +1,65 @@ +# 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 + +![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 + _ _ _ _ _ _ _ +|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| +``` + +### Decimal number on the display + +89 + +### 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| | | | +``` + +### Resulting Binary + +![0001000](https://assets.exercism.org/images/exercises/eliuds-eggs/example-2-binary.svg) + +```text + _ _ _ _ _ _ _ +|0|0|0|1|0|0|0| +``` + +### Decimal number on the display + +8 + +### 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 0000000..f98d9e2 --- /dev/null +++ b/exercises/practice/eliuds-eggs/.meta/config.json @@ -0,0 +1,19 @@ +{ + "authors": [ + "BNAndras" + ], + "files": { + "solution": [ + "zcl_eliuds_eggs.clas.abap" + ], + "test": [ + "zcl_eliuds_eggs.clas.testclasses.abap" + ], + "example": [ + ".meta/zcl_eliuds_eggs.clas.abap" + ] + }, + "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/tests.toml b/exercises/practice/eliuds-eggs/.meta/tests.toml new file mode 100644 index 0000000..e11683c --- /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/.meta/zcl_eliuds_eggs.clas.abap b/exercises/practice/eliuds-eggs/.meta/zcl_eliuds_eggs.clas.abap new file mode 100644 index 0000000..a51ab02 --- /dev/null +++ b/exercises/practice/eliuds-eggs/.meta/zcl_eliuds_eggs.clas.abap @@ -0,0 +1,23 @@ +CLASS zcl_eliuds_eggs DEFINITION + PUBLIC + FINAL + CREATE PUBLIC. + + PUBLIC SECTION. + METHODS egg_count IMPORTING number TYPE i + RETURNING VALUE(count) TYPE i. + PROTECTED SECTION. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS zcl_eliuds_eggs IMPLEMENTATION. + METHOD egg_count. + DATA(temp) = number. + WHILE temp > 0. + count = count + ( temp MOD 2 ). + temp = temp DIV 2. + ENDWHILE. + ENDMETHOD. +ENDCLASS. diff --git a/exercises/practice/eliuds-eggs/package.devc.xml b/exercises/practice/eliuds-eggs/package.devc.xml new file mode 100644 index 0000000..3a894c9 --- /dev/null +++ b/exercises/practice/eliuds-eggs/package.devc.xml @@ -0,0 +1,10 @@ + + + + + + Exercism: Eliud's Eggs + + + + diff --git a/exercises/practice/eliuds-eggs/zcl_eliuds_eggs.clas.abap b/exercises/practice/eliuds-eggs/zcl_eliuds_eggs.clas.abap new file mode 100644 index 0000000..4bf809f --- /dev/null +++ b/exercises/practice/eliuds-eggs/zcl_eliuds_eggs.clas.abap @@ -0,0 +1,19 @@ +CLASS zcl_eliuds_eggs DEFINITION + PUBLIC + FINAL + CREATE PUBLIC. + + PUBLIC SECTION. + METHODS egg_count IMPORTING number TYPE i + RETURNING VALUE(count) TYPE i. + PROTECTED SECTION. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS zcl_eliuds_eggs IMPLEMENTATION. + METHOD egg_count. + "Implement solution + ENDMETHOD. +ENDCLASS. diff --git a/exercises/practice/eliuds-eggs/zcl_eliuds_eggs.clas.testclasses.abap b/exercises/practice/eliuds-eggs/zcl_eliuds_eggs.clas.testclasses.abap new file mode 100644 index 0000000..b8fffb5 --- /dev/null +++ b/exercises/practice/eliuds-eggs/zcl_eliuds_eggs.clas.testclasses.abap @@ -0,0 +1,46 @@ +*"* use this source file for your ABAP unit test classes +CLASS ltcl_eliuds_eggs DEFINITION FINAL FOR TESTING + DURATION SHORT + RISK LEVEL HARMLESS. + + PRIVATE SECTION. + DATA cut TYPE REF TO zcl_eliuds_eggs. + METHODS setup. + METHODS: + test_0_eggs FOR TESTING, + test_1_egg FOR TESTING, + test_4_eggs FOR TESTING, + test_13_eggs FOR TESTING. +ENDCLASS. + + +CLASS ltcl_eliuds_eggs IMPLEMENTATION. + METHOD setup. + cut = NEW zcl_eliuds_eggs( ). + ENDMETHOD. + + METHOD test_0_eggs. + cl_abap_unit_assert=>assert_equals( + exp = 0 + act = cut->egg_count( 0 ) ). + ENDMETHOD. + + METHOD test_1_egg. + cl_abap_unit_assert=>assert_equals( + exp = 1 + act = cut->egg_count( 16 ) ). + ENDMETHOD. + + METHOD test_4_eggs. + cl_abap_unit_assert=>assert_equals( + exp = 4 + act = cut->egg_count( 89 ) ). + ENDMETHOD. + + METHOD test_13_eggs. + cl_abap_unit_assert=>assert_equals( + exp = 13 + act = cut->egg_count( 2000000000 ) ). + ENDMETHOD. + +ENDCLASS. diff --git a/exercises/practice/eliuds-eggs/zcl_eliuds_eggs.clas.xml b/exercises/practice/eliuds-eggs/zcl_eliuds_eggs.clas.xml new file mode 100644 index 0000000..bc94bb8 --- /dev/null +++ b/exercises/practice/eliuds-eggs/zcl_eliuds_eggs.clas.xml @@ -0,0 +1,17 @@ + + + + + + ZCL_ELIUDS_EGGS + E + Exercism: Eliud's Eggs + 1 + X + X + X + X + + + +