exercism / kotlin

Exercism exercises in Kotlin.
https://exercism.org/tracks/kotlin
MIT License
224 stars 194 forks source link

Add prerequisites to Practice Exercises #445

Open ErikSchierboom opened 3 years ago

ErikSchierboom commented 3 years ago

This issue is part of the migration to v3. You can read full details about the various changes here.

Exercism v3 introduces a new type of exercise: Concept Exercises. All existing (V2) exercises will become Practice Exercises.

Concept Exercises and Practice Exercises are linked to each other via Concepts. Concepts are taught by Concept Exercises and practiced in Practice Exercises. Each Exercise (Concept or Practice) has prerequisites, which must be met to unlock an Exercise - once all the prerequisite Concepts have been "taught" by a Concept Exercise, the exercise itself becomes unlocked.

For example, in some languages completing the Concept Exercises that teach the "String Interpolation" and "Optional Parameters" concepts might then unlock the two-fer Practice Exercise.

Each Practice Exercise has two fields containing concepts: a practices field and a prerequisites field.

Practices

The practices key should list the slugs of Concepts that this Practice Exercise actively allows a student to practice.

Prerequisites

The prerequisites key lists the Concept Exercises that a student must have completed in order to access this Practice Exercise.

Although ideally all Concepts should be taught by Concept Exercises, we recognise that it will take time for tracks to achieve that. Any Practice Exercises that have prerequisites which are not taught by Concept Exercises, will become unlocked once the final Concept Exercise has been completed.

Goal

Practices

The "practices" field of each element in the "exercises.practice" field in the config.json file should be updated to contain the practice concepts. See the spec.

To help with identifying the practice concepts, the "topics" field can be used (if it has any contents). Once prerequisites have been defined for a Practice Exercise, the "topics" field should be removed.

Each practice concept should have its own entry in the top-level "concepts" array. See the spec.

Prerequisites

The "prerequisites" field of each element in the "exercises.practice" field in the config.json file should be updated to contain the prerequisite concepts. See the spec.

To help with identifying the prerequisites, the "topics" field can be used (if it has any contents). Once prerequisites have been defined for a Practice Exercise, the "topics" field should be removed.

Each prerequisite concept should have its own entry in the top-level "concepts" array. See the spec.

Example

{
  "exercises": {
    "practice": [
      {
        "uuid": "8ba15933-29a2-49b1-a9ce-70474bad3007",
        "slug": "leap",
        "name": "Leap",
        "practices": ["if-statements", "numbers", "operator-precedence"],
        "prerequisites": ["if-statements", "numbers"],
        "difficulty": 1
      }
    ]
  }
}

Tracking

https://github.com/exercism/v3-launch/issues/6

ErikSchierboom commented 3 years ago

⚠ The spec for Practice Exercises has changed. Besides having a prerequisites field, each Practice Exercise should now also have a practices field, which should list the slugs of Concepts that this Practice Exercise actively allows a student to practice. See the spec for more information.

The issue's text has been updated to reflect the updated spec.

mpbostock commented 1 month ago

I can pick this one up

mpbostock commented 1 month ago

I've been looking at this and there only seems to be two concepts currently basics and booleans. Is this task to populate just the practices and prerequisites for each of the Kotlin Practice Exercises in config.json with just these two concepts or is this task also about defining what the concepts should be for Kotlin and mapping the existing topics to the new list of concepts (even though these concepts are yet to have a concept exercise)?

mpbostock commented 1 month ago

Here's a list of all the unique topics currently set on the Practice Exercises:

[
  "algorithms",
  "arrays",
  "bitwise_operations",
  "booleans",
  "classes",
  "concurrency",
  "conditionals",
  "cryptography",
  "dates",
  "enumerations",
  "enums",
  "equality",
  "exception_handling",
  "filtering",
  "floating_point_numbers",
  "functional_programming",
  "games",
  "generics",
  "integers",
  "lists",
  "logic",
  "loops",
  "maps",
  "math",
  "matrices",
  "object_oriented_programming",
  "parsing",
  "pattern_matching",
  "pattern_recognition",
  "randomness",
  "reactive_programming",
  "recursion",
  "regular_expressions",
  "searching",
  "security",
  "sets",
  "sorting",
  "stacks",
  "string",
  "strings",
  "text_formatting",
  "time",
  "transforming",
  "type_conversion",
  "varargs",
  "variables"
]

The concepts probably won't map 1-2-1 with these, some of them are duplicates (strings and string etc.) and not sure if the potential Kotlin concepts have been thought about yet. I looked at the Python track for guidance as I noticed that has concepts enabled. The concepts could be similar to what's on Kotlin Get Started