Closed cmccandless closed 2 years ago
There are 2 questions here:
Should we maintain common topics for exercises? I'm not sure that a common store of topics for a problem is a good idea. (I'd be happy to be convinced it is.) Topics tend to be very implementation specific. Are Haskel and NASM (or pick 2 other vastly different languages) going to agree on many?
Should we store common topics in canonical-data.json
- No
canonical-data.json
should not include topics, it should only be for common test data.
metadata.yml
maybe.
One can imagine some topics that arise from the specification alone, rather than being implementation dependent. If, say, it was determined that primality
should be a topic, one might imagine that nth-prime, prime-factors, and sieve would all have that topic.
I'm not sure that a common store of topics for a problem is a good idea.
I agree. Although it is tempting, there will probably be lots of cases where the actual topics differ between languages. I'd rather have the languages decide for themselves.
No canonical-data.json should not include topics, it should only be for common test data.
Agreed.
It should be easy to make a tool that queries all track config.json
s and show the topics assigned to each exercise and how many times they are used.
Languages need some flexibility to decide for themselves, especially for language specific features. That being said there are obvious cross track-choices for some exercises so perhaps it could be seeded in the specifications.
Even when a track implements a specification, they may develop a solution that differs from how users will implement their solution.
So even track maintainers themselves cannot determine what topics a user will consider when developing a solution.
Modified @tleen's exercism-config-visualizations program (my fork here) to get a a list of all exercises, topics that appear in them, and the frequency of the topic. Enjoy :)
Exercise | Topics and frequencies |
---|---|
queen-attack | mathematics: 5, games: 4, logic: 4, classes: 2, optional values: 2, equality: 2, parsing: 2, tuples: 2, arrays: 2, matrices: 2, exception handling: 1, control_flow_loops: 1, text formatting: 1, control_flow_if_statements: 1, structs: 1, booleans: 1, errors: 1, functions: 1, control-flow (conditionals): 1, maybe: 1, control-flow (loops): 1, conditionals: 1, enums: 1, control-flow-(conditionals): 1, control-flow-(loops): 1, exception-handling: 1, optional-values: 1, text-formatting: 1, integers: 1, exception_handling: 1, struct: 1, trait (optional): 1, result: 1, strings: 1 |
roman-numerals | transforming: 9, strings: 7, mathematics: 5, control_flow_loops: 4, recursion: 3, integers: 3, loops: 3, text_formatting: 2, logic: 2, control-flow (loops): 2, maybe: 1, structs: 1, pattern recognition: 1, memory_management: 1, numbers: 1, metaprogramming: 1, string_manipulation: 1, arrays: 1, string manipulation: 1, conversions: 1, functional: 1, maps: 1, control_flow_conditionals: 1, control-flow (conditionals): 1, control-flow-(conditionals): 1, control-flow-(loops): 1, pattern-recognition: 1, conditionals: 1, mutable: 1, results: 1, struct: 1, traits: 1, sequences: 1, algorithms: 1 |
word-count | strings: 18, maps: 7, transforming: 7, control_flow_loops: 3, lists: 3, filtering: 2, dictionaries: 2, unicode: 2, parsing: 1, entry api: 1, structs: 1, arrays: 1, reduce: 1, control-flow (loops): 1, memory_management: 1, regular expressions: 1, string_comparison: 1, regular_expressions: 1, conditionals: 1, integers: 1, loops: 1, control_flow_conditionals: 1, control-flow-(loops): 1, regular-expressions: 1, counting: 1, algorithms: 1, logic: 1, pattern_recognition: 1, text_formatting: 1, hashmap: 1, str vs string: 1, chars: 1, sorting: 1 |
allergies | bitwise_operations: 9, filtering: 8, enumerations: 5, lists: 3, bitwise operations: 2, arrays: 2, integers: 2, control_flow_loops: 2, control_flow_conditionals: 2, control_flow_if_statements: 1, memory_management: 1, enumeration: 1, booleans: 1, conditionals: 1, control-flow (conditionals): 1, control-flow (loops): 1, loops: 1, structs: 1, text_formatting: 1, bitwise-operations: 1, control-flow-(conditionals): 1, control-flow-(loops): 1, control_flow_if_else_statements: 1, classes: 1, mathematics: 1, struct: 1, enum: 1, bitwise (probably): 1, vectors: 1, filter: 1 |
robot-simulator | strings: 5, classes: 4, tuples: 4, enumerations: 3, loops: 3, structs: 2, games: 2, parsing: 2, records: 2, concurrency: 1, control_flow_if_statements: 1, variable_argument_lists: 1, control-flow (conditionals): 1, control-flow (loops): 1, pointers: 1, exception handling: 1, sequences: 1, define type: 1, logic: 1, control-flow-(conditionals): 1, control-flow-(loops): 1, exception-handling: 1, exception_handling: 1, oop: 1, algorithms: 1, conditionals: 1, variables: 1, immutability: 1, enum: 1 |
crypto-square | transforming: 11, strings: 11, algorithms: 6, text_formatting: 5, arrays: 4, lists: 2, security: 2, filtering: 2, cryptography: 2, control_flow_loops: 2, sorting: 2, control-flow-(loops): 1, text formatting: 1, control-flow (loops): 1, control-flow (conditionals): 1, mathematics: 1, classes: 1, control_flow_conditionals: 1, string manipulation: 1, control-flow-(conditionals): 1, regular expressions: 1, regular-expressions: 1, text-formatting: 1, looping: 1, str vs string: 1, primitive types: 1, iterators: 1, chars: 1, ascii: 1 |
triangle | mathematics: 13, integers: 8, booleans: 3, discriminated_unions: 3, classes: 3, enumerations: 2, control_flow_if_else_statements: 2, control_flow_conditionals: 2, conditionals: 2, exception_handling: 2, exception handling: 1, control-flow (if-statements): 1, control-flow (loops): 1, control-flow (conditionals): 1, input_validation: 1, number_comparison: 1, boolean_logic: 1, logic: 1, number theory: 1, structs: 1, language basics: 1, filtering: 1, floating_point_numbers: 1, control-flow-(conditionals): 1, control-flow-(loops): 1, exception-handling: 1, pattern_matching: 1, object_oriented_programming: 1, struct: 1 |
atbash-cipher | strings: 13, algorithms: 9, transforming: 9, cryptography: 3, control_flow_loops: 3, arrays: 2, security: 2, control-flow (conditionals): 1, control-flow (loops): 1, control_flow_if_else_statements: 1, regular expressions: 1, text formatting: 1, ascii: 1, control_flow_conditionals: 1, pattern_matching: 1, control-flow-(conditionals): 1, control-flow-(loops): 1, regular-expressions: 1, text-formatting: 1, text_formatting: 1, maps: 1, conditionals: 1, loops: 1, str vs string: 1, primitive types: 1, iterators: 1, chars: 1, sequences: 1 |
nucleotide-count | strings: 12, maps: 8, parsing: 4, control_flow_loops: 3, dictionaries: 2, exception_handling: 2, control_flow_loops_switch_if_statements: 1, memory_management: 1, classes: 1, associative arrays: 1, enumerables: 1, match: 1, string_processing: 1, string_comparison: 1, conditionals: 1, text_formatting: 1, integers: 1, searching: 1, sorting: 1, counting: 1, lists: 1, transforming: 1, result: 1, filter: 1, entry api: 1, mutablity: 1, either: 1 |
largest-series-product | strings: 11, integers: 11, transforming: 7, mathematics: 4, loops: 2, control_flow_loops: 2, control-flow-(loops): 1, control-flow (loops): 1, exception handling: 1, regular expressions: 1, algorithms: 1, sequences: 1, maybe: 1, performance_optimizations: 1, type_conversion: 1, control-flow-(conditionals): 1, control-flow (conditionals): 1, exception-handling: 1, regular-expressions: 1, exception_handling: 1, logic: 1, conditionals: 1, result: 1, windows: 1, higher-order functions: 1, char: 1, optional values: 1 |
wordy | parsing: 10, strings: 9, transforming: 7, mathematics: 2, regular_expressions: 2, pattern_matching: 2, logic: 2, type_conversion: 2, integers: 2, control-flow-(loops): 1, conditionals: 1, maybe: 1, exception_handling: 1, exception handling: 1, regular expressions: 1, control-flow (loops): 1, control-flow-(conditionals): 1, pattern recognition: 1, exception-handling: 1, pattern-recognition: 1, regular-expressions: 1, control-flow (conditionals): 1, result: 1, string parsing: 1, operators (optional): 1, optional values: 1 |
pythagorean-triplet | mathematics: 10, integers: 6, algorithms: 4, records: 2, lists: 2, logic: 2, tuples: 2, number theory: 1, integer: 1, control-flow (conditionals): 1, control-flow (loops): 1, control-flow-(conditionals): 1, control-flow-(loops): 1, sequences: 1, control_flow_loops: 1, conditionals: 1, equality: 1, loops: 1, variables: 1, enumerations: 1, sets: 1, overloading: 1, filtering: 1, searching: 1, option: 1, control_flow_if_else_statements: 1 |
meetup | dates: 12, time: 4, control_flow_if_statements: 2, strings: 2, equality: 2, conditionals: 2, interfaces: 1, pattern_recognition: 1, control-flow (conditionals): 1, control-flow (loops): 1, exception handling: 1, structs: 1, time_functions: 1, preprocessor_x_macros_in_test: 1, type_conversion: 1, functions: 1, enumerations: 1, loops: 1, control_flow_conditionals: 1, filtering: 1, control-flow-(conditionals): 1, control-flow-(loops): 1, exception-handling: 1, control_flow_loops: 1, parsing: 1, transforming: 1 |
pangram | strings: 17, searching: 4, algorithms: 3, control_flow_loops: 3, lists: 2, maps: 2, control_flow_if_else_statements: 2, loops: 2, regular_expressions: 2, control-flow (loops): 1, string_transformation: 1, language basics: 1, string manipulation: 1, control-flow: 1, enumerations: 1, pattern_matching: 1, control-flow (conditionals): 1, control-flow-(conditionals): 1, control-flow-(loops): 1, transforming: 1, conditionals: 1, filtering: 1, logic: 1, filter: 1, ascii (optional): 1 |
series | strings: 11, arrays: 6, transforming: 4, lists: 3, conditionals: 2, loops: 2, text_formatting: 1, string manipulation: 1, string_processing: 1, control-flow (loops): 1, exception handling: 1, text formatting: 1, memory_management: 1, refactoring: 1, control_flow_if_statements: 1, logic: 1, type_conversion: 1, control-flow-(loops): 1, exception-handling: 1, text-formatting: 1, control_flow_loops: 1, coroutines: 1, algorithms: 1, vectors: 1, sequences: 1 |
hamming | strings: 17, filtering: 9, control_flow_loops: 5, equality: 4, loops: 3, error handling: 1, control-flow (foreach): 1, control-flow (loops): 1, control-flow (conditionals): 1, optional values: 1, arrays: 1, maybe: 1, string_comparison: 1, control_flow_conditionals: 1, control-flow-(conditionals): 1, control-flow-(loops): 1, iterating_over_two_lists_at_once: 1, conditionals: 1, sequences: 1, sets: 1, algorithms: 1, logic: 1, result: 1, integers: 1 |
ocr-numbers | parsing: 9, strings: 5, pattern_recognition: 5, lists: 3, equality: 2, integers: 2, transforming: 2, enumerations: 1, pattern recognition: 1, text formatting: 1, exception_handling: 1, control-flow (conditionals): 1, control-flow (loops): 1, control-flow-(conditionals): 1, control-flow-(loops): 1, exception-handling: 1, text-formatting: 1, control_flow_loops: 1, algorithms: 1, exception handling: 1, lines: 1, chunks: 1, slices: 1, loops: 1 |
secret-handshake | bitwise_operations: 8, arrays: 5, lists: 5, integers: 3, bitwise operations: 2, algorithms: 2, conditionals: 2, games: 2, loops: 2, mathematics: 2, transforming: 2, cryptography: 1, control-flow (conditionals): 1, control-flow (loops): 1, strings: 1, binary_representation: 1, bitwise-operations: 1, control-flow-(conditionals): 1, control-flow-(loops): 1, control_flow_if_else_statements: 1, logic: 1, bitwise__operations: 1, control_flow_conditionals: 1, enumerations: 1 |
custom-set | sets: 9, equality: 4, lists: 3, arrays: 2, recursion: 2, generics: 2, data structures: 1, struct: 1, filtering: 1, loops: 1, define type: 1, control-flow (conditionals): 1, control-flow (loops): 1, control-flow-(conditionals): 1, control-flow-(loops): 1, data-structures: 1, classes: 1, control_flow_if_else_statements: 1, control_flow_loops: 1, functional_programming: 1, generic over type: 1, vector: 1, library reimplementation: 1 |
kindergarten-garden | enumerations: 5, strings: 5, arrays: 4, parsing: 4, lists: 2, control-flow (conditionals): 1, text formatting: 1, records: 1, searching: 1, structs: 1, control-flow (loops): 1, transforming: 1, loops: 1, pattern_recognition: 1, control-flow-(conditionals): 1, control-flow-(loops): 1, text-formatting: 1, control_flow_if_else_statements: 1, control_flow_loops: 1, classes: 1, optional_values: 1, variables: 1, logic: 1 |
clock | time: 11, classes: 4, structural_equality: 4, text_formatting: 3, logic: 3, integers: 2, strings: 2, structural equality: 2, dates: 2, globalization: 2, equality: 2, mathematics: 2, transforming: 1, protocols: 1, structs: 1, preprocessor_x_macros_in_test: 1, define type: 1, instance num: 1, object_oriented_programming: 1, control_flow_if_statements: 1, traits: 1, derive: 1, struct: 1 |
sieve | mathematics: 14, filtering: 8, integers: 5, control_flow_loops: 3, algorithms: 3, loops: 3, lists: 3, recursion: 2, sorting: 1, control-flow (loops): 1, control_flow_if_statements: 1, memory_management: 1, number theory: 1, control-flow (conditionals): 1, control_flow_conditionals: 1, maps: 1, control-flow-(conditionals): 1, control-flow-(loops): 1, control_flow_if_else_statements: 1, conditionals: 1, vector: 1, map: 1, while let (optional): 1 |
all-your-base | integers: 10, transforming: 7, mathematics: 7, arrays: 3, control_flow_loops: 2, parsing: 2, control-flow (loops): 1, exception handling: 1, optional values: 1, control-flow (conditionals): 1, maybe: 1, control_flow_if_else_statements: 1, exception_handling: 1, loops: 1, control-flow-(conditionals): 1, control-flow-(loops): 1, exception-handling: 1, result: 1, enumerate: 1, fold: 1, map: 1, lists: 1, conditionals: 1 |
run-length-encoding | algorithms: 9, strings: 8, transforming: 8, parsing: 3, text_formatting: 3, text formatting: 1, regular expressions: 1, pattern recognition: 1, control-flow (conditionals): 1, integers: 1, pattern_matching: 1, exception handling: 1, exception-handling: 1, pattern-recognition: 1, regular-expressions: 1, text-formatting: 1, control_flow_if_else_statements: 1, control_flow_loops: 1, loop: 1, string concatenation: 1, conversion between string and int: 1, use of primitive char: 1, control-flow-(conditionals): 1 |
say | strings: 9, text_formatting: 7, transforming: 7, loops: 3, parsing: 3, mathematics: 2, integers: 2, text formatting: 2, numbers: 1, exception handling: 1, control-flow (conditionals): 1, control-flow (loops): 1, maybe: 1, control-flow-(conditionals): 1, control-flow-(loops): 1, exception-handling: 1, text-formatting: 1, control_flow_loops: 1, logic: 1, pattern_matching: 1, string concatenation: 1, modulus: 1, optional values: 1 |
pascals-triangle | mathematics: 14, lists: 4, recursion: 4, arrays: 3, control_flow_loops: 3, algorithms: 2, control-flow (loops): 2, strings: 2, integers: 2, control-flow (conditionals): 1, control_flow_if_else_statements: 1, memory_management: 1, number theory: 1, exception_handling: 1, text formatting: 1, matrices: 1, sequences: 1, control-flow-(conditionals): 1, control-flow-(loops): 1, text-formatting: 1, control_flow_conditionals: 1, vec: 1, index (optional): 1 |
bob | strings: 17, control_flow_if_else_statements: 6, control_flow_conditionals: 4, conditionals: 3, parsing: 2, polymorfism: 2, unicode: 2, control-flow (if-else statements): 2, control-flow (conditionals): 1, pattern matching: 1, string manipulation: 1, control-flow (if-statements): 1, regular expressions: 1, control_flow: 1, booleans: 1, control-flow-(conditionals): 1, pattern-recognition: 1, regular-expressions: 1, string_processing: 1, equality: 1, chars: 1, string functions: 1, pattern recognition: 1 |
robot-name | randomness: 17, strings: 11, classes: 3, text_formatting: 3, regular_expressions: 2, pattern_matching: 2, sets: 2, control-flow-(conditionals): 1, regular expressions: 1, io monad: 1, random: 1, exception handling: 1, control-flow (conditionals): 1, random numbers: 1, variables: 1, define type: 1, exception-handling: 1, regular-expressions: 1, mutable_state: 1, struct: 1, slices: 1, lifetimes: 1, self mut: 1 |
matrix | matrices: 9, arrays: 5, parsing: 4, strings: 3, type_conversion: 3, integers: 2, loops: 2, control-flow (conditionals): 1, text formatting: 1, exception_handling: 1, structs: 1, string_processing: 1, define type: 1, data structures: 1, control-flow (loops): 1, pattern_matching: 1, control-flow-(conditionals): 1, control-flow-(loops): 1, data-structures: 1, text-formatting: 1, control_flow_loops: 1, vectors: 1 |
binary-search | searching: 11, arrays: 9, algorithms: 7, recursion: 4, lists: 4, control_flow_loops: 2, control_flow_if_else_statements: 2, control-flow (conditionals): 1, control-flow (loops): 1, sorting: 1, collections: 1, optional values: 1, control-flow-(conditionals): 1, control-flow-(loops): 1, integers: 1, search: 1, conditionals: 1, loops: 1, slices: 1, trait (optional): 1, option: 1, generics: 1 |
simple-cipher | strings: 9, algorithms: 7, transforming: 7, mathematics: 3, randomness: 3, cryptography: 3, control-flow (loops): 1, optional values: 1, encryption: 1, text formatting: 1, string_processing: 1, control-flow (conditionals): 1, io monad: 1, random: 1, mutable state: 1, exception_handling: 1, security: 1, control-flow-(conditionals): 1, control-flow-(loops): 1, text-formatting: 1, text_formatting: 1, interfaces: 1 |
protein-translation | strings: 10, transforming: 3, algorithms: 3, control-flow-(conditionals): 3, control-flow-(loops): 3, lists: 2, sequences: 2, pattern_matching: 2, control_flow_if_else_statements: 1, string_processing: 1, maps: 1, pattern matching: 1, arrays: 1, conditionals: 1, loops: 1, filtering: 1, control_flow_loops: 1, exception_handling: 1, struct: 1, hash map: 1, lifetimes: 1, result: 1 |
beer-song | strings: 13, text_formatting: 7, algorithms: 4, conditionals: 4, loops: 3, control_flow_loops: 3, control_flow_conditionals: 2, control_flow_if_else_statements: 2, text formatting: 2, looping: 2, control-flow (conditionals): 1, variables: 1, integers: 1, control-flow-(conditionals): 1, control-flow-(loops): 1, control-flow (loops): 1, refactoring: 1, case: 1, string concatenation: 1, vector (optional): 1, loop: 1, control-flow: 1 |
phone-number | parsing: 11, strings: 10, transforming: 10, regular_expressions: 4, conditionals: 3, text_formatting: 2, control_flow_if_else_statements: 2, pattern_matching: 2, control_flow_conditionals: 1, control_flow_loops: 1, string_comparison: 1, string_manipulation: 1, maybe: 1, memory_management: 1, interfaces: 1, option: 1, format: 1, unwrap_or: 1, iters: 1, match: 1, optional values: 1 |
space-age | floating_point_numbers: 9, mathematics: 6, classes: 3, discriminated_unions: 3, functions: 2, floating-point numbers: 2, conditionals: 2, if_else_statements: 1, pattern_matching: 1, interfaces: 1, domain-specific languages: 1, floating-point-numbers: 1, arithmetic: 1, floats: 1, integers: 1, custom trait: 1, from trait: 1, default trait implementation: 1, dates: 1, enumerations: 1, transforming: 1 |
binary-search-tree | trees: 9, searching: 8, algorithms: 5, recursion: 5, sorting: 2, generics: 2, define type: 1, optional_values: 1, control-flow (conditionals): 1, structs: 1, control-flow (loops): 1, maybe: 1, overloading: 1, graphs: 1, control-flow-(conditionals): 1, control-flow-(loops): 1, coroutines: 1, exception_handling: 1, classes: 1, object_oriented_programming: 1, lists: 1 |
linked-list | lists: 9, algorithms: 5, generics: 3, classes: 2, arrays: 2, optional values: 2, control-flow (conditionals): 1, control-flow (loops): 1, conditionals: 1, define type: 1, data structures: 1, library reimplementation: 1, maybe: 1, mutable state: 1, control-flow-(conditionals): 1, control-flow-(loops): 1, data-structures: 1, optional-values: 1, control_flow_if_else_statements: 1, control_flow_loops: 1, io monad: 1 |
saddle-points | matrices: 9, lists: 5, mathematics: 4, integers: 4, sets: 3, arrays: 3, conditionals: 2, parsing: 2, equality: 2, loops: 2, tuples: 2, control-flow (conditionals): 1, searching: 1, exception handling: 1, optional values: 1, control-flow (loops): 1, control-flow-(conditionals): 1, control-flow-(loops): 1, exception-handling: 1, optional-values: 1, algorithms: 1 |
palindrome-products | algorithms: 7, strings: 5, mathematics: 5, tuples: 4, integers: 3, loops: 2, control-flow (conditionals): 1, control-flow (loops): 1, exception handling: 1, functions: 1, pointers: 1, conditionals: 1, lists: 1, structs: 1, maps: 1, control-flow-(conditionals): 1, control-flow-(loops): 1, exception-handling: 1, arithmetic: 1, optional values: 1, sets: 1 |
circular-buffer | queues: 5, classes: 4, exception_handling: 3, data-structures: 2, lists: 2, arrays: 2, data structures: 1, class templates: 1, generics: 1, exception handling: 1, control-flow (conditionals): 1, structs: 1, control-flow (loops): 1, control-flow-(conditionals): 1, control-flow-(loops): 1, exception-handling: 1, control_flow_if_else_statements: 1, algorithms: 1, conditionals: 1, buffer reimplementation: 1, records: 1 |
grade-school | sorting: 11, maps: 8, lists: 5, arrays: 4, conditionals: 2, strings: 2, define type: 1, sequences: 1, structs: 1, interfaces: 1, parsing: 1, classes: 1, control_flow_if_else_statements: 1, transforming: 1, integers: 1, filtering: 1, struct: 1, entry api: 1, vec: 1, option: 1, variables: 1 |
perfect-numbers | integers: 10, mathematics: 9, discriminated_unions: 3, control_flow_if_else_statements: 2, arrays: 2, algorithms: 2, filtering: 2, enumerations: 2, discriminated unions: 1, maybe: 1, control-flow (conditionals): 1, control-flow (loops): 1, exception_handling: 1, number_theory: 1, control-flow-(conditionals): 1, control-flow-(loops): 1, control_flow_loops: 1, loops: 1, logic: 1, control_flow_conditionals: 1, number theory: 1 |
luhn | strings: 11, algorithms: 9, transforming: 6, mathematics: 4, integers: 3, loops: 2, control-flow (conditionals): 1, booleans: 1, control-flow (loops): 1, type_conversion: 1, higher-order functions: 1, control-flow-(loops): 1, control_flow_if_else_statements: 1, control_flow_loops: 1, arithmetic: 1, conditionals: 1, pattern_matching: 1, security: 1, str to digits: 1, iterators: 1, control-flow-(conditionals): 1 |
bowling | algorithms: 8, arrays: 3, games: 3, control-flow-(conditionals): 2, control-flow-(loops): 2, exception-handling: 2, parsing: 2, text-formatting: 2, conditionals: 2, exception_handling: 2, control_flow_loops: 1, lists: 1, integers: 1, mathematics: 1, control_flow_if_else_statements: 1, control-flow (loops): 1, struct: 1, result: 1, goofy bowling logic: 1, control-flow (if-else statements): 1, either: 1 |
anagram | strings: 17, filtering: 13, control_flow_loops: 2, arrays: 2, parsing: 2, equality: 2, loops: 2, algorithms: 2, conditionals: 1, sequences: 1, string_transformation: 1, structs: 1, sorting: 1, control_flow_if_else_statements: 1, logic: 1, lifetimes: 1, str vs string: 1, iter: 1, vector: 1, lists: 1 |
rna-transcription | strings: 15, transforming: 14, maps: 3, control_flow_loops: 3, loops: 3, conditionals: 2, maybe: 1, control-flow (foreach): 1, associative_arrays: 1, string_manipulation: 1, control_flow_case_statements: 1, string manipulation: 1, control_flow_conditionals: 1, error handling: 1, logic: 1, result: 1, match: 1, struct: 1, str vs string: 1, optional values: 1 |
bracket-push | strings: 12, parsing: 9, stacks: 5, control-flow-(loops): 1, control-flow (conditionals): 1, control-flow (loops): 1, exception handling: 1, stack: 1, control-flow-(conditionals): 1, pattern_matching: 1, exception-handling: 1, algorithms: 1, control_flow_if_else_statements: 1, control_flow_loops: 1, conditionals: 1, looping: 1, recursion: 1, from trait: 1, stack or recursion: 1 |
sum-of-multiples | mathematics: 6, lists: 6, transforming: 4, integers: 4, loops: 2, arrays: 2, control_flow_loops: 2, control_flow_case_statements: 1, control-flow (conditionals): 1, control-flow (loops): 1, number theory: 1, conditionals: 1, control-flow-(conditionals): 1, control-flow-(loops): 1, control_flow_if_else_statements: 1, algorithm: 1, borrowing: 1, filtering: 1, sets: 1 |
nth-prime | mathematics: 12, algorithms: 5, integers: 5, loops: 3, control_flow_if_else_statements: 2, control_flow_loops: 2, exception_handling: 2, lists: 2, optional values: 1, control-flow (conditionals): 1, number theory: 1, arrays: 1, control-flow (loops): 1, exception handling: 1, performance_optimizations: 1, control-flow-(conditionals): 1, control-flow-(loops): 1, exception-handling: 1, maybe: 1 |
pig-latin | strings: 12, transforming: 9, text_formatting: 3, games: 2, conditionals: 2, lists: 2, regular_expressions: 1, regular expressions: 1, pattern_matching: 1, string_processing: 1, control-flow (conditionals): 1, control-flow-(conditionals): 1, control-flow-(loops): 1, regular-expressions: 1, control_flow_if_else_statements: 1, control_flow_loops: 1, control-flow (loops): 1, loops: 1, arrays: 1 |
change | algorithms: 7, integers: 5, arrays: 4, mathematics: 4, searching: 3, performance: 2, loops: 2, lists: 2, maybe: 1, recursion: 1, optional values: 1, control_flow_if_else_statements: 1, control_flow_loops: 1, dynamic_programming: 1, control-flow (conditionals): 1, control-flow (loops): 1, logic: 1, exception_handling: 1 |
scrabble-score | strings: 13, transforming: 7, maps: 6, loops: 3, games: 3, control-flow (loops): 2, control_flow_loops: 2, mathematics: 1, structs: 1, searching: 1, control-flow (conditionals): 1, pattern_matching: 1, pointers: 1, control-flow-(conditionals): 1, control-flow-(loops): 1, integers: 1, chaining higher-order functions: 1, hashmap (optional): 1 |
tournament | parsing: 7, text_formatting: 6, sorting: 4, strings: 3, maps: 2, loops: 2, control_flow_loops: 1, integers: 1, transforming: 1, string_processing: 1, formatting: 1, arrays: 1, records: 1, text_parsing: 1, conditionals: 1, enum: 1, hashmap: 1, structs: 1 |
collatz-conjecture | mathematics: 13, integers: 9, recursion: 7, algorithms: 5, control-flow (loops): 5, control-flow (conditionals): 4, control_flow_conditionals: 3, control_flow_loops: 3, exception_handling: 2, conditionals: 2, functions: 1, maybe: 1, number theory: 1, integer: 1, recursivity: 1, control_flow_if_else_statements: 1, loops: 1, error handling with result<t, e>: 1 |
prime-factors | mathematics: 15, integers: 10, algorithms: 6, control_flow_loops: 3, lists: 2, loops: 2, filtering: 1, number theory: 1, conditionals: 1, control-flow (loops): 1, control-flow (conditionals): 1, control_flow_conditionals: 1, arrays: 1, maps: 1, control-flow-(conditionals): 1, control-flow-(loops): 1, control_flow_if_else_statements: 1, logic: 1 |
rectangles | strings: 3, algorithms: 2, transforming: 2, pattern_recognition: 2, arrays: 2, logic: 2, parsing: 2, performance: 1, matrices: 1, control-flow (conditionals): 1, control_flow_if_else_statements: 1, control_flow_loops: 1, control-flow (loops): 1, search: 1, enum: 1, structs: 1, traits: 1, algorithm: 1 |
diamond | strings: 7, text_formatting: 5, algorithms: 4, arrays: 3, loops: 3, lists: 3, parsing: 2, games: 2, conditionals: 1, control-flow (conditionals): 1, control-flow (loops): 1, exception handling: 1, text formatting: 1, control-flow-(conditionals): 1, control-flow-(loops): 1, exception-handling: 1, text-formatting: 1, control_flow_loops: 1 |
react | reactive_programming: 5, events: 4, functions: 2, classes: 2, reactive programming: 2, generics: 2, closures: 1, nested classes: 1, higher-order functions: 1, memory_management: 1, algorithms: 1, callbacks: 1, interfaces: 1, control_flow_if_else_statements: 1, control_flow_loops: 1, graphs: 1, lifetimes: 1, delegates: 1 |
twelve-days | strings: 6, algorithms: 4, text_formatting: 4, regular expressions: 2, pattern recognition: 2, control-flow (conditionals): 2, control-flow (loops): 2, sequences: 1, polymorfism: 1, reduce: 1, enumerations: 1, pattern_recognition: 1, string_formatting: 1, arrays: 1, conditionals: 1, loops: 1, polymorphism: 1, lists: 1 |
raindrops | strings: 10, filtering: 8, text_formatting: 4, integers: 4, transforming: 3, mathematics: 2, conditionals: 2, control_flow_conditionals: 2, control_flow_if_else_statements: 2, input_validation: 1, control-flow (conditionals): 1, control-flow (if-statements): 1, language basics: 1, control-flow-(conditionals): 1, text formatting: 1, case (or format ): 1, mutable string: 1, logic: 1 |
alphametics | algorithms: 3, parsing: 3, games: 2, maps: 2, strings: 2, mathematics: 2, performance: 1, control_flow_loops: 1, dictionaries: 1, maybe: 1, control_flow_if_else_statements: 1, logic: 1, conditionals: 1, string parsing: 1, combinations: 1, external crates (optional): 1, optional values: 1 |
difference-of-squares | integers: 11, mathematics: 11, control_flow_loops: 5, algorithms: 4, control_flow_conditionals: 1, control-flow (foreach): 1, template metaprogramming: 1, functional: 1, string_comparison: 1, control-flow (loops): 1, string_transformation: 1, number theory: 1, loops: 1, floating_point_numbers: 1, control-flow-(loops): 1, fold: 1, map: 1 |
strain | filtering: 8, sequences: 5, arrays: 3, callbacks: 2, lists: 2, algorithms: 2, library reimplementation: 1, control-flow (loops): 1, collections: 1, loops: 1, lazy evaluation: 1, control-flow (conditionals): 1, control_flow_conditionals: 1, control_flow_loops: 1, control-flow-(conditionals): 1, control-flow-(loops): 1, generics: 1 |
list-ops | lists: 6, recursion: 4, filtering: 3, functional_programming: 3, loops: 2, library reimplementation: 1, callbacks: 1, control-flow (loops): 1, data structures: 1, accumulator-strictness: 1, data-structures: 1, arrays: 1, control_flow_loops: 1, variables: 1, searching: 1, conditionals: 1, generics: 1 |
word-search | searching: 5, strings: 4, tuples: 2, matrices: 2, optional values: 1, equality: 1, text formatting: 1, parsing: 1, control_flow_loops: 1, optional_values: 1, control-flow (conditionals): 1, control-flow (loops): 1, games: 1, logic: 1, pattern_matching: 1, control_flow_if_else_statements: 1, arrays: 1 |
rotational-cipher | strings: 9, transforming: 4, logic: 2, algorithms: 2, control-flow (conditionals): 2, cryptography: 2, integers: 2, text formatting: 1, string_processing: 1, loops: 1, control-flow (loops): 1, str vs string: 1, primitive types: 1, iterators: 1, chars: 1, ascii: 1 |
acronym | strings: 15, transforming: 10, control_flow_loops: 2, regular_expressions: 2, loops: 2, regular expressions: 1, vec: 1, control-flow (loops): 1, memory_management: 1, searching: 1, control-flow-(loops): 1, regular-expressions: 1, map: 1, flat_map: 1, filter: 1, parsing: 1 |
grains | integers: 10, mathematics: 9, bitwise_operations: 4, type_conversion: 2, control_flow_loops: 2, performance_optimizations: 1, if_else_statements: 1, optional values: 1, control-flow (loops): 1, number theory: 1, variables: 1, control-flow-(loops): 1, floating-point numbers: 1, algorithms: 1, panic: 1, maybe: 1 |
binary | strings: 4, mathematics: 3, integers: 3, control_flow_loops: 2, bitwise_operations: 2, exception handling: 1, control_flow_if_statements: 1, regular expressions: 1, control-flow (conditionals): 1, control-flow (loops): 1, control_flow_conditionals: 1, control-flow-(conditionals): 1, control-flow-(loops): 1, exception-handling: 1, regular-expressions: 1, control_flow_if_else_statements: 1 |
etl | transforming: 14, maps: 11, lists: 4, control_flow_loops: 3, dictionaries: 2, integers: 2, loops: 2, associative arrays: 1, arrays: 1, control-flow (loops): 1, string manipulation: 1, control-flow (foreach): 1, control-flow-(loops): 1, btree: 1, sequences: 1, strings: 1 |
sublist | lists: 10, arrays: 5, searching: 3, control_flow_loops: 2, generics: 2, loops: 2, looping: 2, enumeration: 1, pointers: 1, control_flow_if_statements: 1, recursion: 1, control_flow_if_else_statements: 1, control-flow (loops): 1, enum: 1, generic over type: 1, enumerations: 1 |
poker | parsing: 6, games: 5, sorting: 5, discriminated_unions: 2, equality: 1, pattern_matching: 1, sequences: 1, strings: 1, traits: 1, conditionals: 1, loops: 1, lifetimes: 1, struct: 1, string parsing: 1, enum: 1, lists: 1 |
hello-world | strings: 11, optional_values: 6, text_formatting: 6, optional values: 2, control_flow_if_statements: 2, text formatting: 2, control-flow (conditionals): 1, stdout: 1, language basics: 1, control-flow-(conditionals): 1, optional-values: 1, text-formatting: 1, setting_up_ocaml_dev_environment: 1, conditionals: 1, println!: 1 |
minesweeper | transforming: 8, parsing: 6, games: 5, arrays: 5, lists: 3, strings: 3, algorithms: 2, loops: 2, matrices: 2, board state: 1, integers: 1, control_flow_if_else_statements: 1, control_flow_loops: 1, exception_handling: 1, conditionals: 1 |
connect | parsing: 5, games: 4, arrays: 3, transforming: 3, graphs: 2, control-flow (loops): 2, maps: 2, control-flow (conditionals): 2, searching: 2, loops: 1, maybe: 1, search: 1, recursion: 1, optional values: 1, algorithms: 1 |
two-bucket | algorithms: 3, logic: 2, arrays: 2, parsing: 2, games: 2, loops: 2, control-flow (loops): 1, control-flow (conditionals): 1, control-flow-(conditionals): 1, control-flow-(loops): 1, exception-handling: 1, mathematics: 1, conditionals: 1, algorithm: 1, exception handling: 1 |
simple-linked-list | lists: 9, algorithms: 2, generics: 2, arrays: 2, classes: 2, define type: 1, library reimplementation: 1, data structures: 1, exception_handling: 1, recursion: 1, data-structures: 1, conditionals: 1, type_conversion: 1, struct: 1, transforming: 1 |
isbn-verifier | strings: 7, loops: 5, conditionals: 3, pattern_matching: 3, control_flow_loops: 2, mathematics: 2, loop: 1, string_processing: 1, regular_expressions: 1, arrays: 1, integers: 1, control_flow_conditionals: 1, logic: 1, conversion between string and int: 1, pattern_recognition: 1 |
accumulate | transforming: 5, lists: 4, recursion: 3, algorithms: 2, sequences: 2, callbacks: 2, extension_methods: 1, reduce: 1, control-flow (loops): 1, lazy evaluation: 1, library reimplementation: 1, control-flow-(loops): 1, extension methods: 1, function pointer: 1, generics: 1 |
variable-length-quantity | algorithms: 5, bitwise_operations: 5, bitwise operations: 2, transforming: 2, arrays: 1, control_flow_if_else_statements: 1, control_flow_loops: 1, integers: 1, encodings: 1, slices: 1, bitwise: 1, result: 1, discriminated unions: 1, lists: 1 |
dominoes | tuples: 5, lists: 4, algorithms: 2, enumerations: 1, recursion: 1, sorting: 1, trees: 1, arrays: 1, maybe: 1, search: 1, graph theory: 1, searching: 1, optional values: 1, games: 1 |
food-chain | algorithms: 7, strings: 5, text_formatting: 3, loops: 2, text formatting: 2, control_flow_loops: 2, conditionals: 2, pattern_recognition: 1, recursion: 1, refactoring: 1, arrays: 1, lists: 1, text-formatting: 1, control_flow_if_else_statements: 1 |
house | strings: 7, text_formatting: 6, algorithms: 4, recursion: 3, arrays: 2, control-flow (loops): 1, control-flow (conditionals): 1, refactoring: 1, conditionals: 1, loops: 1, control_flow_loops: 1, pattern_recognition: 1, text formatting: 1 |
forth | parsing: 6, stacks: 5, strings: 2, define type: 1, either: 1, stack: 1, mathematics: 1, lists: 1, logic: 1, domain_specific_languages: 1, interpreters: 1, parser reimplementation: 1, exception_handling: 1 |
proverb | strings: 3, algorithms: 2, arrays: 2, control-flow (loops): 1, format: 1, text formatting: 1, control-flow (conditionals): 1, text_formatting: 1, control-flow-(conditionals): 1, control-flow-(loops): 1, optional-values: 1, text-formatting: 1, optional values: 1 |
spiral-matrix | matrices: 6, arrays: 3, algorithms: 2, loops: 2, control-flow (loops): 1, control-flow (conditionals): 1, recursivity: 1, data structures: 1, lists: 1, transforming: 1, integers: 1, mathematics: 1 |
isogram | strings: 16, filtering: 9, conditionals: 2, control_flow_loops: 2, control_flow_if_else_statements: 2, loops: 2, arrays: 1, sequences: 1, parsing: 1, algorithms: 1, chars: 1, iterators: 1 |
two-fer | strings: 8, optional_values: 4, text_formatting: 3, conditionals: 3, optional values: 1, logic: 1, control_flow_conditionals: 1, text formatting: 1, booleans: 1, control_flow_if_else_statements: 1, control-flow-(conditionals): 1, control-flow (conditionals): 1 |
octal | strings: 3, mathematics: 2, integers: 2, control-flow-(conditionals): 1, control-flow (conditionals): 1, regular expressions: 1, control-flow (loops): 1, control-flow-(loops): 1, regular-expressions: 1, bitwise_operations: 1, control_flow_if_else_statements: 1, control_flow_loops: 1 |
leap | integers: 12, logic: 9, booleans: 7, control_flow_if_else_statements: 4, control_flow_conditionals: 3, conditionals: 3, mathematics: 2, boolean_logic: 1, input_validation: 1, logical_operators: 1, equality: 1, language basics: 1 |
pov | graphs: 5, recursion: 4, searching: 3, trees: 2, transforming: 1, structs: 1, maybe: 1, algorithms: 1, control_flow_if_else_statements: 1, control_flow_loops: 1, exception_handling: 1 |
gigasecond | dates: 12, time: 9, integers: 2, function overloading: 1, language basics: 1, interfaces: 1, transforming: 1, variables: 1, crates: 1, mathematics: 1, date: 1 |
bank-account | concurrency: 4, classes: 2, integers: 2, parallellism: 1, define type: 1, optional_values: 1, maybe: 1, mutable state: 1, exception_handling: 1, control_flow_if_else_statements: 1, io monad: 1 |
flatten-array | recursion: 8, lists: 6, arrays: 6, algorithms: 2, looping: 2, searching: 2, control_flow_loops: 1, pattern matching: 1, loops: 1, transforming: 1, control_flow_if_else_statements: 1 |
trinary | mathematics: 4, strings: 3, integers: 3, control-flow (conditionals): 1, control-flow (loops): 1, regular expressions: 1, control_flow_conditionals: 1, control-flow-(conditionals): 1, control-flow-(loops): 1, regular-expressions: 1 |
transpose | strings: 12, transforming: 7, loops: 5, arrays: 4, lists: 4, matrices: 4, text_formatting: 4, algorithms: 2, control_flow_loops: 1 |
book-store | recursion: 4, algorithms: 4, lists: 3, integers: 2, mathematics: 2, floating_point_numbers: 2, loops: 1, groups: 1, set theory: 1 |
hexadecimal | mathematics: 3, strings: 3, integers: 2, control-flow (conditionals): 1, control-flow (loops): 1, regular expressions: 1, control-flow-(conditionals): 1, control-flow-(loops): 1, regular-expressions: 1 |
diffie-hellman | algorithms: 6, integers: 3, transforming: 3, mathematics: 2, control-flow (conditionals): 2, control-flow (loops): 2, arrays: 2, exception handling: 2, cryptography: 1 |
zipper | trees: 5, recursion: 4, searching: 4, define type: 1, maybe: 1, functional_programming: 1, generics: 1, optional values: 1 |
dot-dsl | domain_specific_languages: 3, classes: 2, equality: 2, lists: 1, graphs: 1, object_oriented_programming: 1, test_driven_development: 1, transforming: 1 |
parallel-letter-frequency | parallellism: 3, transforming: 3, dictionaries: 2, concurrency: 1, multi-threading: 1, maps: 1, sequences: 1, strings: 1 |
ledger | refactoring: 3, globalization: 2, strings: 2, text_formatting: 2, dates: 1, integers: 1, records: 1, sorting: 1 |
rail-fence-cipher | algorithms: 5, strings: 4, transforming: 3, text_formatting: 3, cryptography: 2, lists: 2, control_flow_if_else_statements: 1, control_flow_loops: 1 |
markdown | refactoring: 5, parsing: 2, transforming: 2, strings: 1, conditionals: 1, pattern_matching: 1 |
scale-generator | algorithms: 2, parsing: 2, enumerations: 1, string_processing: 1, strings: 1, pattern_matching: 1 |
complex-numbers | mathematics: 5, tuples: 2, define type: 1, number theory: 1, classes: 1, floating_point_numbers: 1 |
error-handling | exception_handling: 4, error_handling: 1, input_validation: 1, discriminated_unions: 1, optional_values: 1 |
grep | files: 3, searching: 3, strings: 2, text_formatting: 2, enumerations: 1 |
go-counting | optional_values: 3, parsing: 3, tuples: 3, maybe: 1, classes: 1 |
tree-building | refactoring: 4, trees: 4, records: 2, sorting: 2, maps: 1 |
decimal | struct: 1, traits: 1, string parsing: 1, bigint: 1, external crates (optional): 1 |
zebra-puzzle | logic: 4, arrays: 1, algorithms: 1, searching: 1 |
reverse-string | strings: 3, string: 1, &str: 1, iterator: 1 |
luhn-from | from trait: 1, str to digits: 1, iterators: 1, higher-order functions: 1 |
luhn-trait | custom trait: 1, str to digits: 1, iterators: 1, higher-order functions: 1 |
sgf-parsing | parsing: 3, transforming: 3, maybe: 1 |
paasio | concurrency: 1, interfaces: 1, networking: 1 |
macros | macros: 1, macros-by-example: 1, hashmap: 1 |
hangman | reactive_programming: 3, events: 1 |
lens-person | lenses: 1 |
We no longer support topics in Exercism v3, which have been replaced with concepts (listed in the practices
and prerequisites
fields). The same problems mentioned in this issue apply: concepts will vary between tracks greatly, and the same concepts might have different names in different tracks. I don't think there is currently a good way for us to list these topics, so I'll close this issue.
If someone feels this issue should remain open, feel free to re-open.
Something we've run into in the Python track when implementing new exercises is that there is occasionally some confusion about what topics are appropriate for a given exercise. While some exercises may allow for more language-specific topics to be included for that track, most (if not all) exercises could probably have a global list of topics that would be applicable to any track that implements it.