To jest kod golfowy. Zwycięzcą jest prawidłowy kod o najmniejszej liczbie bajtów.
Wyzwanie
Przy danych wejściowych M i N szerokość i wysokość prostokątnej siatki kwadratów daje wielokąt spełniający następujące kryteria:
- Krawędzie wielokątów składają się tylko z kwadratowych krawędzi: nie ma krawędzi ukośnych - wszystkie są pionowe lub poziome.
- Wielokąt nie ma otworów: do każdego kwadratu poza wielokątem można dotrzeć prostopadłymi krokami na kwadratach poza wielokątem, zaczynając od kwadratu poza wielokątem na zewnętrznej granicy prostokąta.
- Wielokąt nie ma własnego przecięcia: kwadratowych krawędzi spotykających się w wierzchołku nie więcej niż 2 mogą stanowić część obwodu wielokąta.
- Wielokąt jest połączony: każdy kwadrat w wielokącie musi być osiągalny z dowolnego innego kwadratu w wielokącie poprzez ortogonalne kroki, które pozostają w obrębie wielokąta.
- Wielokąt ma maksymalny możliwy obwód: zgodnie ze wzorem pokazanym poniżej.
Twój kod musi działać dla M i N od 1 do 255.
Wzór na maksymalny obwód
Wyzwanie polega na znalezieniu grywalnych wielokątów o maksymalnym obwodzie. Sam maksymalny obwód jest zawsze określony przez wzór:
Jest tak, ponieważ dla maksymalnego obwodu każdy kwadratowy wierzchołek musi znajdować się na obwodzie. W przypadku nieparzystej liczby wierzchołków nie jest to możliwe, a najlepsze, co można osiągnąć, to jeden wierzchołek mniej (ponieważ obwód jest zawsze równy).
Wynik
Wyjście kształtu jako ciąg znaków rozdzielonych znakiem nowej linii ( N wierszy dokładnie M znaków). Tutaj używam spacji dla kwadratów poza wielokątem i „#” dla kwadratów wewnątrz wielokąta, ale możesz użyć dowolnych dwóch wizualnie różnych znaków, pod warunkiem, że ich znaczenie jest spójne dla wszystkich danych wejściowych.
Możesz dołączyć do jednego wiodącego nowego wiersza i do jednego końcowego nowego wiersza.
Jeśli chcesz, możesz zamiast tego wypisać M wierszy dokładnie N znaków i możesz wybrać wyjście M na N dla niektórych danych wejściowych i N na M danych wyjściowych dla innych.
Przykłady
Nieprawidłowy z powodu dziury:
###
# #
###
Nieprawidłowy ze względu na przecięcie (dotykanie po przekątnej - wierzchołek o 4 kwadratowych krawędziach na obwodzie) i, nawiasem mówiąc, otwór:
##
# #
###
Nieprawidłowy z powodu odłączenia:
#
# #
#
Prawidłowy wielokąt maksymalnego obwodu:
# #
# #
###
Kredyty
Początkowo nie doceniałem, jak szybko można obliczyć wartość maksymalnego obwodu, i zamierzałem po prostu poprosić o tę wartość jako wynik. Dzięki cudownie pomocnym osobom na czacie za wyjaśnienie, jak obliczyć maksymalny obwód dla arbitralnych liczb N i M, i pomóc przekształcić to w wyzwanie, które przetrwa więcej niż jedną odpowiedź ...
W szczególności dzięki:
Sparr , Zgarb , feersum , jimmy23013 .