На этом форуме отвечают на конкретные вопросы. Фраза «я не понимаю, как решать» — это не вопрос. На вопрос «как решить задачу №X» вас отошлют к материалам сайта kpolyakov.spb.ru. За бессвязный поток слов и неспособность формулировать свои мысли — бан.

Если у вас не сходится ответ на какую-то задачу, пожалуйста сразу представляйте свое «правильное» решение.
Программы "заворачивайте" в тэг [pre2]...[/pre2], при этом сохраняются все отступы и применяется моноширинный шрифт. Если у вас используется сочетание "[i]" для обозначения элемента массива или строки, ставьте пробел после открывающей скобки. Иначе система выделит все дальнейшее курсивом.

Для регистрации на форуме щелкните по ссылке «Вход-регистрация» вверху страницы. В открывшееся окошко «ник» введите свою фамилию на русском языке (например, Иванов). В окошко «пароль» введите придуманный вами пароль, состоящий из латинских букв и цифр. Поставьте галочку в окошке «зарегистрироваться, я новый участник» и нажмите кнопку «ОК».

АвторСообщение



Сообщение: 3
ссылка на сообщение  Отправлено: 11.06.22 09:57. Заголовок: не сходится ответ № 3488


Решал 21 задание и не смог получить однозначный ответ
Решение теории игр через Excel мне не по душе, и поэтому я решаю его программой
Для решения я задания я составил следующую программу:
 
def nm(g):
tmp = []
for i in g:
tmp.append([i[0],i[1]+2])
tmp.append([i[0],i[1]*3])
tmp.append([i[0]+2,i[1]])
tmp.append([i[0]*3,i[1]])
return tmp

def cm(g):
tmp = []
for i in g:
if sum(i) >= 45:
tmp.append(True)
else:
tmp.append(False)
return tmp


for k in range(13,14):
for s in range(1,44):
if s+k > 43:
break
g = [[k,s]]
g = nm(g)
p1cm = cm(g)
if True in p1cm:
continue
g = nm(g)
v1cm = cm(g)
g = nm(g)
p2cm = cm(g)
g = nm(g)
v2cm = cm(g)

tmp = []
for i in range(0,len(v2cm)-3,4):
tmp.append(v2cm[ i] or v2cm[i+1] or v2cm[i+2] or v2cm[i+3])
for i in range(len(p2cm)):
if tmp [ i]!=p2cm[ i] and tmp[ i] == True:
p2cm[ i] = True
else:
p2cm[ i] = False

tmp = []
for i in range(0,len(p2cm)-3,4):
tmp.append(p2cm[ i] and p2cm[i+1] and p2cm[i+2] and p2cm[i+3])
for i in range(len(v1cm)):
v1cm[ i] = tmp[ i] or v1cm[ i]

tmp = []
for i in range(0,len(v1cm)-3,4):
tmp.append(v1cm[ i] or v1cm[i+1] or v1cm[i+2] or v1cm[i+3])
for i in range(len(p1cm)):
if tmp[ i] != p1cm[ i] and tmp[ i] == True:
p1cm[ i] = True
else:
p1cm[ i] = False

tmp = []
for i in range(0,len(p1cm)-3,4):
tmp.append(p1cm[ i] and p1cm[i+1] and p1cm[i+2] and p1cm[i+3])
if False not in tmp:
print(s)

g - сокращение от "graph" - слой графа возможных в игре ходов, при заданных начальных значениях кучек
nm - сокращение от "next move" - следующий ход(возвращает все возможные следующие ходы "ходящего" игрока)
cm - сокращение от "check map" - проверить карту(функция возвращает слой графа, в котором числовые значения кучек с камнями заменены на состояния победы или не победы при данном ходе)

алгоритм прост:
1)мы знаем что Ваня может выиграть своим 1 или 2 ходом, значит нам нужна хотя бы одна из 4 ветвей графа, которая на ход Вани заканчивается победой(True для cm(g))
из этого пункта следует то как я обрабатываю v1cm, v2cm(использование оператора or) - 1 и 2 ход Вани соответственно
2)также мы знаем что Ваня выигрывает после любого хода Пети, значит нам надо чтобы каждые четыре ветви хода Пети оканчивались "не победой"
из этого пункта следует то условие, с которым я обрабатываю p1cm,p2cm(tmp[ i]!=pXcm[ ] and tmp[ i] == True)
tmp[ i] хранит в себе состояние победы или не победы следующего игрока после текущего хода
помимо этого из этого пункта следует то как я сжимаю p1cm,p2cm в tmp(через оператор and)

по прохождению алгоритма список tmp хранить в себе только значения True если все условия задания выполняются,
но алгоритм говорит, что помимо 1(правильного ответа), также подходят 4 и 5

не могу понять в чём проблема
вроде логических ошибок нет

Спасибо: 0 
ПрофильЦитата Ответить
Новых ответов нет


Ответ:
1 2 3 4 5 6 7 8 9
видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 300
Права: смайлы да, картинки да, шрифты нет, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет