{"id":20082059,"url":"https://github.com/exercism/odin","last_synced_at":"2025-05-06T00:31:32.695Z","repository":{"id":196874489,"uuid":"697231052","full_name":"exercism/odin","owner":"exercism","description":"Exercism exercises in Odin.","archived":false,"fork":false,"pushed_at":"2024-12-01T07:24:23.000Z","size":57,"stargazers_count":11,"open_issues_count":19,"forks_count":7,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-04-29T05:28:05.786Z","etag":null,"topics":["exercism-track","wip-track"],"latest_commit_sha":null,"homepage":"https://exercism.org/tracks/odin","language":"Odin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/exercism.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null},"funding":{"github":["exercism"],"custom":["https://exercism.org/donate"]}},"created_at":"2023-09-27T10:11:04.000Z","updated_at":"2025-04-28T01:20:08.000Z","dependencies_parsed_at":"2024-01-24T16:28:15.474Z","dependency_job_id":"f935c0d5-f4c3-4938-87ee-81f6f56180e3","html_url":"https://github.com/exercism/odin","commit_stats":{"total_commits":13,"total_committers":5,"mean_commits":2.6,"dds":0.6923076923076923,"last_synced_commit":"5bfd58db4de56a80fcee457ebf1c027e21e59566"},"previous_names":["exercism/odin"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/exercism%2Fodin","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/exercism%2Fodin/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/exercism%2Fodin/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/exercism%2Fodin/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/exercism","download_url":"https://codeload.github.com/exercism/odin/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252598346,"owners_count":21774240,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["exercism-track","wip-track"],"created_at":"2024-11-13T15:41:41.793Z","updated_at":"2025-05-06T00:31:32.222Z","avatar_url":"https://github.com/exercism.png","language":"Odin","funding_links":["https://github.com/sponsors/exercism","https://exercism.org/donate"],"categories":[],"sub_categories":[],"readme":"# Odin\n\n\u003cbr\u003e\n\nHi. \u0026nbsp;👋🏽 \u0026nbsp;👋 \u0026nbsp;**We are happy you are here.**\u0026nbsp; 🎉\u0026nbsp;🌟\n\n\u003cbr\u003e\n\n**`exercism/odin`** is one of many programming language tracks on [Exercism](exercism-website).\nThis repo holds all the instructions, tests, code, and support files for Odin _exercises_ currently under development or implemented and available for students.\n\n🌟 \u0026nbsp;\u0026nbsp;Track exercises support the `dev-2024-08` release of Odin.\n\nExercises are grouped into **concept** exercises which teach the Odin syllabus, which will eventually live [here][odin-syllabus], and **practice** exercises, which are unlocked by progressing in the syllabus tree \u0026nbsp;🌴\u0026nbsp;.\nConcept exercises are constrained to a small set of language or syntax features.\nPractice exercises are open-ended, and can be used to practice concepts learned, try out new techniques, and _play_. These two exercise groupings can be found in the track [config.json][config-json], and under the `odin/exercises` directory.\n\n\u003cbr\u003e\u003cbr\u003e\n\n\u003cdiv\u003e\n\u003cspan\u003e\n\u003cimg align=\"left\" height=\"60\" width=\"85\" src=\"https://user-images.githubusercontent.com/5923094/204436863-2ebf34d1-4b16-486b-9e0a-add36f4c09c1.svg\"\u003e\n\u003c/span\u003e\n\u003cspan align=\"left\"\u003e\n\n🌟🌟\u0026nbsp; Please take a moment to read our [Code of Conduct][exercism-code-of-conduct]\u0026nbsp;🌟🌟\u0026nbsp;  \nIt might also be helpful to look at [Being a Good Community Member][being-a-good-community-member] \u0026 [The words that we use][the-words-that-we-use].\n\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;Some defined roles in our community: [Contributors][exercism-contributors] **|** [Mentors][exercism-mentors] **|** [Maintainers][exercism-track-maintainers] **|** [Admins][exercism-admins]\n\n\u003c/span\u003e\u003c/div\u003e\n\n\u003cbr\u003e\n\u003cimg align=\"left\" width=\"95\" height=\"90\" src=\"https://github.com/exercism/website-icons/blob/main/exercises/boutique-suggestions.svg\"\u003e\n\nHere to suggest a new feature or new exercise?? **Hooray!** \u0026nbsp;🎉 \u0026nbsp;  \nWe'd love if you did that via our [Exercism Community Forum][exercism-forum] where there is a [dedicated thread][odin-thread] for the new Odin track. \nPlease read [Suggesting Exercise Improvements][suggesting-improvements] \u0026 [Chesterton's Fence][chestertons-fence].  \n_Thoughtful suggestions will likely result in faster \u0026 more enthusiastic responses from volunteers._\n\n\u003cbr\u003e\n\u003cimg align=\"left\" width=\"85\" height=\"80\" src=\"https://github.com/exercism/website-icons/blob/main/exercises/word-search.svg\"\u003e\n\n✨\u0026nbsp;🦄\u0026nbsp; _**Want to jump directly into Exercism specifications \u0026 detail?**_  \n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;[Structure][exercism-track-structure] **|** [Tasks][exercism-tasks] **|** [Concepts][exercism-concepts] **|** [Concept Exercises][concept-exercises] **|** [Practice Exercises][practice-exercises] **|** [Presentation][exercise-presentation]  \n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;[Writing Style Guide][exercism-writing-style] **|** [Markdown Specification][exercism-markdown-specification] (_✨ version in [contributing][website-contributing-section] on exercism.org_)\n\n\u003cbr\u003e\n\u003cbr\u003e\n\n## Contributing an Exercise\nIf you are interested in contributing a new exercise, please have a look at [this issue][odin-backlog] to see which exercises are waiting on implementation.\nLeave a comment in the issue to notify other contributors which exercise you plan to implement.\n\nThe `bin/` subdirectory contains several scripts to help you contribute exercises that will run correctly on Exercism:\n\n- `configlet` is a tool to help track maintainers with the maintenance of their track.\n  Fetch it by running the `bin/fetch-configlet` script.\n  Run `bin/configlet lint` to verify that the track is properly structured.\n- `bin/fetch-ols-odinfmt.sh` will fetch the Odin language server (`ols`) that can assist with verifying Odin code directly in your IDE.\n  `odinfmt` is a tool that can format Odin code according to the specification in `odinfmt.json`.\n  Please run `odinfmt` before pushing your changes to the repository.\n  whenever new code is pushed to the repository.\n- `bin/format-all.sh` will run `odinfmt` on all `.odin` files in the repository.\n- `bin/run-test.sh` runs the tests for a specific exercise, or for all exercises if no exercise name is provided.\n- `bin/verify-exercises` checks the integrity of all exercises, including tests.\n  It is used by the build system whenever new code is pushed to the repository.\n- `bin/configlet` can be used to generate a new exercise. More details follow below.\n\n### Creating a New Exercise\n- Run `bin/configlet create --practice-exercise \u003cslug\u003e` to automatically generate the exercise skeleton in the `exercises/practice/\u003cslug\u003e/` directory and to update `config.json` to reference the new exercise.\n  You can add `--author \u003cyour_exercism_username\u003e` as option to mark yourself as the creator of this exercise (or add it later in the exercise's `.meta/config.json` file.)\n- Add a solution stub at the exercise's `\u003cslug\u003e.odin` file.\n  This is what students will begin with when they start the exercise. \n  It should make it as easy as possible to understand what they need to solve, without revealing too much of the solution.\n  Stub functions should usually panic, e.g. `#panic(\"Please implement the \u003cstub\u003e function.\")`.\n- Add tests to `\u003cslug\u003e_test.odin`.\n  Verify that the slug solution would fail _all_ tests.\n- Implement a reference solution at `.meta/\u003cslug\u003e_example.odin`.\n- Use `bin/run_test.sh \u003cslug\u003e` to verify that your reference solution passes.\n\n[being-a-good-community-member]: https://github.com/exercism/docs/tree/main/community/good-member\n[chestertons-fence]: https://github.com/exercism/docs/blob/main/community/good-member/chestertons-fence.md\n[concept-exercises]: https://github.com/exercism/docs/blob/main/building/tracks/concept-exercises.md\n[config-json]: https://github.com/exercism/odin/blob/main/config.json\n[exercise-presentation]: https://github.com/exercism/docs/blob/main/building/tracks/presentation.md\n[exercism-admins]: https://github.com/exercism/docs/blob/main/community/administrators.md\n[exercism-code-of-conduct]: https://exercism.org/docs/using/legal/code-of-conduct\n[exercism-concepts]: https://github.com/exercism/docs/blob/main/building/tracks/concepts.md\n[exercism-contributors]: https://github.com/exercism/docs/blob/main/community/contributors.md\n[exercism-forum]: https://forum.exercism.org/\n[exercism-markdown-specification]: https://github.com/exercism/docs/blob/main/building/markdown/markdown.md\n[exercism-mentors]: https://github.com/exercism/docs/tree/main/mentoring\n[exercism-tasks]: https://exercism.org/docs/building/product/tasks\n[exercism-track-maintainers]: https://github.com/exercism/docs/blob/main/community/maintainers.md\n[exercism-track-structure]: https://github.com/exercism/docs/tree/main/building/tracks\n[exercism-website]: https://exercism.org/\n[exercism-writing-style]: https://github.com/exercism/docs/blob/main/building/markdown/style-guide.md\n[freeing-maintainers]: https://exercism.org/blog/freeing-our-maintainers\n[practice-exercises]: https://github.com/exercism/docs/blob/main/building/tracks/practice-exercises.md\n[prs]: https://github.com/exercism/docs/blob/main/community/good-member/pull-requests.md\n[odin-backlog]: https://github.com/exercism/odin/issues/26\n[odin-release]: https://github.com/odin-lang/Odin/releases/tag/dev-2024-08\n[odin-syllabus]: https://exercism.org/tracks/odin/concepts\n[odin-thread]: https://forum.exercism.org/t/new-track-odin-programming-language/7379\n[suggesting-improvements]: https://github.com/exercism/docs/blob/main/community/good-member/suggesting-exercise-improvements.md\n[the-words-that-we-use]: https://github.com/exercism/docs/blob/main/community/good-member/words.md\n[website-contributing-section]: https://exercism.org/docs/building\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fexercism%2Fodin","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fexercism%2Fodin","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fexercism%2Fodin/lists"}