From 5975dc7f4565ce1edf554ddca29206cada4a6f50 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A1s=20B=20Nagy?= <20251272+BNAndras@users.noreply.github.com> Date: Wed, 7 Feb 2024 23:20:29 -0800 Subject: [PATCH] add eliuds-eggs --- config.json | 10 +++- .../eliuds-eggs/.docs/instructions.md | 8 ++++ .../eliuds-eggs/.docs/introduction.md | 47 +++++++++++++++++++ exercises/practice/eliuds-eggs/.gitignore | 11 +++++ .../practice/eliuds-eggs/.meta/config.json | 19 ++++++++ .../practice/eliuds-eggs/.meta/example.lfe | 9 ++++ .../practice/eliuds-eggs/.meta/tests.toml | 22 +++++++++ exercises/practice/eliuds-eggs/Makefile | 21 +++++++++ exercises/practice/eliuds-eggs/rebar.config | 11 +++++ exercises/practice/eliuds-eggs/rebar.lock | 8 ++++ .../eliuds-eggs/src/eliuds-eggs.app.src | 11 +++++ .../practice/eliuds-eggs/src/eliuds-eggs.lfe | 4 ++ .../eliuds-eggs/test/eliuds-eggs-tests.lfe | 17 +++++++ 13 files changed, 197 insertions(+), 1 deletion(-) 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/.gitignore create mode 100644 exercises/practice/eliuds-eggs/.meta/config.json create mode 100644 exercises/practice/eliuds-eggs/.meta/example.lfe create mode 100644 exercises/practice/eliuds-eggs/.meta/tests.toml create mode 100644 exercises/practice/eliuds-eggs/Makefile create mode 100644 exercises/practice/eliuds-eggs/rebar.config create mode 100644 exercises/practice/eliuds-eggs/rebar.lock create mode 100644 exercises/practice/eliuds-eggs/src/eliuds-eggs.app.src create mode 100644 exercises/practice/eliuds-eggs/src/eliuds-eggs.lfe create mode 100644 exercises/practice/eliuds-eggs/test/eliuds-eggs-tests.lfe diff --git a/config.json b/config.json index cf16a7b6..6560ed13 100644 --- a/config.json +++ b/config.json @@ -318,7 +318,15 @@ "uuid": "d53f769b-b294-4fb0-a336-881549a15a94", "practices": [], "prerequisites": [], - "difficulty": 1 + "difficulty": 1 + }, + { + "slug": "eliuds-eggs", + "name": "Eliud's Eggs", + "uuid": "e02de36d-defa-495b-8940-6b2a179afc87", + "practices": [], + "prerequisites": [], + "difficulty": 1 } ] }, 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/.gitignore b/exercises/practice/eliuds-eggs/.gitignore new file mode 100644 index 00000000..6dd20ff0 --- /dev/null +++ b/exercises/practice/eliuds-eggs/.gitignore @@ -0,0 +1,11 @@ +## -*- conf -*- +.rebar3 +_build/ +ebin/ +erl_crash.dump +rebar3.crashdump + +tmp +bin/configlet +bin/configlet.exe +CHECKLIST diff --git a/exercises/practice/eliuds-eggs/.meta/config.json b/exercises/practice/eliuds-eggs/.meta/config.json new file mode 100644 index 00000000..f94db12a --- /dev/null +++ b/exercises/practice/eliuds-eggs/.meta/config.json @@ -0,0 +1,19 @@ +{ + "authors": [ + "BNAndras" + ], + "files": { + "solution": [ + "src/eliuds-eggs.lfe" + ], + "test": [ + "test/eliuds-eggs-tests.lfe" + ], + "example": [ + ".meta/example.lfe" + ] + }, + "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.lfe b/exercises/practice/eliuds-eggs/.meta/example.lfe new file mode 100644 index 00000000..51b8a9fa --- /dev/null +++ b/exercises/practice/eliuds-eggs/.meta/example.lfe @@ -0,0 +1,9 @@ +(defmodule eliuds-eggs + (export (egg-count 1))) + +(defun egg-count (display-value) + (do-count display-value 0)) + +(defun do-count + ((0 steps) steps) + ((number steps) (when (> number 0)) (do-count (bsr number 1) (+ steps (band number 1))))) 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/Makefile b/exercises/practice/eliuds-eggs/Makefile new file mode 100644 index 00000000..fbb5a7de --- /dev/null +++ b/exercises/practice/eliuds-eggs/Makefile @@ -0,0 +1,21 @@ +ERL := $(shell which erl) +REBAR3 := $(shell which rebar3) + +null := +space := $(null) # +comma := , + +ifeq ($(ERL),) + $(error Can't find Erlang executable 'erl') +else ifeq ($(REBAR3),) + $(error Can't find rebar3) +endif + +compile: ; $(REBAR3) compile + +clean: ; $(REBAR3) clean + +.PHONY: test +test: + $(REBAR3) eunit \ + -m $(subst $(space),$(comma),$(basename $(notdir $(wildcard test/*.lfe)))) diff --git a/exercises/practice/eliuds-eggs/rebar.config b/exercises/practice/eliuds-eggs/rebar.config new file mode 100644 index 00000000..d53487ac --- /dev/null +++ b/exercises/practice/eliuds-eggs/rebar.config @@ -0,0 +1,11 @@ +{plugins, [{rebar3_lfe, "0.4.3"}]}. + +{provider_hooks, [{post, [{compile, {lfe, compile}}]}]}. + +{deps, [{lfe, "2.1.1"}]}. + +{profiles, + [{test, + [{eunit_compile_opts, [{src_dirs, ["src", "test"]}]}, + {deps, + [{ltest, "0.13.3"}]}]}]}. diff --git a/exercises/practice/eliuds-eggs/rebar.lock b/exercises/practice/eliuds-eggs/rebar.lock new file mode 100644 index 00000000..d5a6b3b9 --- /dev/null +++ b/exercises/practice/eliuds-eggs/rebar.lock @@ -0,0 +1,8 @@ +{"1.2.0", +[{<<"lfe">>,{pkg,<<"lfe">>,<<"2.1.1">>},0}]}. +[ +{pkg_hash,[ + {<<"lfe">>, <<"4A888B26172D198DC7A5AFEB897E8248AF7D56E1638D9C8249AAF933AE811B96">>}]}, +{pkg_hash_ext,[ + {<<"lfe">>, <<"C484D3B655D40DED58BC41B17B22F173711C681BF36063A234A9BAA9506947E1">>}]} +]. diff --git a/exercises/practice/eliuds-eggs/src/eliuds-eggs.app.src b/exercises/practice/eliuds-eggs/src/eliuds-eggs.app.src new file mode 100644 index 00000000..c98d4bf4 --- /dev/null +++ b/exercises/practice/eliuds-eggs/src/eliuds-eggs.app.src @@ -0,0 +1,11 @@ +%% -*- erlang -*- +{application, 'eliuds-eggs', + [{description, ""}, + {vsn, "0.0.1"}, + {modules, + ['eliuds-eggs']}, + {registered, []}, + {applications, + [kernel, stdlib]}, + {included_applications, []}, + {env, []}]}. diff --git a/exercises/practice/eliuds-eggs/src/eliuds-eggs.lfe b/exercises/practice/eliuds-eggs/src/eliuds-eggs.lfe new file mode 100644 index 00000000..54109124 --- /dev/null +++ b/exercises/practice/eliuds-eggs/src/eliuds-eggs.lfe @@ -0,0 +1,4 @@ +(defmodule eliuds-eggs + (export (egg-count 1))) + + ; Please implement the egg-count function. diff --git a/exercises/practice/eliuds-eggs/test/eliuds-eggs-tests.lfe b/exercises/practice/eliuds-eggs/test/eliuds-eggs-tests.lfe new file mode 100644 index 00000000..afb6f91e --- /dev/null +++ b/exercises/practice/eliuds-eggs/test/eliuds-eggs-tests.lfe @@ -0,0 +1,17 @@ +(defmodule eliuds-eggs-tests + (behaviour ltest-unit) + (export all)) + +(include-lib "ltest/include/ltest-macros.lfe") + +(deftest zero-eggs + (is-equal (eliuds-eggs:egg-count 0) 0)) + +(deftest one-egg + (is-equal (eliuds-eggs:egg-count 16) 1)) + +(deftest four-eggs + (is-equal (eliuds-eggs:egg-count 89) 4)) + +(deftest thirteen-eggs + (is-equal (eliuds-eggs:egg-count 2000000000) 13))