From 5b8952f964875d3a28f30e2d89ff8fd6d8690a7e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A1s=20B=20Nagy?= <20251272+BNAndras@users.noreply.github.com> Date: Mon, 19 Aug 2024 21:18:59 -0700 Subject: [PATCH 1/2] Add eliuds-eggs --- config.json | 8 ++++ .../eliuds-eggs/.docs/instructions.md | 8 ++++ .../eliuds-eggs/.docs/introduction.md | 47 +++++++++++++++++++ .../practice/eliuds-eggs/.meta/config.json | 19 ++++++++ .../practice/eliuds-eggs/.meta/example.cairo | 18 +++++++ .../practice/eliuds-eggs/.meta/tests.toml | 22 +++++++++ exercises/practice/eliuds-eggs/Scarb.toml | 4 ++ exercises/practice/eliuds-eggs/src/lib.cairo | 3 ++ .../eliuds-eggs/tests/eliuds_eggs.cairo | 32 +++++++++++++ 9 files changed, 161 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/example.cairo create mode 100644 exercises/practice/eliuds-eggs/.meta/tests.toml create mode 100644 exercises/practice/eliuds-eggs/Scarb.toml create mode 100644 exercises/practice/eliuds-eggs/src/lib.cairo create mode 100644 exercises/practice/eliuds-eggs/tests/eliuds_eggs.cairo diff --git a/config.json b/config.json index 25acb60a..a9a57c34 100644 --- a/config.json +++ b/config.json @@ -128,6 +128,14 @@ "prerequisites": [], "difficulty": 2 }, + { + "slug": "eliuds-eggs", + "name": "Eliud's Eggs", + "uuid": "22228dc8-c5ef-4801-a1e0-d9a8cb727566", + "practices": [], + "prerequisites": [], + "difficulty": 2 + }, { "slug": "lucians-luscious-lasagna", "name": "Lucian's Luscious Lasagna", 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..4238af65 --- /dev/null +++ b/exercises/practice/eliuds-eggs/.meta/config.json @@ -0,0 +1,19 @@ +{ + "authors": [ + "BNAndras" + ], + "files": { + "solution": [ + "src/lib.cairo" + ], + "test": [ + "tests/eliuds_eggs.cairo" + ], + "example": [ + ".meta/example.cairo" + ] + }, + "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/example.cairo b/exercises/practice/eliuds-eggs/.meta/example.cairo new file mode 100644 index 00000000..a5517852 --- /dev/null +++ b/exercises/practice/eliuds-eggs/.meta/example.cairo @@ -0,0 +1,18 @@ +pub fn eggCount(number: u64) -> u64 { + let mut count = 0; + + let mut current = number; + loop { + if current == 0 { + break; + } + + if current % 2 == 1 { + count += 1; + } + + current /= 2; + }; + + return count; +} 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/Scarb.toml b/exercises/practice/eliuds-eggs/Scarb.toml new file mode 100644 index 00000000..37c69dd7 --- /dev/null +++ b/exercises/practice/eliuds-eggs/Scarb.toml @@ -0,0 +1,4 @@ +[package] +name = "eliuds_eggs" +version = "0.1.0" +edition = "2023_11" diff --git a/exercises/practice/eliuds-eggs/src/lib.cairo b/exercises/practice/eliuds-eggs/src/lib.cairo new file mode 100644 index 00000000..25ae9ab3 --- /dev/null +++ b/exercises/practice/eliuds-eggs/src/lib.cairo @@ -0,0 +1,3 @@ +pub fn eggCount(number: u64) -> u64 { + panic!("implement `eggCount`") +} diff --git a/exercises/practice/eliuds-eggs/tests/eliuds_eggs.cairo b/exercises/practice/eliuds-eggs/tests/eliuds_eggs.cairo new file mode 100644 index 00000000..b3a1e5e9 --- /dev/null +++ b/exercises/practice/eliuds-eggs/tests/eliuds_eggs.cairo @@ -0,0 +1,32 @@ +use eliuds_eggs::eggCount; + +#[test] +fn zero_eggs() { + let output = eggCount(0); + let expected = 0; + assert_eq!(output, expected); +} + +#[test] +#[ignore] +fn one_egg() { + let output = eggCount(16); + let expected = 1; + assert_eq!(output, expected); +} + +#[test] +#[ignore] +fn four_eggs() { + let output = eggCount(89); + let expected = 4; + assert_eq!(output, expected); +} + +#[test] +#[ignore] +fn thirteen_eggs() { + let output = eggCount(2000000000); + let expected = 13; + assert_eq!(output, expected); +} From 36ab886926f8ca66865a2e99c9d8f68fe02ca3a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A1s=20B=20Nagy?= <20251272+BNAndras@users.noreply.github.com> Date: Mon, 19 Aug 2024 22:54:20 -0700 Subject: [PATCH 2/2] Apply formatting fixes --- exercises/practice/eliuds-eggs/.meta/example.cairo | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exercises/practice/eliuds-eggs/.meta/example.cairo b/exercises/practice/eliuds-eggs/.meta/example.cairo index a5517852..f3cf24ce 100644 --- a/exercises/practice/eliuds-eggs/.meta/example.cairo +++ b/exercises/practice/eliuds-eggs/.meta/example.cairo @@ -10,7 +10,7 @@ pub fn eggCount(number: u64) -> u64 { if current % 2 == 1 { count += 1; } - + current /= 2; };