Skip to content

Commit

Permalink
Pop count - Added practice exercise (#317)
Browse files Browse the repository at this point in the history
* autogenerated files

* pop-count: exercise added.

* 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.

---------

Co-authored-by: colinleach <[email protected]>
  • Loading branch information
Nerwosolek and colinleach authored Feb 1, 2024
1 parent 054741e commit a6088bd
Show file tree
Hide file tree
Showing 8 changed files with 152 additions and 19 deletions.
48 changes: 29 additions & 19 deletions config.json
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,9 @@
"slug": "lasagna",
"name": "Lasagna",
"uuid": "6fd75bbd-8654-4d6a-80b5-29344ceb8a48",
"concepts": ["basics"],
"concepts": [
"basics"
],
"prerequisites": [],
"status": "wip"
},
Expand Down Expand Up @@ -579,8 +581,8 @@
"prerequisites": [
"booleans"
],
"difficulty": 1,
"status": "wip"
"difficulty": 1,
"status": "wip"
},
{
"slug": "pythagorean-triplet",
Expand All @@ -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
}
]
},
Expand Down Expand Up @@ -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",
Expand Down
8 changes: 8 additions & 0 deletions exercises/practice/pop-count/.docs/instructions.md
Original file line number Diff line number Diff line change
@@ -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.
47 changes: 47 additions & 0 deletions exercises/practice/pop-count/.docs/introduction.md
Original file line number Diff line number Diff line change
@@ -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
```
19 changes: 19 additions & 0 deletions exercises/practice/pop-count/.meta/config.json
Original file line number Diff line number Diff line change
@@ -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"
}
6 changes: 6 additions & 0 deletions exercises/practice/pop-count/.meta/example.R
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
egg_count <- function(display_value) {
display_value |>
intToBits() |>
as.integer() |>
sum()
}
22 changes: 22 additions & 0 deletions exercises/practice/pop-count/.meta/tests.toml
Original file line number Diff line number Diff line change
@@ -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"
3 changes: 3 additions & 0 deletions exercises/practice/pop-count/pop-count.R
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
egg_count <- function(display_value) {

}
18 changes: 18 additions & 0 deletions exercises/practice/pop-count/test_pop-count.R
Original file line number Diff line number Diff line change
@@ -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)
})

0 comments on commit a6088bd

Please sign in to comment.