Ciekawa łamigłówka przyszła mi dziś rano, patrząc na przyciski windy.
Musisz wygenerować listę wszystkich wzorów brajlowskich pasujących do siatki 2x3. Użyj skrótu, #
aby oznaczyć wypukłość, a łącznika, -
aby oznaczyć płaski obszar.
Oczekiwana próbka wyjściowa:
#-
--
--
##
--
--
#-
#-
--
(and so on...)
Zasady:
- Twój program musi oddzielić każdy wzór co najmniej jednym znakiem lub linią.
- Wzory mogą być generowane w dowolnej kolejności.
- Wszystkie wzory, niezależnie od tego, czego faktycznie używa alfabet Braille'a, powinny zostać wyprodukowane. Całkowicie pusty wzór jest opcjonalny.
- Należy generować tylko unikalne wzorce wypukłości. Następujące wzory są uważane za równoważne, ponieważ guzy mają identyczny układ. W takich przypadkach użyj wzoru znajdującego się najbliżej lewego górnego rogu (tj. Pierwszej opcji w tym przykładzie).
#- -# -- --
#- -# #- -#
-- -- #- -#
Dodatkowe punkty, jeśli można zrobić to praca dla każdego x przez y wielkości siatki. ( EDYCJA: W rozsądnych granicach. Do potwierdzenia koncepcji wystarcza 4x4).
Po przeczytaniu artykułu na wiki okazuje się, że jest 45 wzorów (w tym pustych), które spełniają zasady tej układanki.
x
xy
generujesz pierwsze2^(xy)
liczby i odfiltrowujesz te, które maskują do 0 przed2^x - 1
lub(2^(xy+1) - 1)/(2^y - 1)
.