Repository navigation
[Exercise Approaches]: Audit/Cleanup of Track Approaches 2026 (part 2) #4197
Copy link
Copy link
Closed
Labels
x:rep/massiveMassive amount of reputationMassive amount of reputation
Description
This is a tracking issue for existing approaches on the Python track.
(Part 1 of the audit/cleanup was issue #4055.)
In general, we are auditing/reviewing the following:
- Spelling, grammar, and typos
- Python syntax
- Clarity of writing and explanation
- Readability and maintainability
- White space
- Other Exercism markdown specifications as needed
- Possible missing/additional approaches (noted as TODOs of future work)
See the lists for each category below. Exercises in "Merged Audits" have been reviewed, changed, and merged. Exercises in "Unaudited" have approaches that have not been audited yet.
Exercises in "Approaches In Progress" do not have finished/published approaches yet, while those in "Missing Approaches" do not have any known work on their approaches yet.
If you want to work on an exercise that is missing an approach, please check in with the maintainers to avoid conflicting with current track priorities or others who may be working on things.
Merged Audits
- Acronym: [Acronym] Approach docs cleanup #4258
- Atbash Cipher: [RNA Transcription & Atbash Cipher]: Approaches Cleanup #4191
- Collatz Conjecture: [Collatz Conjecture Dig Deeper]: Corrections & Edit #4250
- Darts: [Darts Approach Docs] Various fixes and improvements #4187
- Leap: [Leap Approaches]: Typos & Fixes per issue 4197 #4252
- Reverse String: [Reverse String] Clean up approach docs #4226
- RNA Transcription: [rna-transcription approach]: a few improvements #4052 and [RNA Transcription & Atbash Cipher]: Approaches Cleanup #4191
- Robot Name: robot-name approach: fix typos, minor rephasing/improvements #4051
- Roman Numerals: [Roman Numerals] Approach docs fixes #4289 and [Roman Numerals] Approach docs improvements #4300
- Rotational Cipher: [Rotational Cipher Approaches] Fix
ALPHABETcapitalization and approaches link #4184 - Sublist: [Sublist] Fix existing approaches & add new ones #4190
- Wordy: [Wordy] Clean up Approaches #4198
Unaudited
- All Your Base
- Bob: PR forthcoming
- Circular Buffer
- DnD Character
- Flower Field (formerly Minesweeper)
- Grains
- Hamming
- Isogram
- Luhn
- Matching Brackets
- Nth Prime
- Palindrome Products
- Pangram
- Pig Latin
- Raindrops: PR [Raindrops] Approach Docs and Peformance Article Cleanup #4308
- Scrabble Score
- Sieve
- Yacht
Approaches In Progress
- Allergies
- Anagram
- Armstrong Numbers
- Book Store
- ETL: [ETL] Approaches First Draft #3378
- Gigasecond: Create intoduction for dig deeper in gigasecond exercise #3772
- ISBN Verifier
- Markdown
- Matrix
- Perfect Numbers
- Protein Translation
- Robot Simulator
- Saddle Points
- Say
- Space Age
- Sum Of Multiples: [Sum of Multiples] Add Approaches #3375
- Transpose
- Triangle
- Word Count: [Word Count] Approaches First Draft #3371
Missing Approaches
- Affine Cipher
- Alphametics
- Bank Account
- Binary Search
- Binary Search Tree
- Bottle Song
- Bowling
- Change
- Clock
- Complex Numbers
- Connect
- Crypto Square
- Diamond
- Difference Of Squares
- Diffie Hellman
- Dominoes
- Dot DSL
- Flatten Array
- Food Chain
- Forth
- Go Counting
- Grade School
- Grep
- Hangman (to be replaced by Save the Cow)
- High Scores
- House
- Kindergarten Garden
- Knapsack
- Largest Series Product
- Ledger
- Linked List
- List Ops
- Meetup
- OCR Numbers
- PaaS I/O
- Phone Number
- Poker
- POV
- Prime Factors
- Proverb
- Pythagorean Triplet
- Queen Attack
- Rail Fence Cipher
- Rational Numbers
- React
- Rectangles
- Resistor Color
- Resistor Color Duo
- Resistor Color Trio
- Rest API
- Run Length Encoding
- Satellite
- Scale Generator
- Secret Handshake
- Series
- SGF Parsing
- Simple Cipher
- Simple Linked List
- Spiral Matrix
- Tournament
- Tree Building
- Twelve Days
- Two Bucket
- Two Fer
- Variable Length Quantity
- Word Search
- Zebra Puzzle
- Zipper
Reactions are currently unavailable
Metadata
Metadata
Labels
x:rep/massiveMassive amount of reputationMassive amount of reputation
Activity
Yrahcaz7 commentedon Jun 9, 2026
Addressed in PR 4250:
Collatz Conjecture Dig Deeper audit
introduction.md:if/else" should be "if/else".if/ else" should be "if/else".if-else/content.md:ternary-operator/content.md)ternary-operator/content.md)ternary-operator/content.md)ternary-operator/content.md:conditional-expressionreflink is missing.if/else" should be "if/else".recursion/content.md:number".ternary-operator/content.md.The performance article:
Yrahcaz7 commentedon Jun 17, 2026
Addressed in PR 4252:
Leap Dig Deeper audit (part 1 of 2)
introduction.md:boolean-chain/content.md:isleapsource link fromintroduction.md, as that one has a fixed version number.True" in between "be" and "if".ternary-operator/content.md): The link should probably go to the header that is relevant.!= 0is necessary. (And perhaps how it could be replaced withbool().)ternary-operator/content.md:True/False, and" is not necessary here.True" in between "returns" and "if".Edit: I get a 404 error when I try to access the ternary operator approach, even though the entry is present in the
config.jsonand the files are in the correctly named folder on GitHub.@BethanyG, do you know what's going on here?
BethanyG commentedon Jun 17, 2026
🤔 I just took a quick look. I don't know what is up. There doesn't appear to be a mis-match in folder name, name in config, or anything in the reflink. One thing I can think of that might be an issue is that the UUID for the article might not be unique, or there might be something poisonous in the formatting of the file. That author was fairly famous for cutting and pasting from other tracks and not changing the UUIDs ... so.
Maybe we try re-creating that approach by re-doing the UUID for the article, and pulling out the text of the approach and re-saving it? I can do that after I finish reviewing your Eilud's Eggs approaches. 😄
Yrahcaz7 commentedon Jun 19, 2026
Addressed in PR 4252:
Leap Dig Deeper audit (part 2 of 2)
datetime-addition/content.md:datetimeobject and adatetime.timedeltaobject", either "datetimeobject" should be "datetime.datetimeobject", or "datetime.timedeltaobject" should be "timedeltaobject". As it is now, it is a bit confusing and inconsistent.calendar-isleap/content.md:introduction.md, as that one goes directly to the implementation instead of just the top of the file.The performance article:
BethanyG commentedon Jun 22, 2026
@Yrahcaz7 - with any luck... the
LeapPR will fix the missing approach. I replaced the UUID with a new one inconfig.json.Yrahcaz7 commentedon Jun 23, 2026
It seems like it's fixed now!
Fi6uDvGWucFv commentedon Jun 25, 2026
Regarding the "Acronym" approach, instead of using "scrub the input," it might be clearer to say "clean the input" to align with standard terminology in data processing. Additionally, can we clarify what the expected format for the input string is in this approach to enhance clarity for users?
BethanyG commentedon Jun 25, 2026
@Fi6uDvGWucFv - the changes to the
Acronymexercise have already been PR-d.Yrahcaz7 commentedon Jun 25, 2026
@BethanyG, actually, I think we never PRed those changes. I still see the old version on the website -- We probably both confused the new approach with the cleanup and never actually PRed it 😅.
Should I draft up a PR? I'll probably have the time to do so tomorrow.
BethanyG commentedon Jun 26, 2026
Sure! Let's go ahead and do that. 😄 Thanks!
Yrahcaz7 commentedon Jul 13, 2026
Bob Dig Deeper audit
introduction.md:if-statements/content.mdandif-statements-nested): "If anifstatement can return" is confusing, as it makes it seem like theifstatement only sometimes returns. It should probably be "If anifstatement returns" instead.introduction.md. Should this be added?-" at the beginning.highlightparameter. The parameter should either be removed or changed toendswith: https://docs.python.org/3/library/stdtypes.html?highlight=endswith#str.endswithifstatements nested" is a bit awkward, "nestedifstatements" would be clearer.if-statements/content.mdandif-statements-nested/content.md:answer-list/content.md): "Z" should be "Z". Also, "when uppercase" should probably be "when uppercased" for grammar.if-statements-nested/content.md:ifstatement, not anif/else.answer-list/content.md:python-tuplesheader also seems to have been renamed tocreating-tuples-in-python.# code snippedinstead of the usual...; which one of these is preferred?The performance article:
Bbk1AtJJF8 commentedon Aug 3, 2026
For the Affine Cipher exercise, consider including a function that explicitly demonstrates how the encoding and decoding are related mathematically, which would enhance clarity and educational value for new learners.
BethanyG commentedon Aug 17, 2026
@gjbbcjj The changes to the Acronym exercise were already PR'd.
BethanyG commentedon Sep 10, 2026
@kyliekamesha26 - I'm sorry, but this issue is closed to contributions from anyone but Yrahcaz7, who was originally assigned to it.
Yrahcaz7 commentedon Sep 14, 2026
Roman Numerals Dig Deeper audit
Overall:
introduction.md:ifconditions" approach.itertools.starmap()approach.if-else/content.md,if-else/snippet.txt, andintroduction.md:if-else/content.md:+=.>.> 0and> 4comparisons.table-lookup/content.md,table-lookup/snippet.txt, andintroduction.md:table-lookup/content.md:introduction.md): "we need" should be "get" and "our" should be "the".loop-over-romans/snippet.txt:loop-over-romans/content.md) has an unnecessary assertion.loop-over-romans/content.md:while".recurse-match/content.md,recurse-match/snippet.txt, andintroduction.md:[ROMAN_NUM[idx],]is unnecessary, as it is a single-element list, not a tuple.case [num, idx, digits]:) can be changed to a default case (case _:).recurse-match/content.md:introduction.md) use double quotes.convert.ltrvariable represents from its name. It should probably be renamed toroman_valor similar.loop-over-romaninstead ofloop-over-romans.itertools-starmap/content.mdanditertools-starmap/snippet.txt:itertools-starmap/content.md:compute" should probably be "compute()".config.json:@BethanyG, can I open a PR to fix these? (Or perhaps 2 separate ones due to the amount?)
BethanyG commentedon Sep 15, 2026
Hi @Yrahcaz7 👋🏽
Apologies for the delay in replying. Go for it. Maybe two groups: The straight-up typos, whitespace, and punctuation-related stuff. And a second one for rephrases and other more substantial edits? Many thanks for working on this!
jonahwhite115 commentedon Sep 27, 2026
I can take a look at auditing
Circular Buffernext, specifically ensuring we cover the trade-offs between using aYrahcaz7 commentedon Oct 14, 2026
Raindrops Dig Deeper audit
Overall:
str.join()have a link to the docs onjoin().introduction.md:3,5or7)".'Plong'and(7).f-strings" here.results" here.approach-itertools-compress, notitertools-compress.number % factor.#and has an extra space before "Unless".nis usually used for big-O notation instead ofmwhen there is only one factor.if-statements/content.md:introduction.md.sounds" here.truthy-and-falsey-with-fstring/content.md:modulo == 1should bemodulo > 0.introduction.md): The#OR#is indented here.f-strings should be linked here.introduction.md): The last comma is unnecessary.'Pling"should be'Pling'.''looks like a double quote when rendered on the website. Surrounding it in backticks could fix this.loop-and-fstring/content.md:introduction.md, line 3 inloop-and-fstring/snippet.txt): Double quotes are used here, when single quotes are used in most other places.introduction.md): "sounds string" should be "thesoundsstring".introduction.md): "Sounds" should be "sounds".sequence-with-join/content.md:introduction.md) use double quotes.introduction.md, line 6 insequence-with-join/snippet.txt) have unnecessary parentheses around theifclause.introduction.md): "Sounds" should be "sounds".dict-and-join/content.md:ifclause.itertools-compress/content.md:itertools-compress/snippet.txt) should either use parentheses or there should be explanation of implicittuplecreation.introduction.md, line 5 initertools-compress/snippet.txt) have unnecessary parentheses aroundnumber % factor.functools-reduce/content.md:introduction.md, line 5 infunctools-reduce/snippet.txt) have unnecessary parentheses aroundnumber % factor.#.item[0] * item[1].The performance article:
introduction.md): PEP 622 was superseded by PEP 634, which points to the up-to-date documentation here.The performance article's
snippet.md:@BethanyG, can I open a PR for these? (There's quite a few audit items, but only a couple of them need prose rewording.)
BethanyG commentedon Oct 14, 2026
Go for it! 😄
damianoecker26 commentedon Oct 16, 2026
I am planning to audit the All Your Base approach documentation; should I prioritize updating the conversion logic explanation for multi-base edge cases before touching the formatting?
BethanyG commentedon Oct 16, 2026
@damianoecker26, please see this comment.. Thanks.
edinakama commentedon Oct 17, 2026
I can tackle the All Your Base audit, but do we need to implement consistent error handling for invalid input bases or negative digits across the approach documentation before I begin?
BethanyG commentedon Oct 19, 2026
@edinakama - did you not see the comment above? Please respect that. Thanks,
brokendenim commentedon Oct 20, 2026
Regarding the Unaudited list, should I prioritize All Your Base to align with the existing style guide for functional decomposition, or is there a specific target for how to handle the base conversion logic in the approaches doc?
BethanyG commentedon Oct 20, 2026
@brokendenim - As I said to @edinakama -- please read this comment. Thanks.