The instructions come from the upstream problem-specifications repo that all 77+ Exercism tracks pull from. As a result, you shouldn’t update the instructions or exercise config directly since those changes might get overwritten the next time the files are synced.
An instructions append file would be the preferred route to introduce track-specific instructions.
Edit - More info about an append is at Practice Exercises | Exercism's Docs. However, wait until a Rust maintainer indicates this is the way they want you to proceed.
If the exercise implements a Problem Specifications Exercise, this file’s contents should match the Problem Specification Exercise’s instructions.md file (or description.md file if there is no instructions.md file). configlet has functionality to automatically sync the contents of this file.
We should not make track (language) specific changes in this file.
Note that configlet also syncs the blurb in .meta/config.json, we should not change that either.
.docs/introduction.append.md
If the track maintainers decide additional track-specific instructions are required, they are placed in this optional file.
I feel like you should keep the input an unsigned int given the exercise clearly indicates the number should be 0 to 999,999,999,999 so a negative number wouldn’t make a lot of sense here. That aligns with Rust’s Grains implementation which also takes an unsigned int since you can’t conceptually have an negative numbered square on the chessboard.
Yes, we have a lot of exercises where the function signatures are quite strict, which prevents many errors at compile time. This is idiomatic Rust. So I think it’s not worth it to loosen the function signature just to match the introduction text a little better.
Maybe the introduction could be made a little more vague upstream. So it hints that there may be a test involving -1, but there doesn’t have to be.
I think this is a good point. You can now link to it in the future if someone brings it up. I agree with this assessment in the same way that in JS and TS we don’t write a gazillion defensive input validation algos for each function.
There’s already an instructions.append.md and indeed, it does display at the end of the instructions:
Extension
Add capability of converting up to the max value for u64: 18_446_744_073_709_551_615.
For hints at the output this should have, look at the last test case.
Somehow I missed it. So no further change is needed I guess.