From 4d724cc31aa0901db7b41c7692a414e8a0740d23 Mon Sep 17 00:00:00 2001 From: Nerwosolek <24649931+Nerwosolek@users.noreply.github.com> Date: Thu, 1 Feb 2024 09:25:29 +0100 Subject: [PATCH 1/3] autogenerated files --- config.json | 48 +++++++++++-------- .../practice/pop-count/.docs/instructions.md | 8 ++++ .../practice/pop-count/.docs/introduction.md | 47 ++++++++++++++++++ .../practice/pop-count/.meta/config.json | 17 +++++++ exercises/practice/pop-count/.meta/example.R | 0 exercises/practice/pop-count/.meta/tests.toml | 22 +++++++++ exercises/practice/pop-count/pop-count.R | 0 exercises/practice/pop-count/test_pop-count.R | 0 8 files changed, 123 insertions(+), 19 deletions(-) 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.R create mode 100644 exercises/practice/pop-count/.meta/tests.toml create mode 100644 exercises/practice/pop-count/pop-count.R create mode 100644 exercises/practice/pop-count/test_pop-count.R 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..647f092d --- /dev/null +++ b/exercises/practice/pop-count/.meta/config.json @@ -0,0 +1,17 @@ +{ + "authors": [], + "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..e69de29b 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..e69de29b 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..e69de29b From c4cf41c7106f4b7c66617fe296528208bc4774c8 Mon Sep 17 00:00:00 2001 From: Nerwosolek <24649931+Nerwosolek@users.noreply.github.com> Date: Thu, 1 Feb 2024 10:21:21 +0100 Subject: [PATCH 2/3] pop-count: exercise added. --- exercises/practice/pop-count/.meta/config.json | 4 +++- exercises/practice/pop-count/.meta/example.R | 3 +++ exercises/practice/pop-count/pop-count.R | 3 +++ exercises/practice/pop-count/test_pop-count.R | 18 ++++++++++++++++++ 4 files changed, 27 insertions(+), 1 deletion(-) diff --git a/exercises/practice/pop-count/.meta/config.json b/exercises/practice/pop-count/.meta/config.json index 647f092d..a91ab196 100644 --- a/exercises/practice/pop-count/.meta/config.json +++ b/exercises/practice/pop-count/.meta/config.json @@ -1,5 +1,7 @@ { - "authors": [], + "authors": [ + "Nerwosolek" + ], "files": { "solution": [ "pop-count.R" diff --git a/exercises/practice/pop-count/.meta/example.R b/exercises/practice/pop-count/.meta/example.R index e69de29b..7aca30a9 100644 --- a/exercises/practice/pop-count/.meta/example.R +++ b/exercises/practice/pop-count/.meta/example.R @@ -0,0 +1,3 @@ +egg_count <- function(display_value) { + sum(as.integer(intToBits(display_value))) +} diff --git a/exercises/practice/pop-count/pop-count.R b/exercises/practice/pop-count/pop-count.R index e69de29b..e33d0f44 100644 --- a/exercises/practice/pop-count/pop-count.R +++ 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 index e69de29b..4b27acd0 100644 --- a/exercises/practice/pop-count/test_pop-count.R +++ 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) +}) From e3d24e9c88e9d423c4aa34b1a9aa189a7ec965e0 Mon Sep 17 00:00:00 2001 From: colinleach Date: Thu, 1 Feb 2024 11:24:39 -0600 Subject: [PATCH 3/3] Update example.R Your basic strategy is great, and has been preserved here. However, Jon is keen to encourage the use of native pipes, now they are available (since v4.1.0). More lines, but perhaps better readability than nested functions - especially as the pipeline gets longer. At Jon's prompting, I wrote this up in an [approaches doc](https://exercism.org/tracks/r/exercises/reverse-string/approaches/native-pipes) about 2 weeks ago. That article includes various useful links. --- exercises/practice/pop-count/.meta/example.R | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/exercises/practice/pop-count/.meta/example.R b/exercises/practice/pop-count/.meta/example.R index 7aca30a9..193a06a2 100644 --- a/exercises/practice/pop-count/.meta/example.R +++ b/exercises/practice/pop-count/.meta/example.R @@ -1,3 +1,6 @@ egg_count <- function(display_value) { - sum(as.integer(intToBits(display_value))) + display_value |> + intToBits() |> + as.integer() |> + sum() }