Сперва думал что нашел решение с 5ю попытками, потом решил проверить кодом: для 5и и меньше попыток решения не нашел, для 6и 1056 разных решений, причем последний ход не всегда заканчивается поднятием последнего стакана.
Или же мой код неверен.
Решение в лоб для 5и попыток:
wins = 0
# i1, i2, i3 и тд - выбор стакана на 1ом, 2ом, 3ем и тд шагах соответственно
for i1 in xrange(1, 11):
for i2 in xrange(1, 11):
for i3 in xrange(1, 11):
for i4 in xrange(1, 11):
for i5 in xrange(1, 11):
win = 0
# j - начальное положение шарика
# pos1, pos2, pos3 и тд
# - положение шарика в начале 1ого, 2ого, 3его и тд хода
for j in xrange(1, 11):
pos1 = min(j + 0, 10)
pos2 = min(j + 1, 10)
pos3 = min(j + 2, 10)
pos4 = min(j + 3, 10)
pos5 = min(j + 4, 10)
if i1 == pos1 or i2 == pos2 or i3 == pos3\
or i4 == pos4 or i5 == pos5:
win += 1
if win == 10:
print i1, i2, i3, i4, i5
wins += 1
print wins
Решение в лоб для 6и попыток:
wins = 0
# i1, i2, i3 и тд - выбор стакана на 1ом, 2ом, 3ем и тд шагах соответственно
for i1 in xrange(1, 11):
for i2 in xrange(1, 11):
for i3 in xrange(1, 11):
for i4 in xrange(1, 11):
for i5 in xrange(1, 11):
for i6 in xrange(1, 11):
win = 0
# j - начальное положение шарика
# pos1, pos2, pos3 и тд
# - положение шарика в начале 1ого, 2ого, 3его и тд хода
for j in xrange(1, 11):
pos1 = min(j + 0, 10)
pos2 = min(j + 1, 10)
pos3 = min(j + 2, 10)
pos4 = min(j + 3, 10)
pos5 = min(j + 4, 10)
pos6 = min(j + 5, 10)
if i1 == pos1 or i2 == pos2 or i3 == pos3\
or i4 == pos4 or i5 == pos5 or i6 == pos6:
win += 1
if win == 10:
print i1, i2, i3, i4, i5, i6
wins += 1
print wins