Wyzwanie
To proste wyzwanie. Biorąc pod uwagę dwie dodatnie liczby całkowite w
i h
utwórz ogrodzenie ASCII o szerokości w
i wysokości h
. Ogrodzenie należy zbudować zgodnie z następującymi zasadami:
+
Postać będzie reprezentować stanowisko.-
Znak będzie wykorzystywany do reprezentowania szerokości ogrodzenia.|
Zostaną wykorzystane do reprezentowania wysokość ogrodzenia.- Po dokładnie trzy
-
znaki zostały wyprowadzone, A+
charakter muszą być wyprowadzane później. Wyłączając cztery rogi, każde inne wyjście+
będzie nieważne. Możesz przestrzegać tej reguły, zaczynając od lewej lub prawej (patrz przykłady), ale musisz być konsekwentny. - Po wypisaniu dokładnie dwóch
|
znaków,+
znak musi zostać wypisany później. Wyłączając cztery rogi, każde inne wyjście+
będzie nieważne. Możesz przestrzegać tej reguły, zaczynając od góry lub od dołu (patrz przykłady), ale musisz być konsekwentny. - Każde ogrodzenie będzie miało dokładnie cztery rogi, a każdy róg będzie oznaczony symbolem
+
.
Innymi słowy: co trzy -
znaki musisz wypisać a +
. I na każde dwa |
znaki musisz wypisać a +
.
Można założyć, że ogrodzenie będzie zawsze być prostokątem, a zarówno w
i h
nigdy nie będzie większa niż 100
lub poniżej 1
. Dozwolone jest końcowe i / lub poprzedzające białe znaki.
Przykłady / przypadki testowe
w = 1
h = 1
+-+
| |
+-+
w = 3
h = 2
+---+
| |
| |
+---+
w = 5
h = 7
+---+--+ or +--+---+
| | | |
| | + +
+ + | |
| | | |
| | + +
+ + | |
| | | |
| | + +
+ + | |
| | | |
+---+--+ +--+---+
w = 10
h = 5
+---+---+---+-+ or +-+---+---+---+
| | | |
| | + +
+ + | |
| | | |
| | + +
+ + | |
| | | |
+---+---+---+-+ +-+---+---+---+
w = 4
h = 4
+---+-+ or +-+---+
| | | |
| | | |
+ + + +
| | | |
| | | |
+---+-+ +-+---+
Zasady
- Obowiązują standardowe luki .
- To jest golf golfowy , więc wygrywa najkrótsza odpowiedź w bajtach!
+
dotykać?+-+-+-+-+-+
jest nieważna. Przepraszam za zamieszanie.Odpowiedzi:
C, 131 bajtów
Wypróbuj online!
Wyjaśnienie:
źródło
Python 3 ,
140137128119106105 bajtówWypróbuj online!
źródło
in
i[w+1+(w-1)//3]]
w ostatniej części.'\n') for
. Możesz także zmienić(w-1)
na,~-w
który pozwala usunąć nawiasy, ponieważ operatory jednoargumentowe mają wyższy priorytet niż binarne. To samo dotyczy(h-1)
->~-h
i(a-1)
->~-a
. Wypróbuj online - 128 bajtówdef f(w,h)
ma taką samą długość jaklambda w,h
, ale pozwala na użycie wielu linii, jeśli to pomaga w dalszym golfie kodua=~-w//3-~w;
zapisać 1 bajtMathematica, 165 bajtów
źródło
Pip , 38 bajtów
37 bajtów kodu, +1 dla
-n
flagi.Przyjmuje szerokość i wysokość jako argumenty wiersza poleceń. Wypróbuj online!
Wyjaśnienie
źródło
Węgiel drzewny,
474540 bajtówObjaśnienie: Działa, rysując kolejno
-
s /|
s każdej ze stron , wstawiając+
s w razie potrzeby, a następnie kończąc na+
. Po narysowaniu górnej i prawej strony przeskakuje z powrotem na początek, aby narysować je w odwrotnej kolejności, skutecznie rysując lewą i dolną stronę. Nie wiem, czy symetria rotacyjna jest dozwolona, ale jeśli tak, to dla2725 bajtów:Przekracza powyższy pomysł do końca, rysując górną stronę, obracając w lewo, rysując prawą stronę, obracając ponownie, a następnie powtarzając, aby narysować dolną i lewą stronę w odwrotnej kolejności.
źródło
JavaScript (ES6),
133132 bajtyTrwa wejście w składni currying:
f(width)(height)
.Test Snippet
źródło
Pyth , 40 bajtów
Zestaw testowy .
źródło
Java (OpenJDK 8) ,
178177 bajtówWypróbuj online!
-1 bajt dzięki @KevinCruijssen
źródło
w->h->
Wypróbuj tutaj.Węgiel drzewny ,
47 4537 bajtówWypróbuj online!
Inne podejście niż @ Neila : najpierw tworzę ciągi znaków
α
iβ
zawierają znaki w granicach poziomych i pionowych, używającRange
operatora, który tworzy powtórzenie ciągu znaków, aż do osiągnięcia określonej długości. Następnie drukuję je w odpowiedniej kolejności:Link do pełnej wersji .
źródło
Range
, że oszczędzam 3 bajty przy drugim podejściu!A…+---÷⁺²×⁴N³αA…+||÷⁺¹×³N²βPα↓βα+↖↑⮌β
.05AB1E , 58 bajtów
Wypróbuj online!
W 05AB1E trudniej niż myślałem.
źródło