Dzisiaj jest Purim, w którym jednym ze zwyczajów jest rozdawanie ciasteczek w kształcie trójkąta z nadzieniem zwanych hamantaschen (liczba pojedyncza: hamantasch ). Innym zwyczajem jest picie dużych ilości.
Nie jestem najdoskonalszym piekarzem ... Mam tak wiele nieregularnych rozmiarów hamantaschen do rozdania i tylu przyjaciół, którzy mogą je dać! Jeśli przesłałem Ci zdjęcie moich ciasteczek, czy możesz mi powiedzieć, ile mam ich rozmiarów i wypełnienia? Ale ponieważ jest to Purim i jestem zbyt pijany, aby czytać dużo kodu, musi on być tak mały, jak to tylko możliwe.
Definicje
Rozmiar
Hamantasch może mieć dowolny rozmiar . Najmniejszy hamantasch ma rozmiar 1 i wygląda następująco:
/\ --
-- \/
Czasami wiele hamantaschen może się nakładać . Poniższy kształt liczy się jako dwa hamantaschen (jeden rozmiar 1, jeden rozmiar 2):
/\
/\ \
----
Niektóre hamantaschen mają nadzienie . Zostanie to wskazane poprzez wypełnienie wszystkich białych znaków wewnątrz znakiem. Pamiętaj, że hamantaschen rozmiar 1 nie może mieć wypełnienia.
Będziemy wymienić Hamantaschen podstawie napełniania i wielkości. Użyjmy formatu, <filling> <size>
a jeśli nie zostanie wypełniony - <size>
(zamiast spacji możesz użyć spacji -
, ale przecena nie lubi tego).
Oto a . 2
, a . 4
i a - 3
:
/\
/./\
---- /./ \
\../ /./ \
\/ --------
Są to: @ 3
a . 2
oraz a - 4
:
/\
/ /\
/\ / /@@\
/..\ / /@@@@\
---- --------
Oto coś trudniejszego. Widzisz, jak & 2
ma mniej wypełnienia, niż można się spodziewać ze względu na nachylenie nakładania się - 3
? Ma a - 1
, & 2
a - 3
i a & 4
:
--------
\ \/&/
\ /\/
\/&/
\/
Wejście
Otrzymasz plik tekstowy lub pojedynczy ciąg hamantaschen (opcjonalnie końcowy znak nowej linii i opcjonalnie dopełniony końcowy biały znak, aby być parzystym).
Granice
- Możesz oczekiwać, że łańcuch będzie prawidłowy - to znaczy, że każda postać niebiałego znaku przyczynia się do cudownie słodkiego hamantascha (po co marnować ciasto?).
- Można również oczekiwać, iż zostanie poprawnie wypełniony lub nie - to znaczy każdy hamantaszen zostanie całkowicie wypełniony spójny znak ASCII - ASCII 32 niewypełnionych lub cokolwiek 32..127 dla wypełniony (z wyjątkiem
/
,\
i-
). - Te hamantaschen nie są układane w stosy na 3 pola . Wszystko
/
i\
będzie widoczne. Wszystkie-
, które nie są zablokowane/
i\
będą widoczne. Wypełnianie jest ostatnie. - Wszystkie hamantaschen będą miały co najmniej połowę linii poziomej (zaokrąglenie w górę).
- Każdy ciągły blok wypełnienia wypełnia tylko najmniejszy hamantasch, który go otacza.
Wynik
Zwróć listę „nazw” wszystkich hamantaschen, które można znaleźć spełniające powyższe kryteria. Dane wyjściowe mogą mieć dowolną formę (ciąg, skrót, stdout itp.).
Przypadki testowe
Przypadek testowy nr 1
Wejście nr 1:
/\
/ /\
/\ / /@@\
/..\ / /@@@@\
---- --------
/\
/**\
/*/\*\
/*/..\*\
--------
Wyjście nr 1:
. 2
. 2
- 4
@ 3
* 4
Przypadek testowy nr 2
Wejście nr 2:
/\----
/\/\*\/
/ /\d\/
------
Wyjście nr 2:
- 3
- 2
d 2
- 1
* 2
- 1
Test nr 3
Wejście nr 3:
----
\/\/
/\/\ /\
---- /::\
----
Wyjście nr 3:
- 1
- 1
- 2
- 1
- 1
- 2
: 2
Test nr 4
Wejście nr 4:
/\/\
/ /\$\
-/--/\\
--/--\
/xxx/\
/xxx/##\
---/----\
/ \
--------
Wyjście 4:
$ 2
x 4
- 3
- 2
- 4
- 1
- 1
# 2
Nieprawidłowy przypadek testowy nr 5
Wejście:
/\
\/
Wynik:
Nie musisz sobie z tym poradzić.
źródło
/
i\
, i-
zawsze będzie wypełnienie atutem.(1,0)
, są wyłączone+1
. Wiem jednak, co masz na myśli i nie zgadzam się. Jakie jest wskazanie, że(2, 2)
jest to górny środek a,- 2
a nie tylko górny prawy i lewy z dwóch górnych- 1
s? Brak, który widzę. Ta sama logika dotyczy(3, 2)
. Chyba że chcesz dodać regułę zakładającą maksymalne możliwe hamantaschen ...Odpowiedzi:
C #,
496452 bajtówEdycja: znalazłem błąd z sprawdzaniem granic ... ale także rozłożył ładunek bajtów, zmuszony do zrozumienia mojego własnego kodu. Rozwijanie funkcji lokalnej nieco pomogło i usunęło kod specyficzny dla C # 7. To pytanie było świetną zabawą.
Wypróbuj online
Kompletny program, oczekuje wypełnienia spacją wejścia do standardowego wejścia, wyjścia do standardowego wyjścia. Dane wyjściowe to jeden wpis w wierszu z końcowym przesuwem wiersza. Pliki cookie są wyprowadzane w rosnącej kolejności, od lewej do lewej strony. Zrozumienie zasad zajęło mi sporo czasu, ale myślę, że spełnia wszystkie podane przykłady.
Działa poprzez wielokrotne przeszukiwanie całej siatki pod kątem prawidłowego Hamantaschen, zwiększając „dozwolony” rozmiar. Dla każdej komórki sprawdza w górę i w dół, postępując zgodnie z
\
i/
po obu stronach, o ile to możliwe. Jeśli zauważy, że następny wiersz ma wiele-
, a bieżący rozmiar jest „dozwolonym” rozmiarem, wówczas określa wypełnienie i drukuje wpis.Wypełnienie można znaleźć, badając całą przestrzeń pliku cookie, szukając „nieużywanej” komórki. Gdy nieużywana komórka zostanie znaleziona, jest oznaczona jako używana (ponieważ zwiększamy dozwolony rozmiar, wiemy, że jesteśmy najmniejszym ciasteczkiem, które ją zawiera) i rejestrujemy wypełnienie.
Sformatowany i skomentowany kod:
Dane wyjściowe dla 4 przypadków testowych:
źródło