Operation Onyx - Crystal


This is the second operation on the Crystal track, operations aim to deliver bigger content pieces compared to our ongoing work (like fixes, adding exercises etc).

Crystal exercises on Exercism

It is an operation since this will be released over a period (likely 1-2 weeks).


  • Learning mode
  • Crystal 1.9
  • Representer improvements
  • Generator improvements
  • Exercise improvements

Learning mode

This is something that has been worked on for the last few months, and our first release has finally landed. The learning mode includes 10 concepts ranging from Bools to While loops and 9 new exercises ranging from “Arys Amazing Lasagna” to “Intrest is interesting”.

I want to Thank everyone who helped review: @iHiD, @glennj, @neenjaw, @angelikatyborska, @vaeng, @ErikSchierboom, @andrerfcsantos, @ ryanplusplus, @ fryguy, @ Tamnac, @ devnote-dev (the forum only allowed me to tag 10 people, but those untag doesn’t have an account on the forum).

Earlier this year the test runner also was updated to v3 spec which means that all tasks test will be separated into groups to make it easier to read.
This isn’t the end of the learning mode, new concepts are planned together with new exercises, you can check out the updated planned tree here:

Crystal 1.9.2

Note: This may lead to some current solutions to break

This upgrade makes it so you can use the latest tools.
This also makes Crystal 1.9 an “officially” supported version.
This makes our list of “officially” supported versions: 1.5, 1.6, 1.7, 1.8, 1.9.

With official means that we ensure that the version can solve all of the exercises and also that we will mention if some feature is not available for some of the versions.

When the track is updated to Crystal 1.10, will although Crystal 1.5 no longer receives support due to it being rather complicated to support many releases.

Representer improvements

The representer was released during the last operation, and in this one, it will receive its first major revision. This includes a new debug mode in which to get the representer has to be given a compile flag, which means the representer run in the online environment won’t need the extra processing. The debug mode will give some extra info about the process and aims to make it faster to investigate bugs.

Some other notable changes:

  • The source code was optimized to make it shorter and easier to maintain (as of writing is the representer file 100 lines less)
  • The representer will output the error message if an error occurred when using the CLI mode.
  • The Representer image is only about 30 mb.
  • A bunch of bugs fixes

Generator improvements

The generator is receiving its first updates since its first release back in January. There are 2 major revisions to this update:

  1. Generator independence, before has the generator been dependent on that an exercise has tests on problem specs. This change will remove that requirement by allowing reading local json files, this change is done to allow exercises without conical data to still be templated.
  2. Generator plugins, some exercises require more complex logic to be templated, thereby a new system will allow for methods to be created to do the more complex logic. This will allow our last (possible) exercises to be templated.

Exercise improvements

Some of the older exercises have it felt like their difficulty rating has been incorrect, and some exercises could benefit to get some extra thoughts.

Difficulty rating changes:

  • largest series product: 1 → 3
  • pascals triangle: 1 → 3
  • sieve: 1 → 3
  • space-age: 1 → 2
  • forth: 3 → 4
  • meetup: 3 → 4
  • darts: 2 → 1
  • Grains: 4 → 2
  • Secret handshake: 5 → 2
  • Perfect numbers: 4 → 2
  • Proverb: 4 → 3


  • binary-search-tree:
    • Updating test to match problem specs
    • Templated, using an upgraded generator that can template the exercise
    • rating: 1 → 6
  • roman-numerals:
    • Make an extension explaining that the method is supposed to be extended from Int.
    • rating: 1 → 2
  • Strain
    • Make an extension explaining that the methods are supposed to be extended from Array.
    • Template the exercise
    • rating 2 → 4


  • Binary

Whats next?

Well I have some surprises cooking up, which still need some more time on the stove but should be available not too far into the future.

1 Like