Не получается закончить программу с комбинациями

Krabo4eL

Новичок
Пользователь
Сен 27, 2022
7
0
1
Имеется данная задачка -
Исполнитель Акробат живет на числовой оси. Система команд исполнителя:
1. Вперед 3 (Акробат прыгает вперед на 3 единицы),
2. Назад 4 (Акробат прыгает назад на 4 единицы). (отрицательные числа допускаются).
Программа для Акробата - это последовательность команд.
Начальное положение Акробата - число 1.
В скольких различных точках может оказаться Акробат после выполнения различных программ, которые содержат ровно 9 команд?

На данный момент все что мой мозг додумался сделать это выяснить сколько вообще комбинаций есть.

Python:
import itertools
acro = [0,1]
for i in range (len(acro)+1):
    for l in (itertools.combinations_with_replacement(acro,9)):
        print(list(l))

Если что 0 - это +3, а 1 - это -4.
В ответе я получил все комбинации которые есть. По идее дальше мне надо проверить все комбинации и получить все возможные точки в которые может оказаться акробат но как это сделать я уже долгое время не могу. Я бы очень хотел сам разобраться с этой задачей, но времени для этого нету, именно поэтому я прошу помощи у вас.
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 580
457
83
вот так выглядят списки с этой строкой
Код:
(3, 3, 3, 3, 3, 3, 3, 3, 3)
(3, 3, 3, 3, 3, 3, 3, 3, -4)
(3, 3, 3, 3, 3, 3, 3, -4, -4)
(3, 3, 3, 3, 3, 3, -4, -4, -4)
(3, 3, 3, 3, 3, -4, -4, -4, -4)
(3, 3, 3, 3, -4, -4, -4, -4, -4)
(3, 3, 3, -4, -4, -4, -4, -4, -4)
(3, 3, -4, -4, -4, -4, -4, -4, -4)
(3, -4, -4, -4, -4, -4, -4, -4, -4)
(-4, -4, -4, -4, -4, -4, -4, -4, -4)
(3, 3, 3, 3, 3, 3, 3, 3, 3)
(3, 3, 3, 3, 3, 3, 3, 3, -4)
(3, 3, 3, 3, 3, 3, 3, -4, -4)
(3, 3, 3, 3, 3, 3, -4, -4, -4)
(3, 3, 3, 3, 3, -4, -4, -4, -4)
(3, 3, 3, 3, -4, -4, -4, -4, -4)
(3, 3, 3, -4, -4, -4, -4, -4, -4)
(3, 3, -4, -4, -4, -4, -4, -4, -4)
(3, -4, -4, -4, -4, -4, -4, -4, -4)
(-4, -4, -4, -4, -4, -4, -4, -4, -4)
(3, 3, 3, 3, 3, 3, 3, 3, 3)
(3, 3, 3, 3, 3, 3, 3, 3, -4)
(3, 3, 3, 3, 3, 3, 3, -4, -4)
(3, 3, 3, 3, 3, 3, -4, -4, -4)
(3, 3, 3, 3, 3, -4, -4, -4, -4)
(3, 3, 3, 3, -4, -4, -4, -4, -4)
(3, 3, 3, -4, -4, -4, -4, -4, -4)
(3, 3, -4, -4, -4, -4, -4, -4, -4)
(3, -4, -4, -4, -4, -4, -4, -4, -4)
(-4, -4, -4, -4, -4, -4, -4, -4, -4)



А так без нее
Код:
(3, 3, 3, 3, 3, 3, 3, 3, 3)
(3, 3, 3, 3, 3, 3, 3, 3, -4)
(3, 3, 3, 3, 3, 3, 3, -4, -4)
(3, 3, 3, 3, 3, 3, -4, -4, -4)
(3, 3, 3, 3, 3, -4, -4, -4, -4)
(3, 3, 3, 3, -4, -4, -4, -4, -4)
(3, 3, 3, -4, -4, -4, -4, -4, -4)
(3, 3, -4, -4, -4, -4, -4, -4, -4)
(3, -4, -4, -4, -4, -4, -4, -4, -4)
(-4, -4, -4, -4, -4, -4, -4, -4, -4)
Конечно же логично что без нее будет правильно
верное решение (по крайней мере совпадает с гуглом)
Python:
import itertools
acro = [3, -4]
acro1 = [-4, 3]
lst = []
for j in (itertools.combinations_with_replacement(acro, 9)):
    lst.append(j)
for j in (itertools.combinations_with_replacement(acro1, 9)):
    lst.append(j)
result = []
for i in lst:
    result.append(sum(i))
print(len(set(result)))
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 580
457
83
Исполнитель Акробат живет на числовой оси. Система команд исполнителя:
1. Вперед 3 (Акробат прыгает вперед на 3 единицы),
2. Назад 4 (Акробат прыгает назад на 4 единицы). (отрицательные числа допускаются).
Программа для Акробата - это последовательность команд.
Начальное положение Акробата - число 1.
В скольких различных точках может оказаться Акробат после выполнения различных программ, которые содержат ровно 9 команд?
по идеи нам нужно сравнить суммы списков которые вы получили, первый список и последний точно уникальный, то есть это уникальная позиция
далее просто сравниваем списки, и если сумма списка больше или равно чем первый, или меньше или равно чем последний, то это уникальная позиция

может не верно, ни на что не претендую
Python:
import itertools
acro = [3, -4]
lst = []
for i in range(len(acro)+1):
    for j in (itertools.combinations_with_replacement(acro, 9)):
        lst.append(j)
first = sum(lst[0])
last = sum(lst[-1])
result = []
for i in lst:
    if sum(i) >= first or sum(i) <= last:
        result.append(i)
print(len(result))
 
Последнее редактирование:
  • Мне нравится
Реакции: Krabo4eL

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 580
457
83
загуглил задачу, говорят ответ 10, но решения нет нигде...
 
  • Мне нравится
Реакции: Krabo4eL

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 580
457
83
по идеи нам нужно сравнить суммы списков которые вы получили, первый список и последний точно уникальный, то есть это уникальная позиция
далее просто сравниваем списки, и если сумма списка больше или равно чем первый, или меньше или равно чем последний, то это уникальная позиция

может не верно, ни на что не претендую
Python:
import itertools
acro = [3, -4]
lst = []
for i in range(len(acro)+1):
    for j in (itertools.combinations_with_replacement(acro, 9)):
        lst.append(j)
first = sum(lst[0])
last = sum(lst[-1])
result = []
for i in lst:
    if sum(i) >= first or sum(i) <= last:
        result.append(i)
print(len(result))
upd
поправил объяснение, не второй список а последний...
 
  • Мне нравится
Реакции: Krabo4eL

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 580
457
83
Вроде правильно, но я не могу понять одного, зачем нам искать комбинации два раза? В этом есть какой нибудь смысл?
тут надо оперировать числами, то есть суммами списков, которые мы получаем, поэтому, чтобы охватить все варианты, нужно через функцию combinations_with_replacement прогнать еще обратный список, так как [3, 3, 3, 3, -4, -4, -4, -4, -4] и [-4, -4, -4, -4, 3, 3, 3, 3, 3] - это разные числа в сумме
затем мы просто делаем set из этого списка, таким образом убираем повторения чисел, это и есть уникальные позиции
вначале я просто не посмотрел, что вы делаете в своем коде, простите
 
  • Мне нравится
Реакции: Krabo4eL

Krabo4eL

Новичок
Пользователь
Сен 27, 2022
7
0
1
Спасибо тебе большое. Долго думал и не заметил такого простого варианта.
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 580
457
83
Спасибо тебе большое. Долго думал и не заметил такого простого варианта.
так решение верное?
 

Krabo4eL

Новичок
Пользователь
Сен 27, 2022
7
0
1
Понятия не имею. Завтра узнаю правильно или нет. Так же кстати я заметил то что в коде строка
Python:
for i in range(len(acro)+1):
скорее всего лишняя, и если ее убрать то ответ будет 2.
 

Krabo4eL

Новичок
Пользователь
Сен 27, 2022
7
0
1
вот так выглядят списки с этой строкой
Код:
(3, 3, 3, 3, 3, 3, 3, 3, 3)
(3, 3, 3, 3, 3, 3, 3, 3, -4)
(3, 3, 3, 3, 3, 3, 3, -4, -4)
(3, 3, 3, 3, 3, 3, -4, -4, -4)
(3, 3, 3, 3, 3, -4, -4, -4, -4)
(3, 3, 3, 3, -4, -4, -4, -4, -4)
(3, 3, 3, -4, -4, -4, -4, -4, -4)
(3, 3, -4, -4, -4, -4, -4, -4, -4)
(3, -4, -4, -4, -4, -4, -4, -4, -4)
(-4, -4, -4, -4, -4, -4, -4, -4, -4)
(3, 3, 3, 3, 3, 3, 3, 3, 3)
(3, 3, 3, 3, 3, 3, 3, 3, -4)
(3, 3, 3, 3, 3, 3, 3, -4, -4)
(3, 3, 3, 3, 3, 3, -4, -4, -4)
(3, 3, 3, 3, 3, -4, -4, -4, -4)
(3, 3, 3, 3, -4, -4, -4, -4, -4)
(3, 3, 3, -4, -4, -4, -4, -4, -4)
(3, 3, -4, -4, -4, -4, -4, -4, -4)
(3, -4, -4, -4, -4, -4, -4, -4, -4)
(-4, -4, -4, -4, -4, -4, -4, -4, -4)
(3, 3, 3, 3, 3, 3, 3, 3, 3)
(3, 3, 3, 3, 3, 3, 3, 3, -4)
(3, 3, 3, 3, 3, 3, 3, -4, -4)
(3, 3, 3, 3, 3, 3, -4, -4, -4)
(3, 3, 3, 3, 3, -4, -4, -4, -4)
(3, 3, 3, 3, -4, -4, -4, -4, -4)
(3, 3, 3, -4, -4, -4, -4, -4, -4)
(3, 3, -4, -4, -4, -4, -4, -4, -4)
(3, -4, -4, -4, -4, -4, -4, -4, -4)
(-4, -4, -4, -4, -4, -4, -4, -4, -4)



А так без нее
Код:
(3, 3, 3, 3, 3, 3, 3, 3, 3)
(3, 3, 3, 3, 3, 3, 3, 3, -4)
(3, 3, 3, 3, 3, 3, 3, -4, -4)
(3, 3, 3, 3, 3, 3, -4, -4, -4)
(3, 3, 3, 3, 3, -4, -4, -4, -4)
(3, 3, 3, 3, -4, -4, -4, -4, -4)
(3, 3, 3, -4, -4, -4, -4, -4, -4)
(3, 3, -4, -4, -4, -4, -4, -4, -4)
(3, -4, -4, -4, -4, -4, -4, -4, -4)
(-4, -4, -4, -4, -4, -4, -4, -4, -4)
Конечно же логично что без нее будет правильно
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 580
457
83
вот так выглядят списки с этой строкой
Код:
(3, 3, 3, 3, 3, 3, 3, 3, 3)
(3, 3, 3, 3, 3, 3, 3, 3, -4)
(3, 3, 3, 3, 3, 3, 3, -4, -4)
(3, 3, 3, 3, 3, 3, -4, -4, -4)
(3, 3, 3, 3, 3, -4, -4, -4, -4)
(3, 3, 3, 3, -4, -4, -4, -4, -4)
(3, 3, 3, -4, -4, -4, -4, -4, -4)
(3, 3, -4, -4, -4, -4, -4, -4, -4)
(3, -4, -4, -4, -4, -4, -4, -4, -4)
(-4, -4, -4, -4, -4, -4, -4, -4, -4)
(3, 3, 3, 3, 3, 3, 3, 3, 3)
(3, 3, 3, 3, 3, 3, 3, 3, -4)
(3, 3, 3, 3, 3, 3, 3, -4, -4)
(3, 3, 3, 3, 3, 3, -4, -4, -4)
(3, 3, 3, 3, 3, -4, -4, -4, -4)
(3, 3, 3, 3, -4, -4, -4, -4, -4)
(3, 3, 3, -4, -4, -4, -4, -4, -4)
(3, 3, -4, -4, -4, -4, -4, -4, -4)
(3, -4, -4, -4, -4, -4, -4, -4, -4)
(-4, -4, -4, -4, -4, -4, -4, -4, -4)
(3, 3, 3, 3, 3, 3, 3, 3, 3)
(3, 3, 3, 3, 3, 3, 3, 3, -4)
(3, 3, 3, 3, 3, 3, 3, -4, -4)
(3, 3, 3, 3, 3, 3, -4, -4, -4)
(3, 3, 3, 3, 3, -4, -4, -4, -4)
(3, 3, 3, 3, -4, -4, -4, -4, -4)
(3, 3, 3, -4, -4, -4, -4, -4, -4)
(3, 3, -4, -4, -4, -4, -4, -4, -4)
(3, -4, -4, -4, -4, -4, -4, -4, -4)
(-4, -4, -4, -4, -4, -4, -4, -4, -4)



А так без нее
Код:
(3, 3, 3, 3, 3, 3, 3, 3, 3)
(3, 3, 3, 3, 3, 3, 3, 3, -4)
(3, 3, 3, 3, 3, 3, 3, -4, -4)
(3, 3, 3, 3, 3, 3, -4, -4, -4)
(3, 3, 3, 3, 3, -4, -4, -4, -4)
(3, 3, 3, 3, -4, -4, -4, -4, -4)
(3, 3, 3, -4, -4, -4, -4, -4, -4)
(3, 3, -4, -4, -4, -4, -4, -4, -4)
(3, -4, -4, -4, -4, -4, -4, -4, -4)
(-4, -4, -4, -4, -4, -4, -4, -4, -4)
Конечно же логично что без нее будет правильно
да, я не посмотрел...
это не верно... щас 5 минут
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 580
457
83
вот так выглядят списки с этой строкой
Код:
(3, 3, 3, 3, 3, 3, 3, 3, 3)
(3, 3, 3, 3, 3, 3, 3, 3, -4)
(3, 3, 3, 3, 3, 3, 3, -4, -4)
(3, 3, 3, 3, 3, 3, -4, -4, -4)
(3, 3, 3, 3, 3, -4, -4, -4, -4)
(3, 3, 3, 3, -4, -4, -4, -4, -4)
(3, 3, 3, -4, -4, -4, -4, -4, -4)
(3, 3, -4, -4, -4, -4, -4, -4, -4)
(3, -4, -4, -4, -4, -4, -4, -4, -4)
(-4, -4, -4, -4, -4, -4, -4, -4, -4)
(3, 3, 3, 3, 3, 3, 3, 3, 3)
(3, 3, 3, 3, 3, 3, 3, 3, -4)
(3, 3, 3, 3, 3, 3, 3, -4, -4)
(3, 3, 3, 3, 3, 3, -4, -4, -4)
(3, 3, 3, 3, 3, -4, -4, -4, -4)
(3, 3, 3, 3, -4, -4, -4, -4, -4)
(3, 3, 3, -4, -4, -4, -4, -4, -4)
(3, 3, -4, -4, -4, -4, -4, -4, -4)
(3, -4, -4, -4, -4, -4, -4, -4, -4)
(-4, -4, -4, -4, -4, -4, -4, -4, -4)
(3, 3, 3, 3, 3, 3, 3, 3, 3)
(3, 3, 3, 3, 3, 3, 3, 3, -4)
(3, 3, 3, 3, 3, 3, 3, -4, -4)
(3, 3, 3, 3, 3, 3, -4, -4, -4)
(3, 3, 3, 3, 3, -4, -4, -4, -4)
(3, 3, 3, 3, -4, -4, -4, -4, -4)
(3, 3, 3, -4, -4, -4, -4, -4, -4)
(3, 3, -4, -4, -4, -4, -4, -4, -4)
(3, -4, -4, -4, -4, -4, -4, -4, -4)
(-4, -4, -4, -4, -4, -4, -4, -4, -4)



А так без нее
Код:
(3, 3, 3, 3, 3, 3, 3, 3, 3)
(3, 3, 3, 3, 3, 3, 3, 3, -4)
(3, 3, 3, 3, 3, 3, 3, -4, -4)
(3, 3, 3, 3, 3, 3, -4, -4, -4)
(3, 3, 3, 3, 3, -4, -4, -4, -4)
(3, 3, 3, 3, -4, -4, -4, -4, -4)
(3, 3, 3, -4, -4, -4, -4, -4, -4)
(3, 3, -4, -4, -4, -4, -4, -4, -4)
(3, -4, -4, -4, -4, -4, -4, -4, -4)
(-4, -4, -4, -4, -4, -4, -4, -4, -4)
Конечно же логично что без нее будет правильно
нет это не верное решение, вам нужно еще обратный массив учитывать, всего 18 комбинаций, из них уже сравнивать
Python:
import itertools
acro = [3, -4]
acro1 = [-4, 3]
lst = []
for j in (itertools.combinations_with_replacement(acro, 9)):
    lst.append(j)
for j in (itertools.combinations_with_replacement(acro1, 9)):
    lst.append(j)
for i in lst:
    print(i)
 

Krabo4eL

Новичок
Пользователь
Сен 27, 2022
7
0
1
Я тут подумал. У нас всего 10 комбинаций и они чисто логически все и так уникальные и ответ на задачу должен быть 10.
 

Krabo4eL

Новичок
Пользователь
Сен 27, 2022
7
0
1
Вроде правильно, но я не могу понять одного, зачем нам искать комбинации два раза? В этом есть какой нибудь смысл?
 

Krabo4eL

Новичок
Пользователь
Сен 27, 2022
7
0
1
тут надо оперировать числами, то есть суммами списков, которые мы получаем, поэтому, чтобы охватить все варианты, нужно через функцию combinations_with_replacement прогнать еще обратный список, так как [3, 3, 3, 3, -4, -4, -4, -4, -4] и [-4, -4, -4, -4, 3, 3, 3, 3, 3] - это разные числа в сумме
затем мы просто делаем set из этого списка, таким образом убираем повторения чисел, это и есть уникальные позиции
вначале я просто не посмотрел, что вы делаете в своем коде, простите
Теперь я все понял. Спасибо вам за помощь, без вас бы я не справился.
 

Форум IT Специалистов