#TuentiChallenge10: Show me more numbers!

Jakub Holubansky
May 29, 2020 · 4 min read

Three weeks ago we did a sneak peek on this edition’s statistics, and today we come with more numbers, code and writeups!

Challenges

Like in most other editions, this year we included 20 challenges (and as we said earlier, we had to since the year is 2020!). The first half of the challenges was easier this year and some challengers even solved problem 13 on the first 24 hours of the competition! However, the difficulty increased very quickly with the following challenges and 15 participants got to the last problem, while only one of them managed to solve it (congratulations to Alfredo, who solved all the 20 problems correctly!).

Submits and skips per challenge

The stoppers this year were problems 4, 6, 12 and 14. They required you to use custom http headers (problem 4), connect to a daemon and solve a labyrinth (problem 6), crack a textbook RSA encryption which used no padding and a common e value (problem 12) and gain leadership of a Paxos cluster (problem 14). The hardest problem was problem 20 (which is why we placed it in the latest position) and required you to reverse-engineer a binary and create a ROP attack against the daemon to obtain the contents of a file stored in that server.

Submit correctness per challenge

The problems with lower percentage of wrong submits are those that had the same output for the test and submit phase (although you could still fail the problem if you submitted a different output in the latter!). You could skip all the problems before problem 18, which was the deadliest challenge this year (the one with the higher percentage of wrong submits). This challenge required you to use dynamic programming to make a string valid in two formats. Some of the wrong submits were sent on purpose to just continue with the next challenge (a “soft-skip”), but it remains as the deadliest even without counting them.

Languages

In the sneak peek we saw that Python dominated the competition by being included in more than half of the solutions in which we could detect a programming language. We further improved the detection process and now Python amounts for 52% of those solutions (and for at least 40% of any challenge!).

Top languages per challenge, by percentage of solutions

The second most used language was C++, although it wasn’t used in most of the non-algorithmic challenges. We can also notice there was a surge in unpopular languages in challenge 8, which happened because the image’s data contained some Brainfuck code you needed to execute to get the solution!

Lines of code

The longest solution this year in terms of lines of code is a PHP solution for problem 3 that included the full text for Fortunata y Jacinta in its code and ended up having the incredible amount of 42,328 lines of code. This hugely impacted the following graph, in which PHP ended up having almost double the lines of code per solution than the next language from the top 10.

Lines of code per solution for the top 10 languages

Ruby continued to be the language with less lines of code per solution (from the top ones). Python lost the second place to Kotlin, and both of these were notably ahead of the rest.

Writeups and solutions

We also include a compilation of solutions and writeups shared by the participants. We hope you like them.

Writeups in blogs:

Solutions with writeups:

More solutions:

And that’s all for now! We hope you enjoyed participating in the competition as much as we enjoyed organizing it! Unfortunately, we had to delay the final round due to the human malware issues, so this year we will need to wait some more months to know the winners.

Making Tuenti

Sharing the daily awesomeness of making Tuenti