New Track: Odin Programming Language

Sounds good. It may be a couple of days before I got something ready. I got sidetrack looking at the PRs and building some tools to go through the problem specification.

1 Like

You’re at the prototyping stage, and can draw on what 78 other tracks did or didn’t do for inspiration. Now’s the perfect time for “side quests” on what makes your life easier in the future before you get locked into anything.

Test generators are fairly common but not ubiquitous so that can be interesting to look through. For the tracks with test generators, pre-authored templates for each exercise seem common and the tooling fills out the template using the problem-specifications data. Another approach I’ve seen is the test generator makes a first draft of the test suite using the problem specifications data and then a human tweaks that.

@glennj can you let me know which machine you are developing the Odin track on? I am developing on a Mac (M2) but can also run on linux (Ubuntu) or Windows. I don’t want to duplicate efforts but I would like to make sure the scripts in the bin directory work on the three platforms.

not windows :slight_smile:

I use a Mac primarily but Linux as well. I’m very cognisant about writing scripts that work across both, assuming that Mac users will do the sensible thing and install a modern bash with homebrew. (sed is particularly vexing)

For CI, we can use a matrix of containers to test example solutions in multiple platforms, if we want.

@BNAndras the current generator script (that was already written) takes the latter approach. I find that, once we nail down the format of the test suite, hand crafting the tests from the canonical data is quite efficient.

1 Like

@glennj, I do have a (secondary) windows machine. I’ll check that the scripts in the bin repo work there too.

When reviewing your PR47, I had a problem (on my Mac) with the location of the configlet cache. Since your script uses the same location for Mac and Linux, I was assuming you were not on a Mac. But now I wonder what is the difference of configuration between your Mac and mine (see my comment on configlet cache in Improve scripts by glennj ¡ Pull Request #47 ¡ exercism/odin ¡ GitHub). I use homebrew heavily for most of everything.

@glennj, No need to respond to my XDG question above, I just read your comments on PR47 and it makes perfect sense now.

I’m on Windows as primary btw, without WSL / WSL 2 (on purpose). If you want a windows user to test / help / debug when it doesn’t work, shout.

@SleeplessByte, that is great. When we are closer to launch, I’ll ping you and see if you can give it a shake. Thank you for the offer.

1 Like

I updated the list of exercises we have in the PR pipeline for right now and am working on a new one. (See Exercise implementation tracker ¡ Issue #26 ¡ exercism/odin ¡ GitHub).

Right now the exercise wishlist is contained in a single github issue. Is that the best practice? I noted that some teams (like the MIPS Assembly) create one issue per exercise. Is that a good way to do it? The MIPS Assembly exercise issues appears in the Exercism Task List. Is that automatic or do you have to link the issue and the task?

1 Like

And we do have one unclaimed exercise on the current list (High Score). I was going to claim it so I can eat our own dog food and check the tooling. Any objection?

+cc: @glennj

Go get that high score.

I made those MIPS issues to invite new contributors to add those specific exercises.

I made some similar Futhark issues, with advisory comments.

For exercises that maintainers themselves are adding, there is usually no need to create issues, unless it helps with coordination between maintainers. For example, I sometimes create an issue to tell other maintainers which exercises I am working on.

@keiraville, I noticed that you added the labels: x:action/create and x:type/content to your MIPS and Futhark issues. Is this how they show up on the “Explore Tasks” page?

1 Like

Contributing to Exercism - Product - Tasks

has explanations for the labels. We add labels so tasks appear in Explore tasks and so contributors can filter.

I could have also added x:module/practice-exercise x:knowledge/elementary x:size/small

1 Like

I have been working on a draft concept tree for the Odin track. I was looking for a place where we can share developer docs for the track that we may want to keep around. The Go track has a folder called reference where they store their design documents. Not everything is worth keeping around but I was thinking it would be nice to have a central place where we can keep info we would like to pass along to newcomers (contributors or future maintainers).

I was thinking creating such a folder (dev-docs/) and posting the draft concept tree in there (through a PR so we can review it first). You can see what the concept tree looks like in Add a roadmap for the Odin concept tree by rmonnet ¡ Pull Request #51 ¡ exercism/odin ¡ GitHub.

Also we do have 23 exercises either merged or in PRs. I looked through the problem specification and picked the next batch. If there is no objections, I will open an issue to track the new list. (That’s 19 with difficulty 1-3 and 21 with difficulty 4+). I think ~ 60 exercises would be a good number for the track launch.

Practice Exercises - Wishlist (easy-medium)

Accumulate

Implement the accumulate operation, which, given a collection and an operation to perform on each element of the collection, returns a new collection containing the result of applying that operation to each element of the input collection.

  • difficulty: 2
  • topics: slices, first-class-procs, iters

Allergies

Given a person’s allergy score, determine whether or not they’re allergic to a given item, and their full list of allergies.

  • difficulty: 3
  • topics: bit_ops, enums, cons, cons_ops

Bank Account

Simulate a bank account supporting opening/closing, withdraws, and deposits of money. Watch out for concurrent transactions!

  • difficulty: 3
  • topics: numbers, structs, error
    Note: do not worry about concurrency, tests should be sequential (for now).

Binary Search

Implement a binary search algorithm.

  • difficulty: 3
  • topics: arrays, searching

Bob

Bob is a lackadaisical teenager. In conversation, his responses are very limited.

  • difficulty: 2
  • topics: conds, loops, strings

Bottle Song

Produce the lyrics to the popular children’s repetitive song: Ten Green Bottles.

  • difficulty: 3
  • topics: strings, numbers, loops

Circular Buffer

A data structure that uses a single, fixed-size buffer as if it were connected end-to-end.

  • difficulty: 3
  • topics: arrays, conds, loops, data_structures, errors, generics

Clock

Implement a clock that handles times without dates.

  • difficulty: 3
  • topics: math_ops, time

ISBN Verifier

Check if a given string is a valid ISBN-10 number.

  • difficulty: 3
  • topics: conds, loops, pattern_matching, strings

Isogram

Determine if a word or phrase is an isogram.

  • difficulty: 2
  • topics: filtering, strings, arrays, enums

Nucleotide Count

Given a DNA string, compute how many times each nucleotide occurs in the string.

  • difficulty: 2
  • topics: maps, strings, conds, loops

Simple Cipher

Implement the Vigenère cipher, a simple substitution cipher.

  • difficulty: 3
  • topics: loops, strings, transforming

Protein Translation

Translate RNA sequences into proteins.

  • difficulty: 3
  • topics: loops, conds, strings, arrays, maps

Proverb

For want of a horseshoe nail, a kingdom was lost, or so the saying goes. Output the full text of this proverbial rhyme.

  • difficulty: 3
  • topics: loops, strings, arrays

Robot Simulator

Write a robot simulator.

  • difficulty: 3
  • topics: structs, enums, conds

Reverse String

Reverse a given string.

  • difficulty: 1
  • topics: string, loops

Series

Given a string of digits, output all the contiguous substrings of length n in that string.

  • difficulty: 3
  • topics: lists, strings, transforming, loops

Triangle

Determine if a triangle is equilateral, isosceles, or scalene.

  • difficulty: 3
  • topics: unions, numbers, conds

Yacht

Score a single throw of dice in the game Yacht.

  • difficulty: 3
  • topics: first-class-procs, conds

Practice Exercises - Wishlist (hard)

Acronym

Convert a long phrase to its acronym.

  • difficulty: 4
  • topics: strings, loops, regex

Anagram

Given a word and a list of possible anagrams, select the correct sublist.

  • difficulty: 4
  • topics: filtering, strings, arrays, parsing

Atbash Cipher

Create an implementation of the Atbash cipher, an ancient encryption system created in the Middle East.

  • difficulty: 5
  • topics: strings, transforming, loops

Book Store

To try and encourage more sales of different books from a popular 5 book series, a bookshop has decided to offer discounts of multiple-book purchases.

  • difficulty: 5
  • prerequisites: numbers, enums, iters

Bowling

Score a bowling game.

  • difficulty: 6
  • topics: numbers, conds, structs, error

Change

Correctly determine change to be given using the least number of coins.

  • difficulty: 6
  • prerequisites: numbers, arrays, errors

Custom Set

Create a custom set type.

  • difficulty: 5
  • topics: bit_sets, arrays, numbers, bools, structs

Diamond

Given a letter, print a diamond starting with ‘A’ with the supplied letter at the widest point.

  • difficulty: 6
  • topics: strings, conds

Dominoes

Make a chain of dominoes.

  • difficulty: 7
  • topics: lists, tuples, enums, booleans

Flatten Array

Take a nested list and return a single list with all values except nil/null.

  • difficulty: 4
  • topics: lists, for_loops, searching

Forth

Implement an evaluator for a very simple subset of Forth.

  • difficulty: 7
  • prerequisites: arrays, strings, errors

Grade School

Given students’ names along with the grade that they are in, create a roster for the school.

  • difficulty: 4
  • topics: maps, sorting, enums, structs

Knapsack

Given a knapsack that can only carry a certain weight, determine which items to put in the knapsack in order to maximize their combined value.

  • difficulty: 5
  • topics: integer, arrays

Linked List

Implement a doubly linked list.

  • difficulty: 4
  • topics: pointers, generics, structs

Matching Brackets

Make sure the brackets and braces all match.

  • difficulty: 5
  • topics: parsing, strings, booleans, stacks

Pascal’s Triangle

Compute Pascal’s triangle up to a given number of rows.

  • difficulty: 4
  • topics: arrays, math_ops, recursion, loops, enums

Pythagorean Triplet

Given an integer N, find all Pythagorean triplets for which a + b + c = N.

  • difficulty: 4
  • topics: numbers, math_ops, structs

Rational Numbers

Implement rational numbers.

  • difficulty: 4
  • prerequisites: integers, structs, math-ops

Roman Numerals

Convert modern Arabic numbers into Roman numerals.

  • difficulty: 4
  • topics: recursion, transforming, strings, loops, integers

Word Count

Given a phrase, count the occurrences of each word in that phrase.

  • difficulty: 4
  • topics: maps, strings, transforming

Zebra Puzzle

Solve the zebra puzzle.

  • difficulty: 8
  • prerequisites: enums, searching, arrays
1 Like

Accumulate was deprecated four years ago in favor of List Ops. List Ops is a bit more involved of an exercise so that might raise the exercise difficulty on your list.

1 Like

I missed that one. I will replace Accumulate with List Ops. It seems more interesting.

I created an issue t. If anybody is interested in some of the exercises, let me know. The tooling is still quite rough (especially the test generator). This is the next thing I plan to work on.

I plan to start working on Circular Buffer and Roman Numerals to get the ball rolling.

2 Likes

I’m interested in participating in the Odin language track. Is there a list somewhere of todos?

Oh, silly me, there it is: issues/53

1 Like

First peek would be:

Showing 4 of 4 open issues in exercism/odin

ID   TITLE                                             LABELS          UPDATED          
#53  Odin Practice Exercises Implementation Status...  x:type/content  about 7 days ago
#29  Implement a new exercise generator                                about 24 days ago
#6   Odin track icon                                                   about 16 days ago
#1   Launch tracking                                                   about 7 days ago

But also the discussion started, I think, here:.

Your answer would have come quicker if e-mail had been setup to be received here. Took me a little longer to write the response here.