Wednesday, July 23, 2014

Our candidate interface is now open source!

Codility’s candidate interface (CUI) has now been released on Github. The CUI is an in-browser component of our system, responsible for task presentation, editing and submitting code.

The CUI is a big chunk of Codility. Since our project’s inception in 2009, a total of 17 developers have contributed to it one way or another (not counting contributors to the various open-source components used). In the last few months we have started more active development of the interface, including integration with Ace code editor, support for bug-fixing tasks and continuous auto-save. In the near future we are planning to improve the help messages, redesign time reminders, and include a better interface for submitting users’ test cases. We are also actively experimenting with code completion for selected programming languages.

We have released the CUI as open source for three reasons.

First, we want to share this work with others. Codility was the first service to offer pre-employment screening with automated coding assessment in 2009, but today they are literally dozens of services that offer assessments, contests, challenges – you name it – either commercially or pro bono. Each new site has to write the coder’s interface from scratch. We believe this is a waste of effort, which should rather be spent innovating on assessment types and quality. So if you ever consider launching a code assessment service, grab our CUI and use it as you like. The CUI is published under GNU LGPL, making it eligible for both open- and closed-source projects.

Second, we want to invite the community to participate. Programmers are the main users of the CUI (whether they’re looking for a job or training to improve their programming skills). We want to empower them to change it, if they so wish.

Third, by opening the source code we expose it to public scrutiny. Not only will we have a chance to further improve the code quality, but we will also learn from others in the process.

How can I reuse the CUI in my project? Take a look at how the mock in-browser server (test-server.js) is built, and implement the API endpoints used there (e.g. get_task, save).

How do I contribute to CUI? Just fork us on Github and open a pull request. Feel free to contact us with any bug reports or suggestions at project issues on Github.

Some more technical details

The CUI is an HTML- and JavaScript-based application. It was originally a part of a bigger Django project, but we have isolated it as a separate module. While the server-side API endpoints are not part of the repository, we provide a mock server that runs inside a browser.

The development history of the CUI is being extracted from a bigger repository using the git-subtree mechanism, which looks for commits to a specific directory. We’re keeping the original commit messages for now, so don’t be surprised if you see an occasional mention of an internal issue number or a Jenkins build.

Among the recent developments on the technical side, you may notice that we have adopted SCSS as our stylesheet language, as well as Jasmine as our in-browser unit test framework (we are using Selenium for end-to-end integration tests, but they proved too heavyweight and inconvenient to use while exercising every minute detail of the CUI’s behavior).

The CUI does have several years of development history, which admittedly means that some parts are not as shiny as others. Keeping that in mind, we are proud to share our work with you and we welcome any and all feedback on how to improve it.

Wednesday, June 11, 2014

Aluminium 2014 knows its Conqueror!

This time, the first Golden Award goes to Bangkok, Thailand to Pattara Sukprasert who came up with the perfect solution in just 15 minutes (apparently, the cat in the picture helped a lot).

Pattara was followed (not so closely this time) by Spnautilus (26 minutes) and Marat Yuldashev (56 minutes).
It seems that this challenge is a bit trickier :-)

Congratulations and happy coding!!

The cat came to no harm and is still alive and well :-)

Wednesday, April 23, 2014

This Girl Rocks!

The third Natrium 2014 Golden Award winner this month was 16 year old Elene Machaidze from Georgia. She delivered the perfect solution in just 12 minutes!

As she is the first female coder to make the top three in the history of Codility Challenges, we asked Elene to share some interesting details about herself.

Elene lives in Tbilisi (Georgia's capital) where she also goes to school. Programming is her hobby (she's been coding since she was 11!) and her favorite part are graph algorithms. On the other hand, she doesn't like geometry algorithms. Elene is also interested in biology, chemistry and philosophy. Her dream is to become a programmer or a biologist.

Good luck in your future endeavors, Elene!!

Thursday, April 10, 2014

Codility knows its Natrium 2014 Challenge winner!

This month's first Golden Award goes to Yanpei Liu from Shanghai who delivered the perfect solution in just 4 minutes

Yanpei Liu was closely followed by Tomasz Garbus (9 minutes) and Elene Machaidze (12 minutes).


Haven't had a shot at our Natrium Challenge yet? 


Thursday, April 3, 2014

Why the binary search is one of my favorite algorithms.

First of all, I'd like to mention that I have never been a great fan of very complex algorithms that I can use only on a theoretical basis. On the other hand, I don't like algorithms that are so trivial that it takes only a short time to figure them out.

My idea of a perfect task or algorithm is one whose adaptation can improve a slow solution, but whose use is not obvious. Moreover, such an algorithm may be useful in everyday life, not just in the world of computer science or in solving theoretical problems. One such algorithm is the binary search.

First of all, the binary search algorithm is very intuitive. Many people use binary searches from childhood without being aware of it. For example, when you search for words in a dictionary, you don't review all the words; you just check one word in the middle and thus narrow down the set of remaining words to check.

The binary search is not restricted to searching for an element in a sorted sequence; if it were, the algorithm would be considered trivial and uninteresting. An interesting application of the algorithm is binary search on the result. For example, imagine that we want to find the minimum size needed for a square office that must freely accommodate all the employees of a company. We can perform a binary search for that size rather than sequentially checking all the possible sizes. We usually estimate the minimum and maximum sizes over which we do a binary search. Next, we just check some middle value and the interval can be halved again, and so on. That's a lot of saved time.

There are plenty of algorithmic tasks that require a binary search to achieve a model solution. They appear during recruitment interviews, in exams and in programming competitions. Certainly, they will also appear in future challenges.

  • Have you ever used a binary search in your life? 
  • If so, what application of a binary search has proved to be the most powerful and time-saving for you?

I have made the binary search the centerpiece of our new programming lesson No 12.
Check it out for more examples, explanations and exercises, and let me know if it was useful to you!

Monday, March 10, 2014

We have another "serial winner"

After 16 minutes Robin Lee was the first one to submit a perfect solution to our Neon 2014 programming challenge. Brilliant!

Robin has been participating in Codility challenges since 2011 and already came in first for the Nitrogenium 2013 challenge. This makes Robin the second person to win two challenges since 2013. The other one is Chenyang Wu. Take them on during the next upcoming challenge, in a month? 

Closely behind Robin were RESODO (17 mins), Kevin Wang (21 mins) and Dmytro Ignatenko (21 mins).

Congratulations to you all and happy coding everyone!

Thursday, March 6, 2014

Your input for our 'home for programmers'

We are happy that many of you, our programmer community, took the time to fill in our survey to help us improve our current services and shape upcoming offerings for you. 

Here are some findings and action steps resulting from your feedback:

A) How can we improve our monthly programming challenges?

To comment on the most popular responses:

Increase the frequency of challenges (32.7%)
It’s great that many of you would like to be challenged more often. Whilst we will try to ramp up our production in general, what we envisage introducing shortly is two monthly challenges: a hard one and one that is a bit easier than the current ones. The latter was also one of the main ‘other ideas’ suggested to us.

Change the time when challenges go live (24.6%)
Whilst responses did vary, there is a clear cluster indicating that weekends, especially Saturdays, would be most convenient. Hence, we are changing the starting time for our next challenge to Saturday, 5pm UTC.

Create a hall of fame (17.1%)
Sure! Whilst we have published just the top 3 from each challenge to date on our blog and social media accounts (Twitter, Facebook), the new ‘programmers’ home’ that we’re shortly going to launch will feature a hall of fame. So, get your favorite pictures ready! :) And, while you’re at it, why not take our current challenge?

B) How can we improve our guided programming course?

The series of hands-on coding lessons, aimed at everyone with basic programming knowledge and an interest in discovering the world of programming, was last year’s star innovation. Since its inception in May 2013, almost 500,000 visitors from all corners of the globe have visited the site and about 1,500 training tasks are now being assessed every day.

This is great encouragement and motivation for Jacek and Marcin, the fathers of this series.

They were happy to receive your feedback and will focus their efforts mainly on: 
  • Providing solutions to training tasks (34.9%) 
  • Providing hints on solving training tasks (29%) 
  • Adding links to more resources that help to solve the training tasks (16.6%) 

In addition, we think that there are plenty of resources in the community. Hence, we plan to add facilities allowing you to publish, brag about and share such insights with others.

C) What additional features/services would you use, if Codility provided them?

It was great to see lots of hunger and ideas. Lots to do? Absolutely. But hey, we are motivated and will do our best to ship a few of these ideas soon. And hey, if you feel motivated too and want to join in, why don’t you check out our job openings! :)

Thanks a lot for your contributions and comments on this survey! We are aware that it’s only a snapshot, and we want to make sure we are aware of your ideas, wishes and preferences on a continuous basis. Therefore, our new home for programmers – expect a launch in early April at the latest – will also contain a corner for you to feed in ideas to be publicly displayed. Also, you can see existing ideas and boost them by voting for them. For an even more personal approach, talk to Jacek ( and Mateusz ( directly!

Happy coding!

Monday, February 10, 2014

The Fluorum 2014 programming challenge found its master...

And the Fluorum 2014 programming prize package travels to: Keivan Alizadeh Vahid in Tehran. 

Keivan took 32 minutes to submit a golden solution to what was a slightly trickier challenge this time. Congratulations!

Keivan was closely followed by Marat Yuldashev (44 mins) and the winner of our last challenge, Visit Pataranutaporn (45 mins). 

Serving such a hungry, international and quickly growing programmer community is very motivating for our task setters. Expect another tricky challenge in a month!

Congratulations again and happy coding everyone!

(Haven't had a shot at the Fluorum challenge yet? Try:

Monday, January 13, 2014

And the first Codility Golden Award of 2014 goes to ...

... Visit Pataranutaporn (aka Nautilus Processor)!

Visit successfully solved Oxygenium 2014 in only 14 minutes! Kudos, Visit!

Visit was followed by the winner of the last Codility challenge, Robin Lee (21 mins) and Andrii Maksai (23 mins). 

Congratulations, and keep nurturing your passion for coding!

Thursday, January 9, 2014

The winners of the Codility programming challenges in 2013

Codility's free offerings to programmers have become increasingly popular in 2013.
  • Over 200,000 have visited the simple training site we launched in May 2013.
  • We have assessed more than 180,000 training task solutions you submitted. 
  • Over 40,000 tried to get a Codility coding Award. See who won the challenges in 2013 below.   
The results of 2013 encourage us to quickly expand our services to programmers. Expect an announcement soon.

For now, let us give the floor to the winners of the Codility challenges in 2013.

Programming challenge Winner 2nd 3rd
Omega Artur Robin Lee Lego Haryanto
Hydrogenium Jason Ye Mark Richardson John Maxwell
Helium Lego Haryanto Gustav Matula Sumudu Fernando
Lithium Tomasz Kulczyński Mario Ynocente Castro Giorgi Guliashvili
Beryllium Chenyang Wu Denis Yudin Xiongjun Liang
Boron Gabriel Rea Velasco Chenyang Wu Sven Over
Carbo Chenyang Wu Marat Yuldashev Robin Lee
Nitrogenium Robin Lee Marcin Kościelnicki Marat Yuldashev

Congratulations and keep up the great programming!