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

    Игрок может предложить только такой ЧШ, N которого больше, чем у предыдущего ЧШ. Кто предложит ЧШ с самым большим N- тот победил.

    Например, игра начинается с ЧШ(1-2-3-4-5-6), у которого N=7, так как суммируя числа, расположенные подряд, можно получить числа 1,2,4,5,6,7, но 8 получить не получается.

    Следующий участник может предложить, например, ЧШ(1-2-4-4-5-6) с N = 22. Тогда следующему нужно предложить такой ЧШ, у которого N>22. Сможете?

    Напомню: победит тот, кто предложит ЧШ с самым большим N.
      Хм. Потолок, стало быть, 31, так как на одном ЧШ можно собрать максимум 31 число - 6х5+1, 6 последовательностей длин 1-5 и одна длины 6. При этом один элемент обязательно равен 1, иначе N=0 (единицу не собрать). Значит, можно блокировать ЧШ, заставляя их начинаться с 1.
      Скрытый текст
      У меня всего один ответ пока что - (1-2-6-6-6-4), N=25. Пока не вышло найти больше или доказать, что этот максимальный.
      Долог путь в бессмертие... я еще вернусь.
      Профильный скилл "Телепатия" 8%
      ТРОЛЛЬ - Троян Разрушительный Опасный, Лучше ЛинятЬ (с) Freezing Spell
      Прошу потестить игру.
        Цитата Vesper @
        Хм. Потолок, стало быть, 31, так как на одном ЧШ можно собрать максимум 31 число - 6х5+1, 6 последовательностей длин 1-5 и одна длины 6.


        Круто!

        Цитата Vesper @
        У меня всего один ответ пока что - [спойлер], N=25. Пока не вышло найти больше или доказать, что этот максимальный.


        Кто больше?
          Цитата ya2500 @
          В это играют шестигранниками, в углах которых расположены числа. Из суммы чисел, расположенных подряд(от 1 до 6 чисел)
          Начну с придирок.
          У меня неплохое пространственное воображение, но оно отказывает, когда я пытаюсь представить такое тело.
          Непонятно, что такое угол многогранника (углы и стороны есть в многоугольниках, а в многогранниках только грани, рёбра и вершины)
          Почему числа расположены подряд? И каков смысл размещать эти числа на шестиграннике?

          А теперь из того, что понял. Числа расположены в линию или по циклу? Можно ли суммировать последнее с первым? Можно ли использовать числа больше 6?

          Цитата Vesper @
          Пока не вышло найти больше или доказать, что этот максимальный.
          Чтобы получить числа от 1 до 5 нам необходимы слагаемые 1, 2 и 4. Так что, если максимальное число ограничено 6, то эта последовательность максимальная.
          Всё написанное выше это всего лишь моё мнение, возможно ошибочное.
            Ваще не понял как суммировать.

            Добавлено
            Цитата ya2500 @
            можно получить числа 1,2,4,5,6,7,

            Тут тройка пропущена. Т.е. ряд может быть не полный, что ли?

            Добавлено
            А сколько слагаемых можно брать? У меня бесконечный ряд натур. чисел получился :lol:
            (1-1-1-1-1-1)
              Цитата Суровый @
              А сколько слагаемых можно брать?
              Полагаю, любое количество идущих подряд (считая, что первое идёт за последним, то есть последовательность можно прокручивать), но только в пределах одного круга. Так что каждое берётся не более одного раза.
              Всё написанное выше это всего лишь моё мнение, возможно ошибочное.
                Цитата amk @
                Полагаю, любое количество идущих подряд (считая, что первое идёт за последним, то есть последовательность можно прокручивать), но только в пределах одного круга. Так что каждое берётся не более одного раза.

                Блин, написал бы 6 слагаемых, делов то.
                Сообщение отредактировано: Суровый -
                  Скрытый текст
                  ExpandedWrap disabled
                    type
                     
                      TDigit = array [1..6] of Integer;
                     
                      TDigitRec = record
                        D: TDigit;
                        N: Integer;
                      end;
                     
                      TDigits = array of TDigitRec;
                     
                    procedure SwapDigit(var D1,D2:TDigitRec);
                    var
                      T: TDigitRec;
                    begin
                      T:= D1;
                      D1:= D2;
                      D2:= T;
                    end;
                     
                    function DigitStr(const D:TDigitRec): string;
                    var
                      I: Integer;
                    begin
                      Result:= '';
                      for I:= 1 to 6 do
                        Result:= Result+Format('%d-',[D.D[I]]);
                      SetLength(Result,Length(Result)-1);
                      Result:= Format('%d:  %s',[D.N,Result]);
                    end;
                     
                    procedure PrintDigit(Memo:TMemo; const Digit:TDigits);
                    var
                      I: Integer;
                    begin
                      Memo.Clear;
                      for I:= 0 to Length(Digit)-1 do
                        Memo.Lines.Add(DigitStr(Digit[I]));
                    end;
                     
                    function Summa(const D:TDigit; const Pos,Cnt:Integer): Integer;
                      function GetD(I:Integer): Integer;
                      begin
                        I:= I mod 6;
                        if I=0 then I:= 6;
                        Result:= D[I];
                      end;
                    var
                      I: Integer;
                    begin
                      Result:= 0;
                      for I:= 0 to Cnt-1 do
                        Inc(Result, GetD(Pos+I));
                    end;
                     
                    function GetN(const D:TDigit): Integer;
                    var
                      I,C: Integer;
                      S: array [1..37] of Integer;
                    begin
                      Result:= 0;
                      for I:= 1 to 37 do S[I]:= 0;
                      for I:= 1 to 6 do
                        for C:= 1 to 6 do
                          Inc(S[Summa(D,I,C)]);
                     
                      for I:= 1 to 37 do
                        if S[I]=0 then
                          Exit(I-1);
                    end;
                     
                    { TForm1 }
                     
                    procedure TForm1.Button1Click(Sender: TObject);
                    var
                      I1,I2,I3,I4,I5,I6: Integer;
                      D: TDigit;
                      N: Integer;
                      A: TDigits;
                    begin
                      for I1:= 1 to 6 do
                        for I2:= 1 to 6 do
                          for I3:= 1 to 6 do
                            for I4:= 1 to 6 do
                              for I5:= 1 to 6 do
                                for I6:= 1 to 6 do
                                  begin
                                    D[1]:= I1;
                                    D[2]:= I2;
                                    D[3]:= I3;
                                    D[4]:= I4;
                                    D[5]:= I5;
                                    D[6]:= I6;
                                    N:= GetN(D);
                                    if N<>0 then
                                      begin
                                        SetLength(A,Length(A)+1);
                                        A[Length(A)-1].D:= D;
                                        A[Length(A)-1].N:= N;
                                      end;
                                  end;
                     
                      for N:= Length(A) downto 1 do
                        for I1:= 1 to N do
                          if A[I1-1].N<A[I1].N then
                            SwapDigit(A[I1-1],A[I1]);
                     
                      PrintDigit(Memo1,A);
                    end;

                  Прикреплённый файлПрикреплённый файлResult.zip (73,59 Кбайт, скачиваний: 79)

                  Добавлено
                  Vesper, как ты свою последовательность нашел? Каждое число в ручную проверял, что ли?
                    Цитата Суровый @
                    Каждое число в ручную проверял, что ли?
                    Цепочка 2, 1, 4 сама напрашивается. Дополнить шестёрками и вот она - последовательность.

                    С суммой 25 все последовательности идентичны (отличаются только прокруткой и направлением)
                    Всё написанное выше это всего лишь моё мнение, возможно ошибочное.
                      Если слагаемые ограничены величиной 6, то наилучшая сумма 25 с последовательностью:
                      Скрытый текст
                      1, 4, 6, 6, 6, 2

                      А если величину слагаемых не ограничивать, то можно получить и все суммы до 31:
                      Скрытый текст
                      1, 3, 2, 7, 8, 10


                      Добавлено
                      Оба варианта единственные.
                      Всё написанное выше это всего лишь моё мнение, возможно ошибочное.
                        Цитата amk @
                        А если величину слагаемых не ограничивать, то можно получить и все суммы до 31:

                        А как ты узнал?
                          Так же как и ты, программу написал. Перебрал все комбинации из 6 чисел от 1 до некоторого значения. Проверять слагаемые больше 16 нет смысла, так как иначе не удастся набрать 15 (общая сумма равна 31)

                          Но с единственностью второго решения я наврал (в первый раз проверял числа только до 10). На самом деле их пять
                          Скрытый текст
                          1, 3, 2, 7, 8, 10
                          1, 2, 7, 4, 12, 5
                          1, 2, 5, 4, 6, 13
                          1, 3, 6, 2, 5, 14
                          1, 7, 3, 2, 4, 14


                          Добавлено
                          А вот и программа (файл выдачи сортировал потом отдельно)
                          ExpandedWrap disabled
                            #! /usr/bin/env python3
                            # -*- coding: utf-8 -*-
                             
                            from itertools import product
                             
                            N = 6
                            M = 16
                             
                            def all_variants(s):
                                r = range(len(s))
                                for i in r:
                                    yield s[i:] + s[:i]
                                    yield s[i::-1] + s[:i:-1]
                             
                            def variants(n, m):
                                for s in product(range(1, m+1), repeat=n):
                                    if all(s <= v for v in all_variants(s)):
                                        if sum(s) == 31: yield s
                                        #yield s
                             
                            def sums(s):
                                n = len(s)
                                r = {sum(s)}
                                for l in range(1, n):
                                    for i in range(n):
                                        r.add(sum((s + s)[i: i+l]))
                                return r
                             
                            def main():
                                t = set(range(1, N*(N - 1) + 3))
                                outfile = open('SeqSums.txt', 'wt')
                                for s in variants(N, M):
                                    r = sums(s)
                                    x = min(t.difference(r)) - 1
                                    print('%3d'%x, s, file=outfile)
                                outfile.close()
                             
                            if __name__ == '__main__':
                                main()
                          Всё написанное выше это всего лишь моё мнение, возможно ошибочное.
                            Победителем признаётся amk.

                            Цитата amk @
                            если величину слагаемых не ограничивать, то можно получить и все суммы до 31:

                            Цитата ya2500 @
                            Из суммы чисел, расположенных подряд(от 1 до 6 чисел),


                            Величина слагаемых не ограниченна. Однако, ограничено их кол-во; и, да- каждое можно использовать лишь один раз.

                            Однако, игры не получилось и не получится- слишком близок к полу потолок.

                            А что если получать не "последовательно числа натурального ряда, до некоторого N включительно", а, например, "последовательно простые числа, до некоторого N включительно" ?? - если хочется чего-то, над чем голову поломать ))
                                Цитата Суровый @
                                Vesper, как ты свою последовательность нашел? Каждое число в ручную проверял, что ли?

                                Логикой. На бумажке. Обнаружил, что если единицу поставить между 2 и 4, получается весело, и следующее число, которое надо добавить в ЧШ, должно быть 6. В итоге шестерками добил, прифигел, выложил.

                                Цитата ya2500 @
                                "последовательно простые числа, до некоторого N включительно"

                                Ну опять, надо иметь 2 и 3 заведомо (или 2 и 1, но смысла в единице нет для дальнейших простых чисел - они нечетные), дальше полный перебор. Потолком будет число P(31)=127, но из-за нерегулярности ряда потолок наверно не достать. А проверяется точно так же как у amk.
                                Долог путь в бессмертие... я еще вернусь.
                                Профильный скилл "Телепатия" 8%
                                ТРОЛЛЬ - Троян Разрушительный Опасный, Лучше ЛинятЬ (с) Freezing Spell
                                Прошу потестить игру.
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script Execution time: 0,1613 ]   [ 19 queries used ]   [ Generated: 18.11.19, 21:52 GMT ]