exercism / problem-specifications

Shared metadata for exercism exercises.
MIT License
327 stars 544 forks source link

Should canonical-data.json include topics? #992

Closed cmccandless closed 2 years ago

cmccandless commented 7 years ago

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.

Insti commented 7 years ago

There are 2 questions here:

  1. 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?

  2. 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.

petertseng commented 7 years ago

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.

ErikSchierboom commented 7 years ago

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.

Insti commented 7 years ago

It should be easy to make a tool that queries all track config.jsons and show the topics assigned to each exercise and how many times they are used.

tleen commented 6 years ago

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.

Stargator commented 6 years ago

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.

Smarticles101 commented 6 years ago

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
ErikSchierboom commented 2 years ago

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.