diff --git a/config.json b/config.json index 75a59dc6..f2888147 100644 --- a/config.json +++ b/config.json @@ -50,7 +50,9 @@ "slug": "lasagna", "name": "Lasagna", "uuid": "6fd75bbd-8654-4d6a-80b5-29344ceb8a48", - "concepts": ["basics"], + "concepts": [ + "basics" + ], "prerequisites": [], "status": "wip" }, @@ -579,8 +581,8 @@ "prerequisites": [ "booleans" ], - "difficulty": 1, - "status": "wip" + "difficulty": 1, + "status": "wip" }, { "slug": "pythagorean-triplet", @@ -601,6 +603,14 @@ "practices": [], "prerequisites": [], "difficulty": 1 + }, + { + "slug": "pop-count", + "name": "Eliud's Eggs", + "uuid": "118e27fe-fe97-45fa-82cc-6480cf777e34", + "practices": [], + "prerequisites": [], + "difficulty": 1 } ] }, @@ -628,45 +638,45 @@ ], "key_features": [ { - "icon": "scientific", "title": "Domain Specific", - "content": "R is a language and environment for statistical computing and graphics." + "content": "R is a language and environment for statistical computing and graphics.", + "icon": "scientific" }, { - "icon": "cross-platform", "title": "Cross-platform", - "content": "It is free, open source, and available on every major platform." + "content": "It is free, open source, and available on every major platform.", + "icon": "cross-platform" }, { - "icon": "multi-paradigm", "title": "Multi-paradigm", - "content": "R has a functional programming foundation, but facilitates procedural or object-oriented approaches." + "content": "R has a functional programming foundation, but facilitates procedural or object-oriented approaches.", + "icon": "multi-paradigm" }, { - "icon": "powerful", "title": "Metaprogramming", - "content": "R’s metaprogramming capabilities allow for magically succinct and concise functions." + "content": "R’s metaprogramming capabilities allow for magically succinct and concise functions.", + "icon": "powerful" }, { - "icon": "tooling", "title": "Tooling", - "content": "R provides powerful tools for data manipulation, visualisation, modelling, and machine learning." + "content": "R provides powerful tools for data manipulation, visualisation, modelling, and machine learning.", + "icon": "tooling" }, { - "icon": "community", "title": "Community", - "content": "R has a diverse and welcoming community." + "content": "R has a diverse and welcoming community.", + "icon": "community" } ], "tags": [ + "execution_mode/interpreted", "paradigm/functional", "paradigm/object_oriented", - "typing/dynamic", - "execution_mode/interpreted", - "platform/windows", - "platform/mac", "platform/linux", + "platform/mac", + "platform/windows", "runtime/language_specific", + "typing/dynamic", "used_for/artificial_intelligence", "used_for/scientific_calculations", "used_for/scripts", diff --git a/exercises/practice/pop-count/.docs/instructions.md b/exercises/practice/pop-count/.docs/instructions.md new file mode 100644 index 00000000..b0c2df59 --- /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 00000000..49eaffd8 --- /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 00000000..a91ab196 --- /dev/null +++ b/exercises/practice/pop-count/.meta/config.json @@ -0,0 +1,19 @@ +{ + "authors": [ + "Nerwosolek" + ], + "files": { + "solution": [ + "pop-count.R" + ], + "test": [ + "test_pop-count.R" + ], + "example": [ + ".meta/example.R" + ] + }, + "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/pop-count/.meta/example.R b/exercises/practice/pop-count/.meta/example.R new file mode 100644 index 00000000..193a06a2 --- /dev/null +++ b/exercises/practice/pop-count/.meta/example.R @@ -0,0 +1,6 @@ +egg_count <- function(display_value) { + display_value |> + intToBits() |> + as.integer() |> + sum() +} diff --git a/exercises/practice/pop-count/.meta/tests.toml b/exercises/practice/pop-count/.meta/tests.toml new file mode 100644 index 00000000..e11683c2 --- /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.R b/exercises/practice/pop-count/pop-count.R new file mode 100644 index 00000000..e33d0f44 --- /dev/null +++ b/exercises/practice/pop-count/pop-count.R @@ -0,0 +1,3 @@ +egg_count <- function(display_value) { + +} diff --git a/exercises/practice/pop-count/test_pop-count.R b/exercises/practice/pop-count/test_pop-count.R new file mode 100644 index 00000000..4b27acd0 --- /dev/null +++ b/exercises/practice/pop-count/test_pop-count.R @@ -0,0 +1,18 @@ +source("./pop-count.R") +library(testthat) + +test_that("0 eggs", { + expect_equal(egg_count(0), 0) +}) + +test_that("1 egg", { + expect_equal(egg_count(16), 1) +}) + +test_that("4 eggs", { + expect_equal(egg_count(89), 4) +}) + +test_that("13 eggs", { + expect_equal(egg_count(2000000000), 13) +})