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 812,25
    Строим Интернет
    Поделиться публикацией
    Комментарии 65
    • –21
      Написал в рассылке- напишу и тут:

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

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

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

              Когда-то был сайт с регулярными соревнованиями, жаль, забросили его (
              • НЛО прилетело и опубликовало эту надпись здесь
                • +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
                    • +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
                                              переворачивать костяшки обязательно или достаточно выдать правильную последовательность?
                                              • 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
                                                        Привет, ближайшее время так и сделаю, спасибо!

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

                                                      Самое читаемое