Na potrzeby tego pytania meandrująca krzywa jest tą, która podąża za ogólnym kierunkiem od lewej do prawej, ale wykonuje wielokrotnie n + 1 obrotu o 90 stopni w lewo, a następnie n + 1 obrotu w prawo (dla n> 0).
W rzeczywistości sam meander będzie miał n
segmenty.
Zwoje są oznaczone symbolem +
.
Szerokość meandrów (odległość między dwoma +
) wynosi 3 na horyzoncie ( ---
) i 1 na pionie ( |
)
Oto pojedyncze segmenty meandrującą krzywą o rozmiarach n od 1 do 5:
+-------------------+
| |
+---------------+ | +-----------+ |
| | | | | |
+-----------+ | +-------+ | | | +---+ | |
| | | | | | | | | | | |
+-------+ | +---+ | | +---+ | | | +---+ | | |
| | | | | | | | | | | | | |
+---+ +---+ | +---+ | | +-------+ | | +-----------+ | |
| | 1 | | 2 | | 3 | | 4 | | 5
---+ +-------+ +-----------+ +---------------+ +-------------------+ +
Wyzwanie:
Biorąc pod uwagę dwie liczby dodatnie n
i m
narysuj m
segmenty meandrującej krzywej z rozmiarem n
. Możesz napisać pełny program lub funkcję.
Wejście:
n
> 0 Rozmiar krzywej
m
> 0 Liczba segmentów do narysowania
Wynik:
Reprezentacja ASCII krzywej meandrującej.
Przykłady:
n = 3
m = 2
+-----------+ +-----------+
| | | |
| +---+ | | +---+ |
| | | | | | | |
+---+ | | +---+ | |
| | | |
-----------+ +-----------+ +
n = 2
m = 5
+-------+ +-------+ +-------+ +-------+ +-------+
| | | | | | | | | |
+---+ | +---+ | +---+ | +---+ | +---+ |
| | | | | | | | | |
-------+ +-------+ +-------+ +-------+ +-------+ +
n = 4
m = 4
+---------------+ +---------------+ +---------------+ +---------------+
| | | | | | | |
| +-------+ | | +-------+ | | +-------+ | | +-------+ |
| | | | | | | | | | | | | | | |
| +---+ | | | +---+ | | | +---+ | | | +---+ | |
| | | | | | | | | | | | | | | |
+-------+ | | +-------+ | | +-------+ | | +-------+ | |
| | | | | | | |
---------------+ +---------------+ +---------------+ +---------------+ +
Kryteria wygranej:
To jest golf golfowy , więc wygrywa najkrótszy kod w bajtach w każdym języku. Proszę wyjaśnić swój kod, jeśli masz na to czas.
n
lewo?n+1
gdy patrzymy na przykłady, szczególnie między poszczególnymi segmentami.Odpowiedzi:
Węgiel ,
523433 bajtówWypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:
Podaj rozmiar meandra.
Obróć w górę, gdy rysunek zaczyna się po prawej stronie i działa w lewo.
Zapętlaj żądaną liczbę meandrów.
Pętla nad segmentami meandra.
Wydrukuj a
+
.k
Na przemian podwajaj i czterokrotnie zwiększaj długości, ponieważ linie poziome są dwa razy dłuższe, ale zmniejszaj wynik przed drukowaniem, aby uwzględnić to,
+
co właśnie wydrukowano.Obróć odpowiednio dla następnego segmentu.
źródło
APL (Dyalog Classic) ,
10810195 bajtówWypróbuj online!
źródło
Python 3 ,
371354346328298290 bajtów-20B Dzięki pułapowi cat
Wypróbuj online!
Przed golfem:
źródło
C (gcc) ,
559540523 511 494 484 476 468 456 447443 bajtówWypróbuj online!
Nieco mniej golfa
źródło
Dash - skrypt powłoki POSIX, 528 bajtów
Wypróbuj online!
grał w golfa:
bez golfa:
źródło
Python 2 , 261 bajtów
Wypróbuj online!
5 bajtów z tej końcówki przez Esolanging owocami .
źródło