exercism/scala
65.4
Adequate · 20 September 2026
456
lines of production code
Scala
primary language
1
measurement over time
What this system is
This system is the configuration and content repository for the Exercism Scala programming track, providing the infrastructure for learners to practice coding. It defines the structure, metadata, and reference solutions for a wide variety of exercises, ranging from basic syntax drills to complex algorithmic challenges. The repository also includes tooling for validating test coverage and generating test suites, ensuring consistency across the track's educational materials.
Features
Add Dominoes exercise metadata and example solution
The Dominoes practice exercise now includes its configuration metadata, test mappings, and a reference example solution. The .meta/config.json file defines the exercise's authors, contributors, file paths (solution, test, example, and invalidator), and a blurb describing the task as making a chain of dominoes. The .meta/tests.toml file maps specific test cases to their descriptions, covering scenarios such as empty input, singletons, reversing dominoes, disconnected inputs, and backtracking requirements. Additionally, the .meta/Example.scala file provides a complete reference implementation for the Dominoes exercise, demonstrating how to chain dominoes by finding a valid permutation that forms a continuous loop.
(repo-wide) · high confidence
Add Killer Sudoku Helper exercise for Scala
Introduced a new practice exercise that challenges users to write a Scala tool for solving Killer Sudoku cages. The implementation requires generating all valid digit combinations for a given cage sum and size, while respecting standard Sudoku rules such as excluding digits already present in the same row, column, or box. The provided solution uses a recursive algorithm to efficiently filter and combine digits, and the test suite covers scenarios ranging from trivial single-digit cages to complex restricted combinations.
(repo-wide) · high confidence
Add Lasagna exercise for Scala basics
A new 'Lasagna' exercise has been added to the Scala basics concept track. The exercise provides a skeleton class with TODO comments for four methods (expectedMinutesInOven, remainingMinutesInOven, preparationTimeInMinutes, elapsedTimeInMinutes) and a corresponding test suite using ScalaTest to guide learners through basic method definitions and calculations.
exercises/concept/basics · high confidence
Add Scala 3 example implementations and metadata for binary-search, phone-number, and sieve exercises
New Scala 3 example solutions and associated metadata files (config.json, tests.toml) have been added for the binary-search, phone-number, and sieve exercises. The example implementations provide reference solutions using Scala 3 idioms (such as tail recursion for binary search and mutable sets for the sieve), while the metadata files define the file paths, authors, and test descriptions required for the track's configuration and validation tools.
exercises/practice/binary-search/.meta, exercises/practice/phone-number/.meta, exercises/practice/sieve/.meta · high confidence
Add Scala Hamming exercise stub and test suite
Introduced the Scala implementation for the Hamming exercise, providing a starter \Hamming\ object with a \distance\ method that returns an \Option\[Int\]\. The accompanying test suite defines the expected behavior, including calculating distances between identical or different strands and returning \None\ when strand lengths differ.
exercises/practice/hamming · high confidence
Add Scala example solution and metadata for lens-person exercise
The lens-person exercise now includes a reference implementation in Scala, provided in \.meta/Example.scala\. This file demonstrates two approaches to solving the problem: one using the Monocle library and another using Scalaz, allowing users to study idiomatic lens usage for updating nested immutable records. A corresponding \.meta/config.json\ file has been added to register the exercise metadata, including the solution file path, test file, and contributor information.
exercises/practice/lens-person/.meta, exercises/practice/pythagorean-triplet/.meta · high confidence
Add Scala linked-list exercise with Deque implementation
The linked-list practice exercise now includes a Scala track, introducing a Deque class and corresponding test suite. Users can implement a double-ended queue supporting push, pop, unshift, and shift operations, with tests verifying basic and complex interaction scenarios.
exercises/practice/linked-list · high confidence
Add Space Age exercise skeleton for Scala
A new practice exercise for the Space Age problem has been added for the Scala track. The change introduces a \SpaceAge\ object with stub methods for calculating age on each planet (Earth, Venus, Mercury, Mars, Jupiter, Saturn, Uranus, and Neptune) and a corresponding test suite using ScalaTest. Users can now complete this exercise by implementing the planet-specific age calculations.
exercises/practice/space-age · high confidence
Add canonical solution and metadata for Prime Factors exercise
The Prime Factors exercise now includes a canonical example implementation (Example.scala) that provides a reference solution using a tail-recursive algorithm for computing prime factors. Additionally, metadata files (config.json and tests.toml) have been added to define the exercise's source, blurb, file structure, and test case mappings, enabling proper configuration and validation within the track.
exercises/practice/prime-factors/.meta · high confidence
Add example solution and metadata for Robot Simulator
The Robot Simulator exercise now includes an official example solution (Example.scala) that demonstrates the required behavior for creating robots, moving them, and rotating them in four cardinal directions. This is accompanied by new metadata files (config.json and tests.toml) that define the exercise structure, list contributors, and map the canonical test cases to their descriptions, enabling students to compare their implementations against a reference solution.
exercises/practice/largest-series-product/.meta, exercises/practice/robot-simulator/.meta, exercises/practice/sgf-parsing/.meta · high confidence
Add example solutions and metadata for Connect and Forth exercises
The Connect and Forth practice exercises now include official example implementations (\.meta/Example.scala\) alongside their metadata files (\config.json\, \tests.toml\). For Connect, the example provides a solution for computing the winner of a Hex/Polygon game, while the Forth example implements an evaluator for a subset of the Forth language, including stack operations and user-defined words. These additions allow users to view reference solutions and ensure the test suites are correctly synchronized with the canonical problem specifications.
exercises/practice/binary/.meta, exercises/practice/trinary/.meta, exercises/practice/connect/.meta, exercises/practice/forth/.meta, exercises/practice/hexadecimal/.meta, exercises/practice/octal/.meta · high confidence
Add example solutions and metadata for practice exercises
Added \.meta/Example.scala\ files containing reference implementations for the Atbash Cipher, Collatz Conjecture, Hamming Distance, RNA Transcription, and Say exercises. These examples are now available to users as a learning resource. The corresponding \.meta/config.json\ files were created to register these example files, define file paths for solutions and tests, and include metadata such as authors, contributors, and blurbs. Additionally, \tests.toml\ files were added to map specific test cases to their descriptions, ensuring consistent test selection and validation against the canonical problem specifications.
(repo-wide) · high confidence
Add reference example solutions for practice exercises
Added \.meta/Example.scala\ reference implementations for several practice exercises (including anagram, isogram, matching-brackets, protein-translation, rail-fence-cipher, raindrops, rotational-cipher, scrabble-score, variable-length-quantity, and wordy). These files provide the canonical solution code that the track's tooling uses to validate student submissions and run tests.
(repo-wide) · high confidence
Add reference implementation and metadata for the Strain exercise
The Strain exercise now includes a canonical solution (Example.scala) that implements the \keep\ and \discard\ operations on collections using a tail-recursive helper, along with the necessary metadata files (config.json and tests.toml) to define the exercise structure, file paths, and test cases for users.
exercises/practice/strain/.meta · high confidence
Add stub files for Bowling and Run-Length Encoding exercises
Stub files have been added for the Bowling and Run-Length Encoding exercises, providing the initial class structures and test suites for users to begin implementation. The Bowling stub includes a test suite covering scoring rules for strikes, spares, and invalid inputs, while the Run-Length Encoding stub provides tests for encoding and decoding strings with various character patterns.
exercises/practice/bowling, exercises/practice/run-length-encoding · high confidence
Alphametics exercise now includes an official Scala example solution
The Alphametics practice exercise now provides a reference implementation in \.meta/Example.scala\. This solution uses Scala's \RegexParsers\ to parse arithmetic expressions (supporting addition, multiplication, and exponentiation) and solves the puzzle by permuting digit assignments for unique letters. The exercise metadata (\config.json\) has been updated to point to this new example file, and \tests.toml\ has been added to map the canonical test cases.
exercises/practice/alphametics/.meta · high confidence
Grains exercise metadata and example solution added
The Grains exercise now includes a canonical example solution (Example.scala) that demonstrates calculating grains on chessboard squares and the total board sum using BigInt for precision. Metadata files (config.json and tests.toml) have been added to define the exercise's file structure, authors, and test case mappings, enabling proper validation and synchronization with the problem specifications.
(repo-wide) · high confidence
Initial Scala implementation for Pythagorean Triplet exercise
The Scala track for the Pythagorean Triplet exercise has been initialized with a new stub file and a corresponding test suite. The test suite defines the expected behavior for checking if numbers form a Pythagorean triplet and for finding triplets within a range or sum, with the calculation tests currently marked as pending to allow for student implementation.
exercises/practice/pythagorean-triplet · high confidence
Initial release of the Scala track configuration and repository structure
This change introduces the foundational structure for the Exercism Scala track. It adds the \config.json\ file defining the track's metadata, exercise list (including concepts and practice exercises like Hello World and Bob), and file patterns for solutions and tests. It also includes essential repository files such as \.gitignore\ to exclude build artifacts and IDE files, \.scalafmt.conf\ to enforce Scala 3 code formatting, and standard documentation files like \README.md\, \LICENSE\, and \CODE\_OF\_CONDUCT.md\.
(repo-wide) · high confidence
Introduce Scala-based test generation framework for Exercism exercises
The testgen module now provides a new infrastructure for automatically generating Scala test suites from canonical data. This includes a CanonicalDataParser to interpret exercise JSON, a generic TestGenerator trait for mapping test cases to code, and a Twirl template for producing ScalaTest FunSuite files. A runner script allows invoking generators by exercise slug, with an initial implementation for the 'word-count' exercise. Additionally, a version-check-ignore file is added to exclude specific exercises from version checks.
testgen · high confidence
New Flower Field exercise for Scala
A new practice exercise called Flower Field has been added to the Scala track. This exercise is a re-skinning of the Minesweeper problem, where users must annotate a garden board by counting adjacent flowers ('\*') in empty squares. The entry includes the full Scala scaffolding (stub, tests, and example solution), documentation, and configuration files for the new track location.
exercises/practice/flower-field · high confidence
New Scala exercises for complex numbers and simple linked lists
Added new practice exercises for the Scala track: a complex-number implementation using ScalaTest's AnyFunSuite, and a generic simple-linked-list trait with property-based tests via ScalaCheck. These files provide the starter code and test scaffolding for learners to implement arithmetic on complex numbers and basic list operations (add, reverse, conversion to/from Seq).
exercises/practice/complex-numbers, exercises/practice/simple-linked-list · high confidence
New bin scripts for fetching configlet and verifying exercises
Added three new shell scripts to the bin directory: fetch-configlet downloads the latest version of the configlet tool for the current OS and architecture; test runs the track's test suite for concept and practice exercises, optionally filtering by a specific exercise slug; and verify-exercises-in-docker validates that example and exemplar solutions pass tests using the exercism/scala-test-runner Docker image, supporting both full verification and single-exercise checks.
bin · high confidence
Behavioural changes
Add v3 exercise metadata and example solutions
Practice exercises now include .meta/config.json files that define file paths, authors, contributors, and blurbs, alongside .meta/Example.scala files providing reference solutions and tests.toml files mapping canonical test cases. This structure supports the v3 track configuration and allows the configlet tool to sync metadata and validate test coverage.
(repo-wide) · high confidence
Migrate Scala exercises to Scala 2.13 and ScalaTest 3.2.10
The Scala track exercises have been updated to use Scala 2.13 and ScalaTest 3.2.10. This migration updates the test suites to use the modern ScalaTest API, such as \AnyFlatSpec\ and \AnyFunSuite\, and adjusts the test structure to match the new framework conventions. Users will now run tests against the updated versions of the language and testing library.
(repo-wide) · high confidence
Simplified Scala stub for Hello World exercise
The Scala stub for the Hello World exercise has been simplified to reduce initial syntax complexity for students. The provided \HelloWorld.scala\ now contains a minimal object with a \hello\ method that returns a placeholder string, allowing learners to focus on the core task of implementing the correct return value without being distracted by boilerplate.
exercises/practice/hello-world · high confidence
Update canonical class names for LargestSeriesProduct and PrimeFactors exercises
The Scala track exercises for LargestSeriesProduct and PrimeFactors have been updated to use canonical class names. The test suites now reference \Series.largestProduct\ and \PrimeFactors.factors\ respectively, aligning the expected API with the canonical naming convention for these practice problems.
exercises/practice/largest-series-product, exercises/practice/prime-factors · high confidence
Dependencies
Scala track upgrades to Scala 3.4.2 and ScalaTest 3.2.19
The Scala track exercises and test generator have been updated to use Scala version 3.4.2, replacing the previous 2.13 version. All exercises now depend on ScalaTest 3.2.19 for testing, and the test generator itself has been upgraded to use Play JSON 3.0.4, Twirl API 2.0.7, Scala Parser Combinators 2.4.0, and Commons Lang3 3.15.0. Some specific exercises (alphametics, forth, matching-brackets, sgf-parsing, wordy) also include Scala Parser Combinators 2.1.0 as a dependency, while lens-person adds Monocle 3.2.0 and Scalaz 7.3.8, and simple-linked-list adds ScalaCheck 3.2.19.0.
(dependencies) · high confidence
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
Baseline
- First survey — no prior run to compare against. CAI 65.
Lenses
- Code Health 96
- Architecture 100
- Maturity 55
- Readiness 63
- Security 75
Changes since last survey
- 300 commits — 289 feature/other, 11 fixes
By area
- exercises/practice — 97 commits
- (root) — 47 commits
- (repo) — 37 commits
- .github/workflows — 31 commits
- exercises/concept — 9 commits
- reference/exercise-concepts — 9 commits
- config/maintainers.json — 6 commits
- .github/CODEOWNERS — 3 commits
- .github/labels.yml — 3 commits
- bin/fetch-configlet — 3 commits
- exercises/accumulate — 3 commits
- exercises/high-scores — 3 commits
- exercises/robot-simulator — 3 commits
- exercises/shared — 3 commits
- .appends/.github — 2 commits
- .github/dependabot.yml — 2 commits
- exercises/collatz-conjecture — 2 commits
- exercises/grade-school — 2 commits
- exercises/rotational-cipher — 2 commits
- exercises/two-fer — 2 commits
Notable commits
- fix: Attempt to fix Travis CI failure by using a different JDK (#618)
- fix: Fix Yacht tests in online test runner (#790)
- fix: Fix broken link in the robot-name exercise
- fix: Fix exercises (#718)
- fix: Fix forked_from after exercise renames (#689)
- fix: Fixed readme link (#623)
- fix: Fixes #714 (#715)
- fix: Improve instructions and fix tests for PyhagoreanTriplet exercise. (#731)
- fix: [v3] Fix configlet CI workflow
- fix: lint: fix errors by changing difficulty 0 (#713)
- fix: 🤖 Fix invalid UUIDs (#671)
- change: --no-edit
- change: --no-edit
- change: -m
- change: Acronym approaches (#770)
- change: Add 'math' topic to relevant exercises in track config
- change: Add Rafael to maintainers (#633)
- change: Add SpaceAge skeleton class. (#740)
- change: Add Yacht exercise to the Scala track (#789)
- change: Add authors and contributors to Practice Exercises (#668)
- …and 280 more
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/scala 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 20 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit 5ff0fed5ba60f1397eaf8da4a371cd7edb64e54f — the exact code this score is about.
- Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-b51f968c9b10.