Daily Exercism Challenge

Hi :wave:

We’re looking at launching Daily Exercism Challenges - a new feature offering a daily coding task that should take about 15 minutes to complete. We’re crafting these to be educational, varied in language scope, and enjoyable.

The idea is to give you a quick but potent dose of coding practice every day. With these short challenges, we hope to facilitate consistent learning, regardless of how packed your schedule might be :clock1:

We need your take on this. Are you interested? Any concerns or suggestions? Your thoughts will directly influence the final shape of this feature.

The idea is also not just to learn, but to enjoy interacting with the Exercism Community as a whole and grow in your programming journey

All comments, thoughts and ideas are welcome!

Jonathan

4 Likes

For those of use who did not participate in the community call where it was discussed: Can you summarize the core ideas? Do you have any examples?


My initial thoughts about the format:
Having a “problem-specification” and translating that into all the languages that Exercism supports is a slow and time-consuming process, I suppose that’s not suitable for small and quick daily challenges. Instead how about providing the input directly as JSON? (Most languages can process that directly or have libraries for that.) A generic skeleton file can be provided as a starting point.


What level of expertise are you targeting? Some uber-coders can solve problems in 10 minutes that I can’t solve even after thinking about it for days.
Just to get a common understanding, here are some random problems and their difficulty (estimated by me):

  • Easy:
    • Given a year, determine its century (but 1900 belongs to the 20th century).
    • Given some rectangles calculate their bounding box / intersection.
    • Determine if a binary tree is a binary search tree.
  • Intermediary:
    • Reverse/sort just the vowels in a string.
    • Given n 6-sided dice calculate the chance of rolling (at least) k points.
    • Given the current page number and the total number of pages build a “pagination string” (e.g. “1 … 5 6 7 … 100”).
    • Given the starting order in a bicycle race and some “events” (“current #5 overtakes”, “current #7 drops out”) determine the order at the end.
  • Advanced
    • Given some digits, how many valid IP-addresses can be formed by inserting dots.
    • Given some cars (length, arrival, departure) that always park in the middle of the longest parking space along a street, how many of them find no space?

Are these problems similar to what you have in mind for the daily challenge? Do you lean towards any of these difficulty levels, do you want a mix of them, or do you think in completely different categories?


There are a lot of possible “directions” topics for these challenges:

  • math-sy problems (how many zeros has the faculty of n)
  • algorithmic challenges (the longest path between any two nodes in a binary tree)
  • geometric problems (given some circles on a plane, how many are visible from a given point)
  • calendrical calculations (how often did somebody birthday fall on a Friday)
  • string problems (compare two version strings)
  • puzzles (solve some logic puzzle like str8ts)
  • riddles (like the “Green Glass Door”)
  • “reverse challenges” (here are some inputs/outputs, find the logic and implement it)
  • practical tasks (given a logfile find the 5-minute window with the most requests)

Do you lean in any direction, did I forget some important topics, or am I completely missing the point?


tl;dr I’m trying to get a clearer picture of these “Daily Challenges”.

[Edit: “Topics” is a much better word than “directions”. Sometimes my English fails me.]

Hey @siebenschlaefer - thanks for your thoughts.

I think you’ve understood clearly what the concept would be, but a mixture of easy, medium and hard mini-challenges that require less time than a typical exercise to complete and that spark a topic or thought-process around programming.

They should be generally fun, sometimes thought-provoking and drive conversation in the community.

The list of ‘directions’ you described was a great summary of the types of challenges we could include and the variation of challenges is what we feel would make it interesting and exciting to be involved with.

The idea is to make Exercism somewhere that you want to come back to regularly and we thought maybe escalating the difficulty through the week could be a fun way of building up the severity of the challenge :wink:

Hope that has answered your questions. If you want to see the transcript of the chat from the last community call, then you can go to the #stages channel in Discord and if you hover over the channel, there’s a chat icon that you can select that opens the chat. I’ve pasted a screenshot below just to help.

Screenshot 2023-05-18 at 20.44.13

I hope that’s clarified a bit further.

Some of us are not on Discord, and there is a login wall.


Do you already have concrete examples?

Creating these will take man-hours. Do you have these to spare? One exercise a day could be a lot.

In my experience, solving an exercise involves 2–3 phases:

  1. comprehend the problem
  2. find a solution
  3. write down this solution

Phases 1 and 2 are often intertwined. These also tend to take the most time, unless the problem is trivial or already familiar. I fear the daily challenges would need to be trivial (except: see suggestions below) in order to be solvable within 15 minutes. Which I feel would be a shame, but that might be just me. Or maybe I’m just not imaginative enough and this isn’t a problem.


Here are some exercise ideas that focus on the write down the solution part of solving problems:

Given a piece of code,

  • fix the bug(s)
  • fill in the blank(s)
  • simplify it
  • transform into another style
  • ‘glue’ several parts together
1 Like

I just did that but the chat looks like a lot was rather said via audio, so I’m missing a lot of context. But I guess we’re still in the initial phase of throwing ideas around and seeing where that leads us, right?

The Chaos Monkey in me loves this one: Keyword Codegolf.

Write a compiling program that throws no runtime errors with all the core keywords of a programming language. Do it in as few characters as possible. :laughing:

The current winner linked is a Ruby Program…

2 Likes

Really like this one too. So many abuses of True/False and “Truthy”/“Falsey”.

1 Like

@siebenschlaefer you’re right, the chat probably only gives a general sense of what was discussed. We’re looking at ways to record the chat via Discord but haven’t settled on a concrete process just yet.

Otherwise, we are very much in the ideas phase at the moment so there is a lot of flexibility in shaping things. Your previous post where you laid out your ideas was really spot on so you’re on the right track for sure.

I’ll keep an eye out for other examples. @BethanyG has put a couple example in her posts above as well which give an idea too.

Hey @MatthijsBlom - you make a very valid point about not being on Discord. We’re looking at options to record the calls so we can paste them in the forum. Will make sure the following calls are referenced.

@BethanyG has referenced the following as an example which is along the lines of what we’re thinking about.

You are correct that implementing them will require time and effort. Currently, we’re looking to crowd-source a batch of ideas to build up a bank of challenges. Then spend some time developing them. The exercises are therefore more likely to be on the trivial end of the spectrum but again, this is open for discussion.

These ideas I think fit neatly into what we’re thinking and are great starting points.

Hope that helps!

Take a peek at The Weekly Challenge for some ideas. They’ve been running since 2019 and currently have 218 challenges. Contributors have provided solutions in 101 languages.

:eyeglasses:

2 Likes

Thanks for sharing @habere-et-dispertire! I like how they have the recap available as well with different statistics.

Also, weekly might be more sustainable…daily challenges feels quite full on! Advent of Code…every day, all the time :joy:

A big thing in software engineering is working with legacy code or understanding code of others. In this area, bug fixing could be a topic where many tasks could be created quite easily. Maybe even taken from the existing community solutions and put bugs into it that must be solved. Can be great for learning the internals of a language and improve the ability to understand code. Like in Go, that slices hold a pointer to its array, and so can be changed when used as a function parameter. Or optimization to improve performance for the benchmark.

Could be low hanging fruits because all existing solutions can be reused for this.

1 Like

@deleted-user-33691 that’s a great idea. We have so many community solutions that we could use as starting points.

How about the category naming “Legacy Learning”…or something like that :joy:

Weekly does feel more doable. They always have two tasks if you need/want more – you don’t have to complete both. The tasks also appear graded, so it makes getting your feet wet easier.

I’d be interested in testing spaced repetition (perhaps around language semantics/syntax) or wherever it seems a good fit, although absolute spacing seems best.

I agree that weekly would be easier both for the exercise-makers and Exercism users.

Perhaps unrelated, but maybe we could incorporate problems from competitive programming - specifically Codeforces? These are designed to be quickly solvable while quite tough.

@habere-et-dispertire, I too would love to see SRS in Exercism.

1 Like

It seems preferable that the challenges could be taken on in multiple languages. Otherwise they would be ‘inaccessible’ to many students.