During the WeAreDevelopers World Congress 2023 in Berlin we ran the first edition of CODE100, a new "game-show-meets-coding" format, created by WeAreDevelopers. The game consisted of 6 rounds, 3 of which were coding challenges. For each of these coding rounds, the challengers (contestants) had to request a JWT token from the CODE100 API. This token was then used to authenticate the challengers against the API to retrieve the puzzles and submit their solutions. Turns out that this was a bit of a hurdle, so we may change that in the future.
But let's talk quickly about the challenges. How would you have solved them? You can find solutions in various languages in our Code 100 GitHub repository.
Challenge 1 - Sum numbers in a string
The puzzle for this challenge was a string and the challengers needed to code up a solution to sum up all the numbers contained in the string:
The puzzle is a string containing any amount of characters which can be either a letter or a digit. If there is a number with more than 1 digit, this should be counted as a whole number - not as separate digits.
Example puzzle
world20congresss23
Example result
43 (not 7) Check out the solutions in various languages and the original puzzle and expected result on GitHub:
• Puzzle 1 used in CODE100 2023 Berlin
• Expected result 1 used in CODE100 2023 Berlin
Possible solutions
As with any of these challenges, there is more than one solution - but here are two:
Solution 1
• Set a sum variable to 0
• Set a currentnumber variable to an empty string
• Split the string into an array of characters (e.g. in JavaScript with .split(''))
• Iterate over the array of characters
• If the current character is a valid digit, append it to the currentnumber variable
• If the current character is not a valid digit, add the (parsed) currentnumber variable to the sum variable and reset the currentnumber variable to an empty string This is a more "imperative" solution, which is easier to understand for beginners and a very valid way to do it.
Solution 2
This second solution requires some more knowledge about regular expressions, but is a lot shorter and faster to write:
• Split the string into numbers using a regular expression (e.g. in JavaScript with .split(/D/))
• Add up the numbers in the resulting array
Challenge 2 - Identify anagrams
The puzzle for this challenge was to identify anagrams:
You will receive an array of strings.
Submit that array of strings, sorted from A-Z, but only supply the words that are an anagram of another word in that array.
Example puzzle
[ "kiwi", "melon", "apple", "lemon" ]
Example result
[ "lemon", "melon" ]
Check out the solutions in various languages and the original puzzle and expected result on GitHub:
• Puzzle 2 used in CODE100 2023 Berlin
• Expected result 2 used in CODE100 2023 Berlin
Possible solution
• Write a function that identifies if two words are anagrams
– Sort the letters of both words alphabetically
– Iterate word 1, and create an object map for each character, counting the occurance of each
– Iterate word 2, and check if the character count matches
• Iterate over the array of words
• For each word, iterate over the remaining words in the array
• If the current word is an anagram of the other word, add it to the result array
Challenge 3 - Linked list
This third challenge, the challengers had to iterate through a linked list:
You will receive an array with nodes of a linked list and the ID of the top node as illustrated in the example below.
- The property next points to the ID of the next node
- The last node has the value null for next
- The property top points to the ID of the first node
Submit as solution an array of the values in the order that they appear in the linked list.
Example puzzle
{
"linkedList": [
{ "id": "b", "value": 2, "next": "c" },
{ "id": "c", "value": 3, "next": null },
{ "id": "a", "value": 1, "next": "b" }
],
"top": "a"
}
Example result
[ 1, 2, 3 ]
• Puzzle 3 used in CODE100 2023 Berlin
• Expected result 3used in CODE100 2023 Berlin
Possible solution
• Write a recursive function that takes a node ID as an argument
• If the node is null, abort the function (this means that it's the last node in the list)
• Push the value of the current node to the result array
• Call the recursive function again with the ID of the next node
Summary
These challenges look easy at the first glance, but can be hard to execute when time is your enemy and you have are facing a live audience. The challengers did a great job and we are looking forward to the next CODE100 event!
Speaking of which, what would you like the next iterations of CODE100 to be? We're still in early days and we're planning to do a lot more with this idea.