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

Мы в Хекслете любим не только учиться и учить, но и развлекаться. Но развлекаться по-своему, по-программерски. Поэтому мы запустили Codebattle. Это игра для программистов.

Идея очень простая: вам и сопернику дается задача, вы решаете ее на выбранном вами языке. Вы видите код соперника в реальном времени, результаты запуска тестов и можете общаться с ним и зрителями в чате. Кто первый решит задачу (удовлетворит тестам) — тот победил.



Сейчас доступны на выбор JavaScript, PHP, Python и Ruby. Можно создавать игру самому и ждать соперника (или послать ссылку кому-нибудь конкретному), а можно вступать в открытые игры. В запущенную игру можно зайти в качестве зрителя. Чтобы следить за открытыми играми без посещения сайта, можно установить расширение для Chrome.

Если интересно, мы можем отдельно рассказать про бэкэнд. Там используется Erlang, а тесты пишутся на Clojure. Потом они трансформируются в тесты на всех целевых языках с помощью нашей библиотеки multicode.

Сами задачи тоже лежат на Гитхабе, можно делать пулл-реквесты и добавлять новые задачи (заодно попрактиковаться с Clojure).

В бой!

Комментарии (57)


  1. Delphinum
    07.10.2015 15:03
    +21

    Напоминает школьные олимпиады по программированию. Не люблю олимпиады.


    1. freetonik
      07.10.2015 15:11

      Это скорее ката, чем школьные олимпиады.


      1. Delphinum
        07.10.2015 15:13
        +1

        А разница?


        1. EndUser
          07.10.2015 20:14

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


          1. Delphinum
            07.10.2015 20:21
            +1

            То есть в предложенной игре два программиста будут функцию факториала кодить? Сомневаюсь. Кто будет в это играть, если задачки там будут не заковыристые?


            1. EndUser
              07.10.2015 20:47

              Я в codebattle не входил. Зрители не предусмотрены, а авторизоваться я не решил. Не в курсе чего там.
              Я раскрыл коммент freetonik настолько, насколько я его понял.
              Кстати, по адресу freetonik есть несколько таких же по замыслу сайтов, что и описываемый в текущей теме.


              1. Delphinum
                07.10.2015 20:51

                Понял, спасибо.


              1. toxicmt
                08.10.2015 06:00
                +1

                Зрители предусмотрены, но на текущий момент требуется авторизация.


  1. avdept
    07.10.2015 15:22
    +4

    Че за фигня, я набираю код, результат почти готов — потом бах, весь мой код пропадает и остается стандартная заготовка(задание)


  1. nxsofsys
    07.10.2015 15:34

    Я бы хотел в таких местах авторизовываться через гугл.


    1. freetonik
      07.10.2015 15:44
      +3

      Добавим в родмап на будущее. Пока там есть самые программерские альтернативы: github и bitbucket.


      1. splav_asv
        07.10.2015 15:57
        +11

        Вам не кажется, что ваши запросы при авторизации через bitbucket не слишком скромные?

        Hexlet_production is requesting access to the following:

        Read and write to your team membership information
        Read and write to your repositories' issues
        Read and write to your snippets
        Read and write to your repositories and their pull requests
        Read and write to your repositories' webhooks
        Administer your repositories
        Read and write to your repositories' wikis
        Read and write to your account information
        Read/write your team's projects and move repos between them


        1. justCxx
          07.10.2015 16:02
          +3

          Это видимо для авторов уроков, они работают через bitbucket.


        1. freetonik
          07.10.2015 16:24
          +3

          Да, это для авторов уроков (которые публикуют упражнения через битбакет).
          Делаем отдельный вход для них.


  1. Lexx918
    07.10.2015 16:02
    +3

    Очень сыро и глючно. Попасть в просмотр игры можно далеко не с первого клика (выбрасывает на список). Попробовал войти как игрок, выкинуло на главную. Список игр на главной то пуст, то хаотично обновляется.

    Оба участника видят код друг друга? Не круто ж совсем. Подсматривать можно :)

    Обязательно добавьте сравнение ещё и по скорости выполнения и по объёму отжираемых ресурсов. И по объёму кода (гольферы порадуются).

    А ваще круто! Спс!


    1. toxicmt
      07.10.2015 16:09
      +3

      «Не круто ж совсем. Подсматривать можно :)» В этом один из смыслов.


      1. Urvin
        07.10.2015 16:12
        +1

        Так пока запущенный мной интерпретатор думает и вылетает, мой оппонент спокойно списывает мою задачу и становится победителем.


        1. toxicmt
          07.10.2015 16:14

          Ну так это просто бага, которую мы поправим. Главная идея батла была именно в том чтобы видеть код, это в первую очередь обучающая игра с элементами фана.


    1. toxicmt
      07.10.2015 16:10

      «Не круто ж совсем. Подсматривать можно :)» В этом один из смыслов.


  1. Zibx
    07.10.2015 16:03
    +2

    Добавьте скрытые проверки. Выпилите половину стандартной библиотеки для всех языков. Заходить в чужую игру почти никогда не получается. Когда получается — при попытке написать комментарий текст пропадает при каждом вводе новой буквы участниками.
    Сервер не тянет нагрузку, это можно решить перетащив исполнение на клиент. На сервер отдавать только в случае успеха на клиенте для валидации победы.


  1. m0sk1t
    07.10.2015 16:07
    +1

    Ваще не круто… Написал пару заданий, в итоге застопорился на мелочах, а тем временем соперник практически слизал код, пошаманил и победил… Сделайте так чтобы код открывался в конце! А ещё задания — не всегда можно интуитивно понять что требуется, приходится гадать по ассертам… Ну и выше уже написали глюки, не мешало бы проверять прежде чем выкладывать.


  1. m0sk1t
    07.10.2015 16:26
    +1

    Расширение для хрома выдало: Could not install package: 'UTILITY_PROCESS_CRASHED_WHILE_TRYING_TO_INSTALL'. Could not install package because a utility process crashed. Try restarting Chrome and trying again.

    Chromium 45.0.2454.101 Built on Ubuntu 14.04, running on LinuxMint 17.1


  1. f0rk
    07.10.2015 16:28
    +4

    Что я делаю не так?


    1. NeXTs_od
      07.10.2015 17:21

      тоже самое


    1. freetonik
      07.10.2015 17:23
      +2

      Хабраэффект, фиксим.


      1. AndersonDunai
        07.10.2015 17:51

        Таки да.


  1. prog666
    07.10.2015 16:30

    При попытке создать игру получаю ERR_EMPTY_RESPONSE. Думал отвиснет, но пол часа ничего не меняется.


    1. freetonik
      07.10.2015 17:23
      +3

      Хабраэффект, фиксим.


      1. prog666
        07.10.2015 18:57
        +3

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


      1. prog666
        08.10.2015 13:42
        +1

        Это совсем не честно, показали крутую картинку с игрой а поиграть второй день не даете…


        1. toxicmt
          09.10.2015 00:17
          +1

          Извиняемся, зафейлили так зафейлили(. Сейчас уже чуть по лучше стало, попробуйте еще разок).


          1. prog666
            09.10.2015 00:19

            Да, уже поиграл, самый быстрый способ это switch case конечно


  1. aktmtm
    07.10.2015 16:37
    +1

    А можно посмотреть запись игр?


    1. freetonik
      07.10.2015 17:23

      Пока нет, в будущем планируем что-то подобное сделать.


      1. ErhoSen
        07.10.2015 19:11
        +4

        О, это же целая индустрия! Стримы там, летсплеи. Яндекс против JetBrains, и всё такое!


  1. Mr_Romanov
    07.10.2015 18:01
    +2

    Сижу уже с час в PHP, никого, явно что-то сломалось.


  1. Jazzis
    07.10.2015 19:00

    А есть ли возможность создать закрытую игру?


  1. alhimik45
    07.10.2015 19:02

    Ещё бы добавить режим не на скорость, а на наиболее короткий код, как в codingame


  1. PikselNsk
    07.10.2015 19:36
    +5

    По-моему в вашу игру уже один из ваших же стажеров играет… game.hexlet.io


  1. justaguest
    07.10.2015 19:56
    +1

    Судя по главной странице, пока поддерживаются только ruby, php, python и JS? Было бы круто еще Haskell добавить.


  1. T-D-K
    07.10.2015 19:58

    codefights.com уже давно работает


    1. toxicmt
      08.10.2015 01:24
      +2

      Там немного другая идея. Ну и они, судя по сайту, запустились в 2015. А наш батл еще в 2014 работал).


      1. rafuck
        08.10.2015 20:38
        +1

        А в 2015-м почему не работает?


        1. toxicmt
          09.10.2015 00:21
          +1

          программировали программировали да невыпрограммировали ;(


  1. Wesha
    08.10.2015 00:31
    +9

    Победа легко достигается «индийским методом» (называю так потому, что, в моей практике, написанный индусами код, как правило, работает именно таким образом):

    def separate with commas(n)
      case n
      when "1000" then "1,000"
      when "10000" then "10,000"
      when "100000" then "100,000"
      when "1000000" then "1,000,000"
      else n
      end
    end
    

    Все тесты удовлетворены, я победил. Мозг не напрягался ;)


    1. Jazzis
      08.10.2015 06:57

      Имеет смысл тогда ещё добавить скрытые тесты, как на том же codewars.com :)


      1. Wesha
        08.10.2015 20:14

        А вообще люблю ruby. Любая задача решаема в одну строчку :)

        "1234567890".reverse.unpack('A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3').reject{|s| s == ''}.join(",").reverse


        1. fl00r
          09.10.2015 14:53

          "1234567890".reverse.chars.each_slice(3).map(&:join).join(",").reverse
          


  1. rustamer
    08.10.2015 02:28
    +2

    Соперник еще не найден, а условие задачи уже можно смотреть в developer tools браузера.


    1. rustamer
      08.10.2015 02:41

      То есть нет, соперник найден, задача выбрана, но игра еще около минуты не начинается.


      1. toxicmt
        08.10.2015 06:00
        +2

        Скоро прикроем лавочку ;)


  1. Scogun
    08.10.2015 08:29

    После нажатия кнопки "Проверить", появляется белый прямоугольник где должен быть результат, но он пустой!


    1. Scogun
      08.10.2015 08:47

      Плюс, выиграл две игры, а счетчик побед равен 0!


      1. toxicmt
        09.10.2015 20:23

        Извиняемся, были проблемы по всему фронту. Сейчас можно играть.


  1. Mecid
    08.10.2015 08:41
    +3

    Ждем когда появится Java…


  1. fl00r
    08.10.2015 16:55
    +1

    У меня уже вторые сутки не работает


    1. prog666
      08.10.2015 17:17
      +1

      ты и так 100 игр сыграл, дай другим поиграть.