Skip to content
CAI
Software that uses CAICheck a score

exercism/erlang

63.7

Adequate · 2 October 2026

400

lines of production code

Erlang

primary language

2

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

This repository is the Erlang track for the Exercism programming platform, providing a curated set of practice exercises for learners. It manages the lifecycle of these coding challenges by maintaining standardized project structures, canonical test suites, and official reference solutions. The system also includes tooling for automated testing, continuous integration, and metadata management to support the educational workflow.

Features

Add Eliud's Eggs exercise for Erlang

A new practice exercise, Eliud's Eggs, has been added to the Erlang track. This exercise challenges users to count the number of 1 bits in the binary representation of a given number, effectively counting eggs in a digital display scenario. The implementation must avoid using standard library bit-counting functions, requiring a manual solution using basic bitwise operations. The entry includes the necessary project structure, instructions, test cases, and an example solution for Erlang.

exercises/practice/eliuds-eggs · high confidence

Add Erlang track stub for the Forth exercise

Introduced the initial project structure for the Forth exercise in the Erlang track, including the rebar3 configuration, application source file, and a stub module with an unimplemented evaluate function.

exercises/practice/forth · high confidence

Add Yacht exercise for Erlang

A new Yacht exercise has been added to the Erlang track, allowing users to implement a dice-scoring function. The solution requires calculating scores for categories such as Ones through Sixes, Full House, Four of a Kind, Little/Big Straights, Choice, and Yacht based on a throw of five dice. The entry includes the problem instructions, a stub implementation in \src/yacht.erl\, a comprehensive test suite in \test/yacht\_tests.erl\, and the necessary configuration files for the Erlang build tool (rebar3).

(repo-wide) · high confidence

Add Zipper exercise configuration and example solution

The Zipper practice exercise is now available with a new configuration file defining the solution, test, and example file paths, along with author and contributor metadata. An example implementation of the Zipper for binary trees has been added to demonstrate the required API (creating zippers, navigating left/right/up, and modifying values/structure), and the test suite configuration has been updated to include all standard test cases for this exercise.

exercises/practice/isbn-verifier/.meta, exercises/practice/zipper/.meta · high confidence

Add accumulate exercise stub for Erlang

The accumulate exercise for Erlang has been added to the practice directory. This includes the project configuration (rebar.config), application source file, and a module stub (accumulate.erl) defining the accumulate/2 function signature, allowing users to begin implementing the solution.

exercises/practice/accumulate · high confidence

Add example solutions and metadata for multiple practice exercises

Added \.meta/example.erl\ reference implementations and \.meta/config.json\ metadata (including authors, contributors, and blurbs) for the Bob, Clock, Crypto Square, Diamond, Difference of Squares, ETL, Gigasecond, Nth Prime, Nucleotide Count, Palindrome Products, Pascal's Triangle, Perfect Numbers, Secret Handshake, Series, Sieve, Spiral Matrix, Sum of Multiples, and Triangle exercises. These files provide official solution patterns and structured metadata for the track's practice exercises.

(repo-wide) · high confidence

Add metadata and example solutions for Armstrong Numbers and Two Fer exercises

The Armstrong Numbers and Two Fer exercises now include .meta configuration files (config.json), canonical example implementations (example.erl), and test definitions (tests.toml). This provides users with official reference solutions and structured metadata, including authorship, source information, and specific test case descriptions, to aid in learning and verification.

exercises/practice/armstrong-numbers/.meta, exercises/practice/two-fer/.meta, exercises/practice/connect/.meta, exercises/practice/minesweeper/.meta, exercises/practice/prime-factors/.meta, exercises/practice/transpose/.meta · high confidence

Add pangram exercise metadata and example solution

The pangram practice exercise now includes a .meta directory containing the configuration file (config.json), an example solution (example.erl), and the test manifest (tests.toml). The config.json defines the source files for the solution, tests, and example, along with author/contributor metadata and a blurb describing the exercise. The example.erl provides a reference implementation using a list of all letters to check for presence in the input sentence. The tests.toml file lists the canonical test cases from the problem-specifications, including descriptions for tests such as 'empty sentence', 'perfect lower case', and 'case insensitive'.

(repo-wide) · high confidence

Add reference implementation and metadata for Protein Translation exercise

The Protein Translation exercise now includes a canonical example solution (example.erl) that users can reference, along with a config.json file defining the exercise metadata (authors, files, blurb) and a tests.toml file mapping the test cases to their descriptions. This provides a complete, runnable reference for the RNA-to-protein translation logic in Erlang.

exercises/practice/protein-translation/.meta · high confidence

Added Erlang stub for palindrome-products exercise

The Erlang track now includes a new practice exercise for palindrome-products. This adds the necessary project structure, including a rebar.config with Erlang compiler and Dialyzer settings, an application source file, and a stub implementation of the largest/2 and smallest/2 functions in the palindrome\_products module, along with hints for optimizing algorithm efficiency.

exercises/practice/palindrome-products · high confidence

Added example solutions and metadata for bank-account and parallel-letter-frequency exercises

The \bank-account\ and \parallel-letter-frequency\ practice exercises now include \.meta/config.json\ files defining their structure (solution, test, and example file paths) and contributor metadata, alongside new \.meta/example.erl\ files. The \bank-account\ example provides a \gen\_server\-based implementation handling concurrent deposits, withdrawals, and balance checks, while the \parallel-letter-frequency\ example demonstrates parallel letter counting using spawned processes and dictionary merging. These additions allow learners to compare their implementations against official reference solutions.

exercises/practice/bank-account/.meta, exercises/practice/parallel-letter-frequency/.meta · high confidence

Darts exercise metadata and example solution added

The Darts practice exercise now includes its configuration metadata, test case definitions, and an example solution. The config.json file defines the source files (src/darts.erl, test/darts\_tests.erl) and credits the authors and contributors. The tests.toml file maps specific test cases to descriptions such as 'Missed target', 'On the outer circle', and 'On the inner circle', ensuring the exercise covers various scoring scenarios. Additionally, an example.erl file is provided in the .meta directory, implementing the score calculation logic based on distance from the center (10 points for inner circle, 5 for middle, 1 for outer, 0 otherwise).

(repo-wide) · high confidence

Initial configuration and example implementation for the Strain exercise

This change introduces the foundational metadata and reference solution for the Strain exercise. It adds a config.json file defining the exercise's authors, contributors, and file structure (solution, test, and example files), along with a blurb describing the task of implementing keep and discard operations on collections. Additionally, it provides an example.erl file containing a recursive implementation of keep and discard, and a tests.toml file that maps specific test cases (such as keeping/discard on empty lists, strings, and lists) to their descriptions for validation purposes.

exercises/practice/strain/.meta · high confidence

Isogram exercise configuration and example solution added

The isogram exercise now includes a complete metadata configuration, an example solution, and a test specification file. The config.json file defines the exercise's source, blurb, and file structure, while the new example.erl file provides a reference implementation for checking if a string is an isogram. Additionally, tests.toml has been added to map specific test cases to their descriptions, ensuring the exercise aligns with the standard problem specifications.

exercises/practice/isogram/.meta · high confidence

Leap year exercise metadata and example solution added

The leap year exercise now includes a configuration file defining the problem blurb, source attribution, and file mappings for the solution, test, and example files. An example implementation of the leap year logic has been added to provide a reference solution, and a test manifest has been introduced to map specific test cases to their descriptions, ensuring consistent test execution and validation for users.

exercises/practice/leap/.meta · high confidence

New CI and utility scripts for automated testing and dependency fetching

Added three new scripts to the bin directory to support the CI pipeline and development workflow. The fetch-configlet script automatically downloads the latest version of the configlet tool for the current operating system and architecture. The run\_ci.sh script iterates through practice exercises in alphabetical order, running tests via rebar3 and providing colored output (green for pass, red for fail) along with a summary of any failures. The get\_latest\_majors\_for\_ci\_matrix.py script processes version inputs to generate a JSON list containing only the latest minor release for each major version, used for constructing CI build matrices.

bin · high confidence

Behavioural changes

Add .meta metadata and example solutions for practice exercises

The .meta directories for the all-your-base, custom-set, dominoes, and satellite exercises now include config.json files (defining authors, contributors, file paths, and blurbs), tests.toml files (mapping test cases to descriptions), and example.erl files (providing reference solutions). This change standardizes the metadata structure for these exercises and makes official example implementations available to users.

(repo-wide) · high confidence

Erlang exercises moved to practice track with v3 stubs

The Erlang track's existing exercises have been reorganized into the \exercises/practice\ directory as part of the v3 curriculum update. Each exercise now includes a standardized \rebar.config\ (depending on \erl\_exercism\ 0.1.2) and a source file containing the module definition with exported function stubs returning \undefined\, providing the initial structure for learners to implement solutions.

(repo-wide) · high confidence

Grade school exercise metadata and example solution updated

The grade-school exercise now includes a new .meta/config.json file defining authors, contributors, and the exercise blurb, alongside a new example solution (example.erl) that uses ordsets for tracking student names. The tests.toml file has been synchronized with the latest problem-specifications, disabling specific tests that do not comply with function specs and updating test descriptions to reflect current requirements.

exercises/practice/grade-school/.meta · high confidence

Hello World exercise stub updated to return 'Goodbye, Mars!'

The Erlang Hello World exercise stub has been updated so that the \hello\_world:hello/0\ function returns the string "Goodbye, Mars!" instead of the traditional "Hello, World!". This change, along with the addition of a new \rebar.config\ and \app.src\ file, simplifies the setup for students by providing a properly generated project structure with specific compiler and dialyzer warnings enabled.

exercises/practice/hello-world · high confidence

New test runner and bootstrap script for Erlang exercises

The repository now includes a new bootstrap script (\_test/bootstrap.sh) that installs rebar3 and configlet, and a new Erlang escript (\_test/check-exercises.escript) that serves as the primary test runner. This script discovers all exercises by finding rebar.config files, runs eunit tests for each, and reports progress and results, replacing the previous Makefile-based approach.

_\test · high confidence

Test coverage

Added EUnit test suite for the Sublist exercise; Added EUnit test suites for Bank Account and Circular Buffer exercises; Added EUnit tests for the Meetup exercise; Added Erlang test suite for largest-series-product exercise; Added Erlang test suites for multiple practice exercises; Added Luhn algorithm test suite for Erlang; Added Protein Translation test suite for Erlang; Added generated test suites for change, prime-factors, and transpose exercises; Added initial test suite for parallel letter frequency; Added test suite for Hamming distance exercise; Added test suite for ISBN Verifier; Added test suite for the Poker exercise; Added unit tests for the accumulate exercise; Updated test suites for multiple practice exercises.

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

How this codebase got here

This is the PUBLIC form of this artifact. Findings are listed in full, but the details of SECURITY findings — which rule fired, in which file, on which line, and how to fix it — are deliberately withheld, and any secret-scanner results are excluded entirely. Where detail is absent here it was REMOVED FOR PUBLICATION; it is not missing from the analysis. The complete artifact is available from the repository owner.

Score

  • CAI 63 → 64 (+0.3)
  • Rubric changed (rubric-2026.09.12 → rubric-2026.09.18) — scores are not directly comparable.

Lenses

  • Code Health 99 → 98 (-1.5)
  • Architecture 69 → 69 (+0.0)
  • Maturity 57 → 57 (+0.0)
  • Readiness 63 → 70 (+6.5)
  • Security 71 → 65 (-6.1)

Resolved (2)

  • Coverage not measured — no coverage collector is wired up
  • Documentation: no installation or build instructions (README.md)

New (96)

  • Dependency hygiene PARTLY measured — rebar3 pinning read, dependency currency not (no rebar.lock-pinned Hex declaration to grade)
  • Duplicated block (10 lines × 2) (exercises/practice/flower-field/.meta/example.erl)
  • Duplicated block (6 lines × 2) (exercises/practice/flower-field/.meta/example.erl)
  • Duplicated block (6 lines × 2) (exercises/practice/flower-field/.meta/example.erl)
  • Duplicated block (6 lines × 2) (exercises/practice/flower-field/.meta/example.erl)
  • Duplicated block (6 lines × 2) (exercises/practice/flower-field/.meta/example.erl)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • No dependency lockfile committed (exercises/practice/accumulate/rebar.config)
  • No dependency lockfile committed (exercises/practice/acronym/rebar.config)
  • No dependency lockfile committed (exercises/practice/all-your-base/rebar.config)
  • No dependency lockfile committed (exercises/practice/allergies/rebar.config)
  • No dependency lockfile committed (exercises/practice/anagram/rebar.config)
  • No dependency lockfile committed (exercises/practice/armstrong-numbers/rebar.config)
  • No dependency lockfile committed (exercises/practice/atbash-cipher/rebar.config)
  • No dependency lockfile committed (exercises/practice/bank-account/rebar.config)
  • No dependency lockfile committed (exercises/practice/beer-song/rebar.config)
  • No dependency lockfile committed (exercises/practice/bob/rebar.config)
  • …and 76 more

Changes since last survey

  • 2 commits — 2 feature/other, 0 fixes

By area

  • .github/workflows — 1 commit
  • exercises/practice — 1 commit

Notable commits

  • change: Add flower-field, deprecating minesweeper (#614)
  • change: 🤖 Sync org-wide files to upstream repo (#626)

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

exercism/erlang was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.

About this page

  • The score is its most recent published measurement, taken on 2 October 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit a794342113cc1bb5cade4c550ed26786a8482530 — the exact code this score is about.
  • Scored under rubric-2026.09.18 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-e569280dd5e2.