File tree Expand file tree Collapse file tree 10 files changed +193
-0
lines changed Expand file tree Collapse file tree 10 files changed +193
-0
lines changed Original file line number Diff line number Diff line change 19711971 " numbers"
19721972 ],
19731973 "difficulty" : 5
1974+ },
1975+ {
1976+ "slug" : " pop-count" ,
1977+ "name" : " Pop Count" ,
1978+ "uuid" : " 2d5b6404-3315-48c1-892f-b594a960e7a1" ,
1979+ "practices" : [
1980+ " numbers"
1981+ ],
1982+ "prerequisites" : [
1983+ " numbers"
1984+ ],
1985+ "difficulty" : 3
19741986 }
19751987 ]
19761988 },
Original file line number Diff line number Diff line change 1+ # Instructions
2+
3+ Your task is to count the number of 1 bits in the binary representation of a number.
4+
5+ ## Restrictions
6+
7+ Keep your hands off that bit-count functionality provided by your standard library!
8+ Solve this one yourself using other basic tools instead.
Original file line number Diff line number Diff line change 1+ # Introduction
2+
3+ Your friend Eliud inherited a farm from her grandma Tigist.
4+ Her granny was an inventor and had a tendency to build things in an overly complicated manner.
5+ The chicken coop has a digital display showing an encoded number representing the positions of all eggs that could be picked up.
6+
7+ Eliud is asking you to write a program that shows the actual number of eggs in the coop.
8+
9+ The position information encoding is calculated as follows:
10+
11+ 1 . Scan the potential egg-laying spots and mark down a ` 1 ` for an existing egg or a ` 0 ` for an empty spot.
12+ 2 . Convert the number from binary to decimal.
13+ 3 . Show the result on the display.
14+
15+ Example 1:
16+
17+ ``` text
18+ Chicken Coop:
19+ _ _ _ _ _ _ _
20+ |E| |E|E| | |E|
21+
22+ Resulting Binary:
23+ 1 0 1 1 0 0 1
24+
25+ Decimal number on the display:
26+ 89
27+
28+ Actual eggs in the coop:
29+ 4
30+ ```
31+
32+ Example 2:
33+
34+ ``` text
35+ Chicken Coop:
36+ _ _ _ _ _ _ _ _
37+ | | | |E| | | | |
38+
39+ Resulting Binary:
40+ 0 0 0 1 0 0 0 0
41+
42+ Decimal number on the display:
43+ 16
44+
45+ Actual eggs in the coop:
46+ 1
47+ ```
Original file line number Diff line number Diff line change 1+ {
2+ "authors" : [
3+ " sanderploegsma"
4+ ],
5+ "files" : {
6+ "solution" : [
7+ " src/main/java/PopCount.java"
8+ ],
9+ "test" : [
10+ " src/test/java/PopCountTest.java"
11+ ],
12+ "example" : [
13+ " .meta/src/reference/java/PopCount.java"
14+ ],
15+ "invalidator" : [
16+ " build.gradle"
17+ ]
18+ },
19+ "blurb" : " Count the 1 bits in a number" ,
20+ "source" : " Christian Willner, Eric Willigers" ,
21+ "source_url" : " https://forum.exercism.org/t/new-exercise-suggestion-pop-count/7632/5"
22+ }
Original file line number Diff line number Diff line change 1+ public class PopCount {
2+ public int eggCount (int number ) {
3+ var count = 0 ;
4+ var remaining = number ;
5+
6+ while (remaining > 0 ) {
7+ if ((remaining & 1 ) > 0 ) {
8+ count ++;
9+ }
10+ remaining = remaining >> 1 ;
11+ }
12+
13+ return count ;
14+ }
15+ }
Original file line number Diff line number Diff line change 1+ # This is an auto-generated file.
2+ #
3+ # Regenerating this file via `configlet sync` will:
4+ # - Recreate every `description` key/value pair
5+ # - Recreate every `reimplements` key/value pair, where they exist in problem-specifications
6+ # - Remove any `include = true` key/value pair (an omitted `include` key implies inclusion)
7+ # - Preserve any other key/value pair
8+ #
9+ # As user-added comments (using the # character) will be removed when this file
10+ # is regenerated, comments can be added via a `comment` key.
11+
12+ [559e789d-07d1-4422-9004-3b699f83bca3 ]
13+ description = " 0 eggs"
14+
15+ [97223282-f71e-490c-92f0-b3ec9e275aba ]
16+ description = " 1 egg"
17+
18+ [1f8fd18f-26e9-4144-9a0e-57cdfc4f4ff5 ]
19+ description = " 4 eggs"
20+
21+ [0c18be92-a498-4ef2-bcbb-28ac4b06cb81 ]
22+ description = " 13 eggs"
Original file line number Diff line number Diff line change 1+ plugins {
2+ id " java"
3+ }
4+
5+ repositories {
6+ mavenCentral()
7+ }
8+
9+ dependencies {
10+ testImplementation platform(" org.junit:junit-bom:5.10.0" )
11+ testImplementation " org.junit.jupiter:junit-jupiter"
12+ testImplementation " org.assertj:assertj-core:3.15.0"
13+ }
14+
15+ test {
16+ useJUnitPlatform()
17+
18+ testLogging {
19+ exceptionFormat = " full"
20+ showStandardStreams = true
21+ events = [" passed" , " failed" , " skipped" ]
22+ }
23+ }
Original file line number Diff line number Diff line change 1+ public class PopCount {
2+ public int eggCount (int number ) {
3+ throw new UnsupportedOperationException ("Delete this statement and write your own implementation." );
4+ }
5+ }
Original file line number Diff line number Diff line change 1+ import org .junit .jupiter .api .Disabled ;
2+ import org .junit .jupiter .api .DisplayName ;
3+ import org .junit .jupiter .api .Test ;
4+
5+ import static org .assertj .core .api .Assertions .assertThat ;
6+
7+ public class PopCountTest {
8+ @ Test
9+ @ DisplayName ("0 eggs" )
10+ public void test0Eggs () {
11+ assertThat (new PopCount ().eggCount (0 ))
12+ .isEqualTo (0 );
13+ }
14+
15+ @ Disabled ("Remove to run test" )
16+ @ Test
17+ @ DisplayName ("1 egg" )
18+ public void test1Egg () {
19+ assertThat (new PopCount ().eggCount (16 ))
20+ .isEqualTo (1 );
21+ }
22+
23+ @ Disabled ("Remove to run test" )
24+ @ Test
25+ @ DisplayName ("4 eggs" )
26+ public void test4Eggs () {
27+ assertThat (new PopCount ().eggCount (89 ))
28+ .isEqualTo (4 );
29+ }
30+
31+ @ Disabled ("Remove to run test" )
32+ @ Test
33+ @ DisplayName ("13 eggs" )
34+ public void test13Eggs () {
35+ assertThat (new PopCount ().eggCount (2000000000 ))
36+ .isEqualTo (13 );
37+ }
38+ }
Original file line number Diff line number Diff line change @@ -95,6 +95,7 @@ include 'practice:perfect-numbers'
9595include ' practice:phone-number'
9696include ' practice:pig-latin'
9797include ' practice:poker'
98+ include ' practice:pop-count'
9899include ' practice:pov'
99100include ' practice:prime-factors'
100101include ' practice:protein-translation'
You can’t perform that action at this time.
0 commit comments