Интуиция, головоломки и вычислимость (альтернативное решение)

7 Сен
2011

Прочитав статью господина dbratus‘а, удивился, почему ни одно из предложенных решений у меня никак не сходятся. Не может же такого быть!
Поэтому я захотел решить головоломку самостоятельно. И вот что у меня получилось:

Скрипт выдает верный результат, который не похож ни на ранее оглашенный dbratus‘ом, ни на предложенные в комментариях.
import random
solution_state = [0, 0, 2, 0, 0]
current_state = [0, 2, 0, 3, 1]
turn_rules = [[ 1, -1, 1, 0, 0],
[ 1, 1, 0, 0, -1],
[ 0, -1, 1, -1, 0],
[-1, 0, 0, 1, 1],
[ 0, 0, -1, 1, 1]]
step = [0, 0, 0, 0, 0]
attempt = [0, 0, 0, 0, 0]
max_one_item_turn_count = 3
attempt_count = 0
while current_state != solution_state:
current_state = [0, 2, 0, 3, 1]
step = [0, 0, 0, 0, 0]
attempt = [random.randint(0, max_one_item_turn_count) for i in range(5)]
solution = attempt
for i in range(5):
for j in range(5):
step[i] += attempt[j] * turn_rules[j][i]
current_state = [(current_state[i] + step[i]) % 4 for i in range(5)]
attempt_count += 1
print attempt_count
print current_state
print attempt

Константа max_one_item_turn_count определяет максимальное количество поворотов одной фигуры. Получается, если увеличить это число скажем до 15, то появится некоторое количество эквивалентных решений.
Спасибо
По материалам Хабрахабр.



загрузка...

Комментарии:

Наверх