Oto sztuka ASCII 4-kierunkowego skrzyżowania:
| | |
| |
| | |
| |
| | |
-----+-----+-----
| |
- - -| |- - -
| |
-----+-----+-----
| | |
| |
| | |
| |
| | |
(Zwróć uwagę, jak poziome drogi mają 3 rzędy wysokości, podczas gdy pionowe drogi mają 5 kolumn szerokości. Jest to ze względów estetycznych, ze względu na prostokątną czcionkę).
Twoim wyzwaniem jest stworzenie tej sztuki ASCII. Jednak, jak zapewne wszyscy wiecie, nie każde skrzyżowanie ma drogę biegnącą w każdym kierunku. To konkretne skrzyżowanie idzie NESW
, ale niektóre skrzyżowania mogą iść na przykład NW
:
| | |
| |
| | |
| |
| | |
-----+-----+
| |
- - -| |
| |
-----+-----+
Lub może pójść SWE
:
-----+-----+-----
| |
- - -| |- - -
| |
-----+-----+-----
| | |
| |
| | |
| |
| | |
A może nawet pójść E
, tylko w jednym kierunku (chociaż trudno nazwać to skrzyżowaniem , ale staraj się unikać nadmiernej pedantyczności):
+-----+-----
| |
| |- - -
| |
+-----+-----
Musisz napisać program lub funkcję, która może łatwo wygenerować dowolną z tych kombinacji. Mówiąc dokładniej, Twoim wyzwaniem jest napisanie programu lub funkcji, która pobiera ciąg kierunków, składający się z NESW
, jako danych wejściowych, danych wyjściowych lub zwraca tę sztukę ASCII skrzyżowania z drogami wskazującymi w tych kierunkach. Kierunki te mogą występować w dowolnej kolejności, ale wejście nie będzie zawierać żadnych znaków z wyjątkiem N
, E
, S
, lub W
. Jeśli chcesz, możesz zamiast tego poprosić o wprowadzanie małych liter, ale musisz podać to w swojej odpowiedzi. Możesz również założyć, że wszystkie dane wejściowe będą zawierać co najmniej jeden kierunek.
Ostatni przykład miał spacje wiodące na każdej linii, ponieważ nie ma drogi prowadzącej na zachód. Jeśli nie masz drogi prowadzącej na zachód, te wiodące pola są opcjonalne. To:
+-----+-----
| |
| |- - -
| |
+-----+-----
Byłby również akceptowalnym wyjściem. Podobnie, jeśli N
lub S
zniknie, puste linie tam są opcjonalne. Dozwolony jest jeden końcowy znak nowej linii, a końcowe spacje są dozwolone, o ile wynik jest wizualnie taki sam.
Możesz pobierać dane wejściowe i wyjściowe w dowolnym rozsądnym formacie, takim jak STDIN / STDOUT, argumenty wiersza poleceń, pliki, argumenty funkcji / zwracane wartości itp.
Jak zwykle jest to gra w golfa , więc postaraj się uzyskać możliwie najkrótszą odpowiedź w jakimkolwiek języku, którego używasz!
Próbka IO:
NESW:
| | |
| |
| | |
| |
| | |
-----+-----+-----
| |
- - -| |- - -
| |
-----+-----+-----
| | |
| |
| | |
| |
| | |
NS:
| | |
| |
| | |
| |
| | |
+-----+
| |
| |
| |
+-----+
| | |
| |
| | |
| |
| | |
S:
+-----+
| |
| |
| |
+-----+
| | |
| |
| | |
| |
| | |
EW:
-----+-----+-----
| |
- - -| |- - -
| |
-----+-----+-----
SE:
+-----+-----
| |
| |- - -
| |
+-----+-----
| | |
| |
| | |
| |
| | |
E
na przykład jeśli nie ma )? Czy dozwolone są wiodące i końcowe puste linie, jeśli nie maN
lubS
?Odpowiedzi:
JavaScript (ES6),
190187185 bajtówJest to próba zbudowania tego znaku ASCII na znak przez iterację na matrycy 17x15. Dlatego dane wyjściowe są zawsze tworzone z 15 rzędów 17 kolumn z przecięciem dróg pośrodku.
Nie golfił i skomentował
Matryca
Poniżej znajduje się macierz ze współrzędnymi użytymi w kodzie.
Próbny
Poniższy fragment kodu pozwala wypróbować dowolną konfigurację drogi.
źródło
PowerShell v3 +,
226204192191 bajtówPobiera dane wejściowe jako ciąg wielkich liter, jawnie rzutuje je jako
char
tablicę. Konstruuje segment „północny” poprzez zapętlenie od0
do4
. Każda pętla konstruuje ciąg 5 spacji (jeśliW
/87
jest obecny na wejściu), przechowuje to w$x
, a następnie albo| |
( zapisuje w$w
) lub| | |
, w zależności od tego, czy obecnie jesteśmy parzyste czy nieparzyste. Ta tablica ciągów jest przechowywana$n
i mnożona przez to, czyN
/78
jest-in
wejściem. To określi, czy$n
zostanie umieszczony w rurociągu, czy nie.Następnie konstruujemy środkową część. Pierwszy wiersz
$z
to „szczyt” trasy wschód-zachód, wykorzystujący tę samą logikę dlaW
iE
/69
i otoczony w parens, aby również umieścić kopię na rurociągu. Używamy zmiennej pomocniczej,$y
aby zapisać bajt na-----
sekcjach.Kolejny wiersz to tylko odpowiednia liczba spacji (tzn.
$x
) Połączona z łańcuchem z rurami o odpowiedniej szerokości (tj$w
.). Następnie, środkowa linia paski, dziękiW
iE
logiki i$w
nadzieniem w środku. Potem$x+$w
i$z
znowu.Wreszcie, ponieważ droga południowa jest taka sama jak północ, postaw
$n
na rurociągu, jeśliS
/83
jest-in
$a
.Wszystkie te łańcuchy wynikowe są gromadzone z potoku, a dane wyjściowe są niejawne pod koniec wykonywania programu. Nadużywa domyślnego
Write-Output
separatora do wstawiania nowej linii między elementami.Przykłady
źródło
C ++
317280276 bajtówNie golfowany:
źródło
strchr
goindex
spowoduje zmniejszenie liczby kolejnych. Zdefiniujx
iy
razem pozafor
pętlami.Python 3, 186 bajtów
Anonimowy lambda dzwonił z ciągiem wskazówek, np. „NWS”
Wyjaśnienie do naśladowania
źródło
sed 234
Po prostu buduje różne części, jeśli na linii znajduje się właściwy znak.
Używa
@
zamiast\n
i subskrybuje z\n
powrotem na końcu.Części północna i południowa są identyczne, więc używam tego, co w zasadzie jest funkcją, aby je wstawić.
źródło
Partia,
351344341 bajtówUwaga: Linia
set t=
kończy się pięcioma spacjami, a liniaif "%i:e=%"=="%i%" set r=
kończy się spacją. Pobiera rozróżnianie wielkości liter od STDIN. Edycja: Zapisano 7 bajtów, eliminującd
zmienną. Zaoszczędzono 3 bajty, używającfor
pętli do wydrukowania środkowej części. Jeśli zamiast tego wolno mi używać osobnych parametrów wiersza polecenia, to dla326319316 bajtów:źródło
Python 2, 290 bajtów
źródło
m,t,s=[],[],[]
może byćm=t=s=[]
.range(5)
można zapisać w zmiennej i użyć dwukrotnie, zamiast pisaćrange(5)
dwa razy.m
?t=s=[]
wszystko popsułom=t=s=[]
, wszystkie wskazują na to samo odniesienie.GolfScript, 154 bajtów
Wypróbuj online!
źródło
Pyth (
385380373353 bajtów)Gra w golfa:
Nie golfowany:
Oczywiście, jeśli są jakieś ulepszenia, proszę o informację.
Zaoszczędź 5 bajtów dzięki Maltysen
Możesz spróbować tutaj
źródło
K
zamiast,N
a następnie przy pierwszym przypisywaniu, nie musisz używać=
, oszczędzając bajtN[:-1]
jestP
Groovy (274 bajtów)
Nie golfił
Grał w golfa
Wypróbuj: https://groovyconsole.appspot.com/script/5082600544665600
źródło