Обновленный Codebattle: Игра Для Программистов

Привет, Хабр!

Обновленный Codebattle: игра для программистов

Три недели назад мы (дружная команда образовательного проекта Гекслет ) опубликовано быстрый о нашем новом проекте — игре для программистов Codebattle. Напомню, что идея игры очень проста: вам и вашему оппоненту дается задача, вы решаете ее на выбранном вами языке.

Вы в реальном времени видите код оппонента, результаты запуска тестов, можете общаться с ним и зрителями.

Выигрывает тот, кто первым решит задачу (пройдёт тесты).

После публикации статьи мы провели веселый день.

Мы зашли под хабраэффект и нашли несколько ошибок.

Когда буря утихла, жизнь на арене снова закипела.

В течение следующих двух недель мы решали три основные проблемы: производительность, борьба с читерством и возможность быстрого добавления новых языков.

И они их решили! Встретиться - обновленный кодбатл ! Кратко:

  1. Хабраэффект нам не страшен (тьфу-тьфу-тьфу)
  2. Вы больше не сможете жульничать (нельзя подогнать решение под тесты)
  3. Добавлять языки стало проще (теперь у нас уже есть Clojure, Ruby, Js, Python, php, Java, erlang)
Подробности под катом →

Почему они солгали и как решили?

Мы работали через опросы, которые генерировали тысячи запросов в минуту.

Теперь все переписано через вебсокеты.

Также была ошибка в библиотеке nkdocker.

Обман и языки

В предыдущей версии была такая система:
  1. Написание заданий и тестов в Clojure
  2. Переводим на целевые языки с помощью нашей библиотеки мультикод .

  3. Показать сгенерированные тесты игроку
Естественно, были люди, которые просто подгоняли код под тесты, не решая саму проблему.

Кроме того, такой дизайн затруднял добавление новых языков.

В обновленной версии другая схема: мы просто работаем через стандартные потоки ввода/вывода stdin/stdout и не привязаны к конкретному языку.

Теперь мы генерируем тесты при проверке и не показываем их игроку.

Система стала намного проще: мы просто подаем сгенерированные данные в вашу программу и смотрим на стандартный вывод. Это также облегчило добавление новых языков; нам удалось добавить Clojure, Java и Erlang. Мелочи: добавил кучу новых заданий, обновил описания во всех заданиях, обновил расширение для Chrome .



Как добавить новую задачу
Хотите добавить новую задачу в базу данных и улучшить свои навыки работы с Clojure? ;-) В нашем репозитории задач Есть подробный README и наглядные примеры.

В нашем Слабый чат Есть специальный канал #codebattle, где можно обсуждать игры, проблемы и идеи.

Теги: #codebattle #игра #Аномальное программирование #спортивное программирование #программирование

Вместе с данным постом часто просматривают: