Każdy regularny sześciokąt może być wyłożony diamentami, na przykład w podobny sposób (skradziony z tego pytania ):
______
/_/_/\_\
/_/\_\/\_\
/\_\/_/\/_/\
\/_/\_\/_/\/
\_\/_/\_\/
\_\_\/_/
Rozważymy powyższe kafelki o rozmiarze 1 (ponieważ boki diamentów są wykonane z jednego / \ każdego). Ta sama płytka wielkości 2 wyglądałaby następująco:
____________
/ / /\ \
/___/___/ \___\
/ /\ \ /\ \
/___/ \___\/ \___\
/\ \ / /\ / /\
/ \___\/___/ \/___/ \
\ / /\ \ / /\ /
\/___/ \___\/___/ \/
\ \ / /\ \ /
\___\/___/ \___\/
\ \ \ / /
\___\___\/___/
Twoim zadaniem jest obrócenie diamentowych nachyleń o wielokrotność 60 stopni. Diamentowe kafelki na wejściu mogą mieć dowolny rozmiar (a rozmiar nie jest wyraźnie określony na wejściu). Ale zawsze będzie to prawidłowe kafelkowanie, a wszystkie boki sześciokąta będą miały tę samą długość.
Są to powyższe przykłady obrócone o 60 stopni w prawo:
______
/_/\_\_\
/\_\/_/\_\
/\/_/\_\/_/\
\/\_\/_/_/\/
\/_/\_\_\/
\_\/_/_/
____________
/ /\ \ \
/___/ \___\___\
/\ \ / /\ \
/ \___\/___/ \___\
/\ / /\ \ / /\
/ \/___/ \___\/___/ \
\ /\ \ / / /\ /
\/ \___\/___/___/ \/
\ / /\ \ \ /
\/___/ \___\___\/
\ \ / / /
\___\/___/___/
Dane wejściowe to nieujemna liczba całkowita i kafelek diamentowy. Twój program (lub funkcja) powinien obrócić go o liczbę całkowitą * 60 stopni. Ty decydujesz, czy obracać w prawo, czy w lewo, o ile jest to spójne. Zarówno wejście, jak i wyjście nie powinny mieć dodatkowych spacji wiodących ani końcowych.
To jest golf golfowy. Najkrótszy kod wygrywa.
Powiązane pytania:
źródło
Odpowiedzi:
Pyth, 81 bajtów
Wypróbuj online
Obraca się w lewo.
Każdy obrót o 60 ° odbywa się przy użyciu następującego algorytmu. Załóżmy, że wejście jest sześciokątem rzędu k , więc ma 2 has k + 1 wierszy i 4⋅ k kolumn. Aby znaleźć obrócony znak w wierszu i kolumnie j , pozwól
Zatem znakiem wyjściowym jest
\
, jeśli dane wejściowe mają/
wiersz ( u + 1) / 2 kolumna ( v + 1) / 2; jeszcze/
, jeśli dane wejściowe mają_
w wierszu u / 2 kolumna v / 2 lub wierszu u / 2 kolumna ( v + 2) / 2; jeszcze_
, jeśli dane wejściowe mają\
wiersz ( u + 2) / 2 kolumna v / 2 lub wiersz ( u + 1) / 2 kolumna ( v - 1) / 2; jeszcze(Nie liczymy znaków przy indeksach o całkowitej liczbie całkowitej).
źródło
\
, to tylko te_
, które musisz sprawdzić w obu miejscach.\
są, ale być może będziesz musiał narysować dwa_
dla każdego\
.JavaScript (ES6),
452356315 bajtówGdzie
\n
reprezentuje dosłowny znak nowej linii. Edycja: Zaoszczędziłem 96 bajtów, zdając sobie sprawę, że mój algorytm nie musi znać liczby i wielkości diamentów osobno, a także kilka drobnych golfów, które przegapiłem za pierwszym razem. Zaoszczędziłem 41 bajtów, zmieniając kod tak, aby miejscem docelowym była zawsze ta sama para znaków, a także drobny golf, którego mi brakowało podczas konwersji na poprzedni algorytm.Pokaż fragment kodu
Objaśnienie: uważa każdą parę znaków wyjściowych, co może być
__
,/_
,_\
,/
lub\
, sprawdzanie odpowiednich znaków wejścia, które są mapowane do tych znaków wyjściowych. Nie golfowany:źródło