Skip to content

rename exercise to pythagorean-triplet#454

Merged
BNAndras merged 3 commits intoexercism:mainfrom
keiravillekode:exercise-rename
Apr 13, 2026
Merged

rename exercise to pythagorean-triplet#454
BNAndras merged 3 commits intoexercism:mainfrom
keiravillekode:exercise-rename

Conversation

@keiravillekode
Copy link
Copy Markdown
Contributor

@BNAndras
Copy link
Copy Markdown
Member

Have we checked whether renaming a slug causes issues or not for Exercism? I know you’re not supposed to change the exercise uuids once they’re in the system.

@IsaacG
Copy link
Copy Markdown
Member

IsaacG commented Apr 13, 2026

I think you need to deprecate the old exercise and create a new one with new IDs

@keiravillekode
Copy link
Copy Markdown
Contributor Author

Deprecating, and creating a new exercise, can work more smoothly for students who have already solved the exercise: they will simply see an exercise they have completed, and a new exercise Available.

Otherwise, I think they see their solution is failing, that previously succeeded. When they open the exercise, they find an empty pythagorean-triplet.rkt, and a (no longer relevant) pythagorean-triplets.rkt

@keiravillekode
Copy link
Copy Markdown
Contributor Author

I asked Claude to look for past renames that retained the uuid, excluding pop-count rename to eliuds-eggs.


     Results: 122 unique slug renames found

     1. bracket-push -> matching-brackets (30 repos)

     The most widespread rename. Happened in: c, clojure, cpp, crystal, csharp,
     dart, delphi, elixir, elm, erlang, fsharp, go, haskell, java, javascript,
     kotlin, lua, nim, objective-c, ocaml, pharo-smalltalk, php, purescript,
     python, ruby, rust, scala, sml, swift, typescript.

     2. resistor-colors -> resistor-color-duo (5 repos)

     Happened in: haskell, javascript, pharo-smalltalk, python, ruby. Plus Python
     had additional churn: resistor-color-duo -> resistor-color-trio ->
     resistor-color-master -> resistor-color-expert. Batch had a typo fix:
     resistor-code -> resistor-color.

     3. elons-toys -> jedliks-toys (3 repos)

     Renamed to remove Elon Musk reference. Happened in: csharp, go, java (as
     elons-toy-car -> jedliks-toy-car). In Java, the exercise was first renamed
     from classes -> elons-toy-car, then later elons-toy-car -> jedliks-toy-car.

     4. Concept exercise slug -> story-based slug (large pattern)

     Many tracks renamed concept exercises from generic concept names to
     story/theme-based names:

     ┌─────────────────┬────────────────────────┬────────────────────────────────┐
     │      Repo       │        Old slug        │            New slug            │
     ├─────────────────┼────────────────────────┼────────────────────────────────┤
     │ java            │ basics                 │ lasagna-cooking (then lasagna) │
     ├─────────────────┼────────────────────────┼────────────────────────────────┤
     │ java            │ booleans               │ annalyns-infiltration          │
     ├─────────────────┼────────────────────────┼────────────────────────────────┤
     │ java            │ strings                │ log-levels                     │
     ├─────────────────┼────────────────────────┼────────────────────────────────┤
     │ java            │ numbers                │ cars-assemble                  │
     ├─────────────────┼────────────────────────┼────────────────────────────────┤
     │ java            │ conditionals           │ blackjack                      │
     ├─────────────────┼────────────────────────┼────────────────────────────────┤
     │ java            │ chars                  │ squeaky-clean                  │
     ├─────────────────┼────────────────────────┼────────────────────────────────┤
     │ java            │ switch-statement       │ football-match-reports         │
     ├─────────────────┼────────────────────────┼────────────────────────────────┤
     │ java            │ ternary-operators      │ salary-calculator              │
     ├─────────────────┼────────────────────────┼────────────────────────────────┤
     │ java            │ inheritance            │ wizards-and-warriors           │
     ├─────────────────┼────────────────────────┼────────────────────────────────┤
     │ java            │ interfaces             │ remote-control-competition     │
     ├─────────────────┼────────────────────────┼────────────────────────────────┤
     │ java            │ constructors           │ need-for-speed                 │
     ├─────────────────┼────────────────────────┼────────────────────────────────┤
     │ javascript      │ basics                 │ lasagna                        │
     ├─────────────────┼────────────────────────┼────────────────────────────────┤
     │ javascript      │ booleans               │ annalyns-infiltration          │
     ├─────────────────┼────────────────────────┼────────────────────────────────┤
     │ javascript      │ numbers                │ freelancer-rates               │
     ├─────────────────┼────────────────────────┼────────────────────────────────┤
     │ javascript      │ strings                │ poetry-club-door-policy        │
     ├─────────────────┼────────────────────────┼────────────────────────────────┤
     │ javascript      │ closures               │ coordinate-transformation      │
     ├─────────────────┼────────────────────────┼────────────────────────────────┤
     │ javascript      │ recursion              │ pizza-order                    │
     ├─────────────────┼────────────────────────┼────────────────────────────────┤
     │ javascript      │ promises               │ translation-service            │
     ├─────────────────┼────────────────────────┼────────────────────────────────┤
     │ cpp             │ strings                │ log-levels                     │
     ├─────────────────┼────────────────────────┼────────────────────────────────┤
     │ go              │ basics                 │ lasagna                        │
     ├─────────────────┼────────────────────────┼────────────────────────────────┤
     │ go              │ zero-zilch-nada        │ census                         │
     ├─────────────────┼────────────────────────┼────────────────────────────────┤
     │ kotlin          │ basics                 │ lucians-luscious-lasagna       │
     ├─────────────────┼────────────────────────┼────────────────────────────────┤
     │ purescript      │ booleans               │ annalyns-infiltration          │
     ├─────────────────┼────────────────────────┼────────────────────────────────┤
     │ ruby            │ strings                │ log-line-parser                │
     ├─────────────────┼────────────────────────┼────────────────────────────────┤
     │ ruby            │ numbers                │ assembly-line                  │
     ├─────────────────┼────────────────────────┼────────────────────────────────┤
     │ ruby            │ arrays                 │ bird-count                     │
     ├─────────────────┼────────────────────────┼────────────────────────────────┤
     │ ruby            │ floating-point-numbers │ savings-account                │
     ├─────────────────┼────────────────────────┼────────────────────────────────┤
     │ ruby            │ instance-variables     │ amusement-park                 │
     ├─────────────────┼────────────────────────┼────────────────────────────────┤
     │ ruby            │ amusement_park_rides   │ amusement-park-improvements    │
     ├─────────────────┼────────────────────────┼────────────────────────────────┤
     │ rust            │ enums                  │ semi-structured-logs           │
     ├─────────────────┼────────────────────────┼────────────────────────────────┤
     │ rust            │ numbers                │ assembly-line                  │
     ├─────────────────┼────────────────────────┼────────────────────────────────┤
     │ rust            │ structs                │ health-statistics              │
     ├─────────────────┼────────────────────────┼────────────────────────────────┤
     │ rust            │ options                │ role-playing-game              │
     ├─────────────────┼────────────────────────┼────────────────────────────────┤
     │ rust            │ tuples                 │ low-power-embedded-game        │
     ├─────────────────┼────────────────────────┼────────────────────────────────┤
     │ rust            │ vec-macro              │ short-fibonacci                │
     ├─────────────────┼────────────────────────┼────────────────────────────────┤
     │ rust            │ entry-api              │ magazine-cutout                │
     ├─────────────────┼────────────────────────┼────────────────────────────────┤
     │ x86-64-assembly │ basics                 │ lasagna                        │
     ├─────────────────┼────────────────────────┼────────────────────────────────┤
     │ jq              │ basics                 │ shopping                       │
     ├─────────────────┼────────────────────────┼────────────────────────────────┤
     │ unison          │ counter                │ usher                          │
     └─────────────────┴────────────────────────┴────────────────────────────────┘

     5. retree -> satellite (2 repos)

     Happened in: prolog, python.

     6. Typo/spelling fixes

     ┌─────────┬────────────────────┬────────────────────┐
     │  Repo   │      Old slug      │      New slug      │
     ├─────────┼────────────────────┼────────────────────┤
     │ sqlite  │ collatz-conjucture │ collatz-conjecture │
     ├─────────┼────────────────────┼────────────────────┤
     │ swift   │ bomb-diffuser      │ bomb-defuser       │
     ├─────────┼────────────────────┼────────────────────┤
     │ batch   │ resistor-code      │ resistor-color     │
     ├─────────┼────────────────────┼────────────────────┤
     │ cfml    │ hello_world        │ hello-world        │
     ├─────────┼────────────────────┼────────────────────┤
     │ fortran │ hello_world        │ hello-world        │
     └─────────┴────────────────────┴────────────────────┘

     7. Other notable individual renames

     ┌──────────┬───────────────────────┬─────────────────────────┬───────────────┐
     │   Repo   │       Old slug        │        New slug         │    Reason     │
     ├──────────┼───────────────────────┼─────────────────────────┼───────────────┤
     │ elm      │ luigis-luscious-lasag │ marios-marvellous-lasag │ Character     │
     │          │ na                    │ na                      │ rename        │
     ├──────────┼───────────────────────┼─────────────────────────┼───────────────┤
     │ swift    │ master-mixologist     │ expert-mixologist       │ Removed       │
     │          │                       │                         │ "master"      │
     ├──────────┼───────────────────────┼─────────────────────────┼───────────────┤
     │ rust     │ twofer                │ two-fer                 │ Standardize   │
     │          │                       │                         │ slug format   │
     ├──────────┼───────────────────────┼─────────────────────────┼───────────────┤
     │ rust     │ linked-list           │ doubly-linked-list      │ More precise  │
     │          │                       │                         │ name          │
     ├──────────┼───────────────────────┼─────────────────────────┼───────────────┤
     │ groovy   │ linked-list           │ double-linked-list      │ More precise  │
     │          │                       │                         │ name          │
     ├──────────┼───────────────────────┼─────────────────────────┼───────────────┤
     │ julia    │ leap                  │ leap-year / leap-years  │ Rename        │
     │          │                       │                         │ attempts      │
     ├──────────┼───────────────────────┼─────────────────────────┼───────────────┤
     │ euphoria │ pythagorean-triplets  │ pythagorean-triplet     │ Singular form │
     ├──────────┼───────────────────────┼─────────────────────────┼───────────────┤
     │ python   │ elyses-enchantments   │ card-games              │ Story rename  │
     ├──────────┼───────────────────────┼─────────────────────────┼───────────────┤
     │ python   │ processing-logs       │ little-sisters-vocab    │ Story rename  │
     ├──────────┼───────────────────────┼─────────────────────────┼───────────────┤
     │ awk      │ fundamentals          │ basics                  │ Pick up       │
     │          │                       │                         │ exercise icon │
     ├──────────┼───────────────────────┼─────────────────────────┼───────────────┤
     │ ballerin │ echo-world-service    │ echo-service            │ Simplificatio │
     │ a        │                       │                         │ n             │
     └──────────┴───────────────────────┴─────────────────────────┴───────────────┘

     8. UUID reuse mistakes (not true renames)

     Some repos accidentally reused a UUID when adding a new exercise, then fixed
     it later:
     - gleam: lasagna -> pacman-rules (UUID collision, later corrected)
     - unison: rna-transcription -> scale-generator, acronym -> armstrong-numbers
     (UUID fixes)
     - wren: circular-buffer -> queen-attack (UUID fix)
     - swift: collatz-conjecture -> diamond (UUID collision)
     - zig: secret-handshake -> isogram (UUID reuse)
     - elm: binary-search -> binary-search-dupicate, isogram -> isogram-duplicate
     (fixing renamed UUIDs)

@BNAndras BNAndras added x:action/fix Fix an issue x:module/practice-exercise Work on Practice Exercises labels Apr 13, 2026
@BNAndras BNAndras merged commit 1cd4d05 into exercism:main Apr 13, 2026
5 checks passed
@keiravillekode keiravillekode deleted the exercise-rename branch April 13, 2026 19:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

x:action/fix Fix an issue x:module/practice-exercise Work on Practice Exercises

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants