Сегодня утром мне пришла интересная загадка, когда я смотрел на кнопки лифта.
Вам необходимо создать список всех образцов Брайля , которые помещаются в сетку 2x3. Используйте хэш #
для обозначения выпуклости и дефис -
для обозначения плоской области.
Ожидаемый выходной образец:
#-
--
--
##
--
--
#-
#-
--
(and so on...)
Правила:
- Ваша программа должна разделять каждый шаблон хотя бы одним символом или строкой.
- Шаблоны могут быть сгенерированы в любом порядке.
- Все образцы, независимо от того, что фактически использует алфавит Брайля, должны быть произведены. Абсолютно пустой шаблон не является обязательным.
- Должны быть сгенерированы только уникальные рисунки. Следующие модели считаются эквивалентными, поскольку неровности находятся в одинаковом расположении. В этих случаях используйте шаблон, ближайший к верхнему левому углу (т. Е. Первый вариант в этом примере.)
#- -# -- --
#- -# #- -#
-- -- #- -#
Бонусные баллы, если вы можете заставить его работать для любой сетки размером x на y . ( РЕДАКТИРОВАТЬ: В разумных пределах. До 4х4 достаточно для подтверждения концепции.)
Читая статью в вики, кажется, что есть 45 образцов (включая бланк), которые соответствуют правилам этой головоломки.
x
хy
сеток вы генерируете первые2^(xy)
числа и отфильтровываете те, которые маскируются на 0 против2^x - 1
или(2^(xy+1) - 1)/(2^y - 1)
.