На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Оставь надежду всяк сюда входящий
1) На раздел распространяются все правила форума.
2) Ответы на головоломки необходимо давать только в теге SPOILER. Сообщения в обход этого правила будут удаляться. Постоянное
нарушение данного пункта правил, повлечет за собой наказание.
3) Автор темы должен указать, известно ли ему решения задачи и сроки в которые он опубликует решение.Рекомендуется вести список отгадавших в первом сообщении.
4) При создании новой темы, в описании или в самом названии четко укажите разновидность задачи.
5) Полная версия правил раздела, находится в теме правила раздела.
Модераторы: Братец Лис
  
> Игра: автобиографические числа
    Автобиографические числа описывают сами себя. То есть, первая его цифра показывает количество его нулей, вторая - количество единиц, третья - количество двоек, и так далее. Таким образом, максимальное автобиографическое число - десятизначное.

    Правила игры:

    0. Я начинаю игру, назвав первое автобиографическое число.

    1. Каждый ход заключается в том, что участник называет следующее одно автобиографическое число(и получает +5 игровых баллов); либо указывает на ошибку одного из предыдущих участников(баллы за ошибочный ход отбираются, а указавший получает +10 баллов, вместо 5); либо заявляет, что уже все автобиографические числа названы(см п.4).

    1.5 Например, если окажется, что я назвал не первое автобиографическое число или если окажется, что участник назвал не автобиографическое число или если окажется, что участник пропустил какое-то автобиографическое число, или преждевременно сделал заявление, что все автобиографические числа названы, это всё считается ошибками. За один ход можно указать лишь на одну ошибку. Назвавший ошибку должен её наглядно показать, что это действительно ошибка(в некоторых случаях, для этого придётся назвать пропущенное автобиографическое число).

    2. Один и тот же участник может делать ходы не чаще, чем раз в двое суток. То есть, разница между его сообщениями должна быть не менее 48 часов, чтобы дать шанс и остальным.

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

    4. Если было сделано заявления о том, что все автобиографические числа уже названы; и если это заявление не было опровергнуто в течении 7 суток, сделавший это заявление получает +50 баллов, игра на этом заканчивается и побеждает участник, заработавший больше всех баллов.

    ===

    Первое автобиографическое число = 1210, поехали!

    Добавлено
    P.S.

    В теме допускаются и не игровые сообщения(комментарии, обсуждения, прочее).
      2020

      Добавлено
      Скрытый текст
      Если меня не глючит, их всего семь.
      Сообщение отредактировано: Vesper -
      Долог путь в бессмертие... я еще вернусь.
      Профильный скилл "Телепатия" 8%
      ТРОЛЛЬ - Троян Разрушительный Опасный, Лучше ЛинятЬ (с) Freezing Spell
      Прошу потестить игру.
        Сложна. Проще программу написать :)
        Подпись была включена в связи с окончанием срока наказания
          21200
          Цитата OpenGL @
          Проще программу написать

          +1
          Брутфорсом на VB6 все 7 чисел находятся за 13 секунд на средненьком ПК, ещё 6 минут продолжается полная проверка оставшихся чисел.
            Цитата Mikle @
            Брутфорсом на VB6 все 7 чисел находятся за 13 секунд на средненьком ПК, ещё 6 минут продолжается полная проверка оставшихся чисел.


            Хмм... проверка всех чисел, до десятизначных включительно - около 6 минут на средненьком ПК? Я думал, на порядки дольше будет.

            Цитата OpenGL @
            Сложна. Проще программу написать :)


            Ну, тогда, можно подумать, как сделать более быстрый алгоритм.

            Добавлено
            Цитата Vesper @
            Если меня не глючит, их всего семь.


            Vesper, ты тоже прогу написал? )
              Оптимизировал почти вдвое, теперь находит все за 8 сек., а доходит до конца за 3:38.
              Вот с исходником.

              Прикреплённый файлПрикреплённый файлNumbers.zip (5,36 Кбайт, скачиваний: 76)
                Цитата ya2500 @
                Vesper, ты тоже прогу написал? )

                Нет, руками перебирал. :) Оказалось эффективнее, чем писать прогу.
                Долог путь в бессмертие... я еще вернусь.
                Профильный скилл "Телепатия" 8%
                ТРОЛЛЬ - Троян Разрушительный Опасный, Лучше ЛинятЬ (с) Freezing Spell
                Прошу потестить игру.
                  Цитата Mikle @
                  Брутфорсом на VB6 все 7 чисел находятся за 13 секунд на средненьком ПК, ещё 6 минут продолжается полная проверка оставшихся чисел.

                  Как-то долго.
                  Питон, наверное не средненький, но всё-таки винтеловский комп, правда под линуксом
                  18 ms если юпитер нам не врёт...

                  Скрытый текст


                  ExpandedWrap disabled
                    use_count = [0]*10 # Уже использовано
                     
                    dec_count = [0]*10 # Уже продекларировано
                     
                    dst_variants = []
                     
                    def _push_variant( variant ) :
                        dst_variants.append( variant.copy() )
                        print( f"{len( dst_variants )}:{dst_variants[-1]}" )
                        
                    def _add_subvariants( variant_len, variant_sum ) :
                        assert dec_count[variant_len] == 0
                        for i in range( min( 11-variant_sum , 10) ) :
                            dec_count[variant_len] = i
                            if variant_len >= i and use_count[i] >= dec_count[i] :
                                continue # Больше цифру i использовать нельзя!
                            use_count[i] += 1
                            if use_count == dec_count :
                                _push_variant( dec_count[:variant_len + 1] )
                            if variant_len < 9 :
                                _add_subvariants( variant_len + 1, variant_sum + i )
                            use_count[i] -= 1
                        dec_count[variant_len] = 0
                        
                    def find_variants() :
                        for i in range(1, 10) :
                            dec_count[0] = i
                            use_count[i] = 1
                            if dec_count == use_count :
                                _push_variant( dec_count[:1] )
                            _add_subvariants( 1, i )
                            use_count[i] = 0
                     
                    find_variants()


                  Выводит
                  1:[1, 2, 1, 0]
                  2:[2, 0, 2, 0]
                  3:[2, 1, 2, 0, 0]
                  4:[3, 2, 1, 1, 0, 0, 0]
                  5:[4, 2, 1, 0, 1, 0, 0, 0]
                  6:[5, 2, 1, 0, 0, 1, 0, 0, 0]
                  7:[6, 2, 1, 0, 0, 0, 1, 0, 0, 0]
                    Цитата ChuIu @
                    Как-то долго.
                    Питон, наверное не средненький, но всё-таки винтеловский комп, правда под линуксом
                    18 ms если юпитер нам не врёт...

                    Дык, то нормальный алгоритм, а то брутфорс по множеству чисел. :D
                    Долог путь в бессмертие... я еще вернусь.
                    Профильный скилл "Телепатия" 8%
                    ТРОЛЛЬ - Троян Разрушительный Опасный, Лучше ЛинятЬ (с) Freezing Spell
                    Прошу потестить игру.
                      ChuIu, результат отличный, но дело тут не в VB vs Python, надо будет вникнуть в алгоритм, правда я в этом ЯП ноль, было бы что-то типа сишки-явы - разобрался бы быстро.
                      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                      0 пользователей:


                      Рейтинг@Mail.ru
                      [ Script Execution time: 0,2248 ]   [ 19 queries used ]   [ Generated: 4.04.20, 20:35 GMT ]