Шаблон Tri angular чисел | FooBar - PullRequest
2 голосов
/ 06 мая 2020

Я пытаюсь создать шаблон ниже, используя приведенный ниже код.

7
4 8
2 5 9
1 3 6 10
def createpattern(n=4,max_val=10):
    pattern = []
    for x in range(1,n+1):
        temp = []
        step = 2
        val = x
        bool_flag = 1
        while bool_flag == 1:
             temp += [val]
             if val == max_val:
                 print('----->')
                 bool_flag = 0
                 print('before break')
                 break
             else:
                val = val + step
                step += 1

        print('after break')
        print(temp)
        max_val = max_val - 1
        pattern.append(temp)

Разрыв ниже, пока l oop работает должным образом однако в первой строке диапазон диапазон для l oop не переходит к следующему значению итерации, он застрял на 1.

Я попытался добавить продолжение в конце после добавления , однако l oop все еще застрял.

Я не могу найти способ исправить вышеупомянутый вложенный l oop, в идеале он должен перейти к следующему значению итерации, которое я не могу понять почему

Любые лиды будут полезны

Ответы [ 3 ]

1 голос
/ 06 мая 2020

При вызове функции с аргументами по умолчанию и просмотре ее в отладчике на второй итерации она производит [2, 4, 7, 11, 16 ... и продолжается бесконечно. Поскольку ни одно из этих значений не равно max_val, val == max_val никогда не является истинным. После изменения на if val >= max_val: я получаю следующий результат:

----->
before break
after break
[1, 3, 6, 10]
----->
before break
after break
[2, 4, 7, 11]
----->
before break
after break
[3, 5, 8]
----->
before break
after break
[4, 6, 9]
0 голосов
/ 08 мая 2020

Мне удалось решить эту проблему, подход, который я использовал, был очень наивным, и мне пришлось немного исследовать шаблоны

Полезную ссылку для любых формул последовательности шаблонов можно найти здесь - здесь

С течением времени числа в требуемом шаблоне имеют тенденцию следовать тенденции и являются прямым производным от Tri angular Числа

Фрагмент кода -

def createpattern(x, y):
    pattern = []

    traingular_nums = [n*(n+1)/2 for n in range(1,y+x+1)]

    pattern.append(traingular_nums)

    for i in range(2,x+y+1):
        k = (i*(i-1)/2) + 1  <----- Formulae for Triangular Numbers
        temp = []
        temp.append(k)
        for z in range(1,len(pattern[i-2])-1):
            v = temp[z-1] + pattern[i-2][z+1] - pattern[i-2][z]
            temp.append(v)
        pattern.append(temp)
return pattern

Шаблон был частью Google Foobar Challenge

0 голосов
/ 06 мая 2020

l oop зависает из-за условия if val == max_val и неправильных вычислений шага. Когда создается вторая строка, начальное значение step должно быть 3, а не 2. В настоящее время получается результат [2, 4, 7, 11, ...], а l oop никогда не завершается, поскольку в массиве никогда не бывает 9. Это относится и к остальным строкам.

...