Я был на карнавале, где в каждом месте они отмечали вашу программу специальным ударным ударом. Пуансон - сетка пространств 3x3. В каждом пространстве есть либо штырь, который проколовает вашу бумагу, либо нет. Это заставило меня задаться вопросом, сколько разных шаблонов вы могли бы сделать с помощью этого инструмента. Моя первая мысль была: 2 ^ 9 = 512, но все 9 пробелов, являющихся бескамерными, на самом деле не являются ударами, так что действительно: 511.
Тогда сложность ударила меня. Тем более, что рабочие не так осторожны, когда они ударяют вашу бумагу, все они выглядят идентично:
x.. .x. ... etc.
.x. x.. .x.
... ... ..x
Вопрос: Как можно записать тест для учета вращения и смещения?
Доверенность и мысли до сих пор:
- Двоичный элемент чувствует себя как очевидная часть этого уравнения.
- Когда найден уникальный шаблон, сохраните его в памяти, чтобы будущие шаблоны могли быть протестированы против него.
- Есть 4 возможности поворота.
Изменить: То, что я подразумеваю под" вращениями", это то, что вы можете принять любую форму и повернуть ее на 90 градусов. Рассмотрим шаблон, который является точкой в верхнем левом углу. Вы можете поворачивать/поворачивать его на 90 градусов и получить точку в верхнем правом углу. Сделайте это снова, и это в правом нижнем углу. Снова и это в левом нижнем углу. Используя чистый расчет 2 ^ 9, это 4 разные комбинации. Однако для этой проблемы это именно те дубликаты, которые я пытаюсь вытеснить. - Для каждого вращения существует 25 способов перекрытия сетки 3х3:
Перекрытия:
/ = the spaces in the new one to test
\ = the spaces in a verified unique one
1 2 25
/ / / . . . . . / / / . . . . . . . . . .
/ / / . . . . . / / / . . . . . . . . . .
/ / X \ \ . . . / X X \ . . . . \ \ \ . .
. . \ \ \ . . . . \ \ \ . . . . \ \ \ . .
. . \ \ \ . . . . \ \ \ . . . . \ \ X / /
. . . . . . . . . . . . . . . . . . / / /
. . . . . . . . . . . . . . . . . . / / /
- Наложение не нужно проверять, если какой-либо шаблон содержит контакт, который не находится в области перекрытия. Побитовое И может помочь здесь.
- Если вы сделаете каждую позицию для каждого из двух шаблонов в строках, вы можете просто проверить равенство
- Можно ли объединить эти две идеи для повышения эффективности?