company_banner

Golf от Moscow.pm для всех



    Всех с пятницей! По итогам недавно прошедшей встречи Moscow.pm я хочу предложить всем желающим посоревноваться в решении задачки.

    Гольф (англ. golf) — спортивная игра, в которой отдельные участники или команды соревнуются, загоняя маленький мячик в специальные лунки ударами клюшек, пытаясь пройти отведённую дистанцию за минимальное число ударов.
    Wikipedia

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

    Задача «Домино»: на Github

    Домино́ — игра, в процессе которой выстраивается цепь костяшек («костей», «камней»), соприкасающихся половинками с одинаковым числом очков. Таким образом каждая костяшка характеризуется парой чисел, не важно в каком порядке.
    Wikipedia

    Задача. Найти максимально длинное кольцо, которое можно составить из списка предложенных вам костяшек или вывести 0, если их нельзя закольцевать.

    Входные данные: Строка из пар чисел от 0 до 6, разделенных пробелом. Каждая пара — одна костяшка.
    Пример: 01 11 12 22 31 32
    Данные подаются на STDIN: cat data | golf.pl
    Пример ответа: 11 12 22 23 31

    Проверить работоспособность решения можно приложенным набором тестов, пока только для perl (присылайте свои пул-реквесты):
    prove test.pl

    Размер решения можно посчитать с помощью скрипта golfcount.pl:
    perl golfcount.pl golf.pl

    Решения присылайте на dzirtik@gmail.com с темой «Golf 1410». Крайний срок приема решений 31 октября 2014 23.59. Решение может быть на любом языке программирования. Для лучших решений у нас заготовлены призы.
    Mail.ru Group
    1,090.03
    Строим Интернет
    Share post

    Comments 65

      –21
      Написал в рассылке- напишу и тут:

      Иногда поражаюсь, что у людей с клевой квалификацией и опытом нет нормальных дел, чем заняться, кроме написания коммерческого говна в корпорации, а на досуге играть в игры для задротов.

      Свободный Мир ждет полноценную распределенную trustless замену скайпу, почте, ютубу, самому интернету (mesh-сети), вебу, а крутые программеры играют в «гольф». ((:
        +7
        И отчего «Свободный Мир» ждёт? Свободно может сам написать замену.
          +5
          На то он и досуг, нет?

          Кроме того, эта так называемая «игра для задротов» очень даже разминает извилины и повышает скилл. И адреналина немного тоже есть, особенно когда видна топ-таблица в лайв-режиме перед окончанием срока приема ответов )
          +1
          Так в чём проблема? Создайте задание и тесты для следующего турнира «Гольфа»: напишите наименьший по размеру распределённый клиент-сервер скайпа ;-)
            +1
            Увы, не годится — этот клиент будет без проверки валидности данных и его код будет невозможно поддерживать и развивать даже автору.
              0
              задание уровня вопроса на codegolf.stackexchange.com/ используется для рекламы… корпоративного стиля жизни ). Смешно, как-то. Неужели стремление поиграть в ребенка-хакатонщика настолько важнее написания серьезных вещей?
                –4
                неистово плюсую! задача реально настолько простая и лобовая, что и решать особо желания нет. хотя абсолютно уверено что у меня решение бы вместилось в стандартный однострочник( <=80 символов)
                  +3
                  Было бы интересно посмотреть на такое короткое решение
                –2
                я гольфил достаточно долго и много, совершенно разнообразных задач(и прямо тут на хабре даже один раз побеждал), но эта… просто феерически неинтересная.
              +1
              Давненько я не гольфил, хех… ))

              Когда-то был сайт с регулярными соревнованиями, жаль, забросили его (
              • UFO just landed and posted this here
                  +2
                  Есть JAGC: jagc.org/
                  +12
                  Решение может быть на любом языке программирования.

                  Предлагаю беспроигрышный вариант: написать решение на языке программирования "Domino".

                  Это такой скриптовый язык программирования, который правда очень ограничен в своей функциональности, синтаксис у него очень простой и содержит только 1 команду "1".

                  Собственно программа на этом языке выглядит примерно так:
                  1

                  Команда 1 выполняет следующее — она берет из STDIN пары чисел и строит из них наиболее длинное кольцо либо возвращает 0 если числа не закольцовываются.

                  Если по какой-то причине для проверки решения на этом языке у вас нет компиллятора языка «Domino» — он прилагается к решению.
                    0
                    Это я намекаю что некоторые языки программирования имеют синтаксис, который позволяет писать заведомо более короткие программы, чем на других языках, поэтому стоит все таки ограничить пул языков, тем же самым перлом, например.
                      +1
                      Спасибо, за идею, но увидеть такие решения, даже на языке domino было бы очень интересно, и они имеют полное право на участие в таких конкурсах.
                        0
                        Стоит заранее описать условие, что никакими модулями/библиотеками пользоваться нельзя. А то можно специально создать модуль Q, который все делает, и программа получится из 5 символов 'use Q'.
                          0
                          Подробные общие правила Гольфа можно посмотреть, например, здесь: thospel.home.xs4all.nl/golf/rules.html. Как раз п. 5-6 про использование модулей. Самописные модули нельзя использовать никогда, модули из базовой поставки Perl — согласно правилам конкретного соревнования.

                          Вообще, в правилах можно много нюансов накопать, если заморочиться. Но, наверное, не так уже это всё важно, главное, чтобы было интересно участникам.
                      +7
                      Пф. На Domino 9000 (форке языка Domino) программа вообще не содержит символов :D
                        +3
                        Угу, чем и сломали обратную совместимость. Большинство библиотек на d9000 не портированы.
                          +1
                          Ну так поэтому оно и форк, потому что части коммьюнити надоело подставлять костыли для обратной совместимости в этом вашем корявом domino :-)
                      0
                      Подскажите, пожалуйста, когда будет выложено видео со вчерашней встречи?
                        0
                        Привет. Видео доступно на странице трансляции, на следующей неделе оно будет выложено на нашем канале в youtube
                          0
                          Спасибо большое!
                        +2
                        Важно чтобы люди понимали, на продакшене мы на Perl так не пишем, только развлекаемся в свободное время такими вот штуками :)
                          0
                          Пример: 01 11 12 22 31 32
                          Пример ответа: 11 12 22 23 31

                          откуда там 23 в ответе?
                            +2
                            Фишки Домино можно переворачивать
                              0
                              упс, вопрос отпал — туплю после отпуска…
                            +3
                            Оффтоп, но все же:
                            «Блог компании Mail.Ru Group», а ниже «Решения присылайте на dzirtik@gmail.com».
                            Вам не кажется, что это антиреклама для своих сервисов?
                              +2
                              Этой мой древний, любимый ящик, но я им пользуюсь через мейловую мультиавторизацию image
                                0
                                Да не в этом дело, я все понимаю, все пользуются тем чем хотят, к чему привыкли, чем раньше пользовались т.п. Но все таки это ведь публичный корпоративный блог.
                                  +2
                                  Может это был тонкий подход к рекламе мейловой мультиавторизации? Кто-нибудь обратит внимание, на gmail ящик, спросит, а тут ему про такую фичу расскажут! ;-)
                                    +2
                                    Просто конкурс я запускаю не как сотрудник mail.ru, а как лидер Moscow.pm (сообщество perl-программистов). Меня знают под этим ником и с этим email. Mail.ru же, является спонсором проведения наших мероприятий и, в частности, спонсором этого соревнования.
                                0
                                Не указан требуемый порядок костей на выходе. Или, исходя из тестов, он может быть любым?
                                  0
                                  Любым, удовлетворяющим условию зациклености
                                  0
                                  Может, я проглядел, но как должны обрабатываться случаи, когда разных последовательностей максимальной длины больше одной?
                                    0
                                    Выводите любую
                                      0
                                      См. тесты. Там все максимальные последовательности забиты.
                                      +1
                                      А есть какие-нибудь ограничения по времени, и по размеру входных данных?
                                        0
                                        +1, и не только в плане эффективности алгоритма. В некоторых «странных» случаях (благо, в гольфе можно много чего придумать), нужно знать ограничение на размер данных, сам по себе.
                                          0
                                          По времени — нет. Входные данные ограничены одним набором домино, т.е. максимум 28 фишек
                                          0
                                          Получилось 155 символов. Многовато для гольфа?
                                            0
                                            Зря написали сколько символов, сейчас будут стараться перебить
                                              0
                                              Так я уже и сам перебил, другое дело что, по моим ощущениям, код-победитель будет иметь длину символов 70-80
                                                0
                                                Пока те варианты, что уже были присланы имеют гораздо больше символов
                                                  0
                                                  так оно и понятно: самые лучшие варианты все приберегают под конец ;)
                                                  0
                                                  причем эти 70-80 символов будет один волшебный регексп )
                                                  у меня лоховские 200 с хвостиком символов, я лох :/
                                                0
                                                Самое то!)
                                                0
                                                Под какую версию perl писать?
                                                  0
                                                  совместимо с 5.10
                                                  0
                                                  переворачивать костяшки обязательно или достаточно выдать правильную последовательность?
                                                    0
                                                    Обязательно, последовательность должна очевидным образом являться кольцом
                                                    0
                                                    Будут ли тесты улучшаться?
                                                    Удалось сделать решение с багом, который не ловят ваши тесты, оно будет гораздо меньше по размеру чем решение без бага.
                                                    p.s.
                                                    таких багов у меня даже несколько.
                                                      0
                                                      Да, тесты будут улучшаться, с удовольствием приму пулреквесты для тестов)
                                                      0
                                                      Если на вход поступает — «01 12 31 32», а на выходе «12 32 31», то это будет считаться правильным ответом? У меня просто костяшки на развернуты для удобства чтения человеком.
                                                      0
                                                      Текущие результаты периодически обновляются тут:
                                                      docs.google.com/spreadsheets/d/1o16QFFWTfyaFLNlIpOhIithdJJIyne8JG-KIXcnzmws/edit#gid=0
                                                        0
                                                        Похоже пора начинать учить Ruby
                                                          0
                                                          Это окончательные результаты?
                                                          +1
                                                          Хорошо бы выложить исходники всех решений на гитхаб.
                                                            +2
                                                            Привет, ближайшее время так и сделаю, спасибо!

                                                          Only users with full accounts can post comments. Log in, please.