Я пытаюсь создать способ решить проблему, где нет таблицы 3x4 с отсутствующими четырьмя углами. Цель состоит в том, чтобы создать алгоритм для заполнения этой таблицы числами от 1 до 8, где ни один из этих чисел не может быть 1 блоком, близким к ячейке его предыдущего номера (например: 2 не может быть близок к 1), как в вертикальном , горизонтально и по диагонали.MemoryError и генераторы
Поскольку я новичок в программировании, я, вероятно, делаю это неправильно, я создаю список всех возможных мест размещения чисел в ячейках. Но с сеткой 3x4-4 это около 8^8 возможных случаев (от [1,2,3,4,5,6,7,8] до [8,7,6,5,4,3,2, 1])
Я делаю это, потому что моя первая идея заключалась в том, чтобы сделать функцию для проверки данных, если она соответствует критериям впоследствии, не требуя генерации чисел каждый раз. Я использую pickle для вывода данных в txt-файл. Но файл 280 Мб, и он замораживает мой компьютер на пару минут, а затем печатает ошибку памяти.
Извините, если это не имеет смысла, я начал программировать месяц назад.
Мой текущий код для создания этого списка является:
for a in xrange(1,9):
for b in xrange(1, 9):
for c in xrange(1, 9):
for d in xrange(1, 9):
for e in xrange(1, 9):
for f in xrange(1, 9):
for g in xrange(1, 9):
for h in xrange(1, 9):
if a != (b and c and d and e and f and g and h) and b != (
a and c and d and e and f and g and h) and c != (
b and a and d and e and f and g and h) and d != (
b and c and a and e and f and g and h) and e != (
b and c and d and a and f and g and h) and f != (
b and c and d and e and a and g and h) and g != (
b and c and d and e and f and a and h) and h != (b and c and d and e and f and g and a):
probs.append((a, b, c, d, e,f,g,h))
И, возможно, вы захотите изучить «itertools», чтобы создать свои конкретные комбинации. –
Вы должны серьезно рассмотреть ['itertools.product'] (http://docs.python.org/2/library/itertools.html#itertools.product) – thefourtheye
Вы создаете массив с элементами 9x9x9x9x9x9x9x9, и эти элементы массивы из 8 чисел. Это огромно. – Barmar