Biorąc pod uwagę dwa parametry wzoru pasa i długości drogi , wydrukuj reprezentację ASCII oznaczeń pasa dla Roads and Traffic Service, aby pomalować drogi.
Przykładowe wejście / wyjście
Wejście:, BTHMLRPHU
21
Nie obchodzi mnie, jeśli weźmiesz dwa parametry lub połączysz liczbę na końcu łańcucha, to jest jednoznaczne.
Dane wejściowe mogą być pobierane z STDIN, jako argument funkcji, zmienne środowiskowe, cokolwiek ma sens w twoim języku.
Wynik:
! | x ## | | x x !
! B | /\ x HOV3 ## <- | -> | ^^ x HOV3 x !
! B | \/ x HOV3 ## | | | | ^^ x HOV3 x !
! | x ## | | x x !
! | x ## | | x x !
! | | ## | | | | !
! | | ## | | | | !
! | | ## | | | | !
! B | /\ | HOV3 ## <- | -> | ^^ | HOV3 | !
! B | \/ | HOV3 ## | | | | ^^ | HOV3 | !
! | x ## | | x x !
! B | /\ x HOV3 ## <- | -> | ^^ x HOV3 x !
! B | \/ x HOV3 ## | | | | ^^ x HOV3 x !
! | x ## | | x x !
! | x ## | | x x !
! | | ## | | | | !
! | | ## | | | | !
! | | ## | | | | !
! B | /\ | HOV3 ## <- | -> | ^^ | HOV3 | !
! B | \/ | HOV3 ## | | | | ^^ | HOV3 | !
! | x ## | | x x !
Każdy znak oznacza 0,5 metra szerokości i 1 kilometr długości.
Specyfikacja
Oznaczenia pasa ruchu
Dla każdego 10-kilometrowego odcinka drogi oznaczenia są malowane na kilometrach 2, 3, 9 i 10 (od „szczytu” wyjścia). Oznaczenia są wyśrodkowane na linii. Z wyjątkiem pasa rowerowego i środkowej, wszystkie pasy mają szerokość 3 metrów (6 znaków).
Diamentowe i strzałkowe znaki ASCII nie są dozwolone zamiast oznaczeń, jak wskazano w przykładowym wyjściu.
B
: Droga rowerowa.B
cechowanie. 1,5 metra (3 znaki).T
: Tranzyt. Diamentowe oznakowanieH
: Pas samochodowy o wysokim obłożeniu.HOV3
cechowanieL
iR
: Zakręt. Oznakowanie strzałekP
: Pas mijania. Oznaczenia CaretU
: Nieograniczony pas. Brak oznaczeń
Separatory (w kolejności pierwszeństwa)
- Mediana:
##
(oznaczony przezM
w ciągu wejściowym, zastępuje dowolny inny separator, w tym rów) - Rów (skrajna lewa i skrajna prawa):
!
wykrzyknik - HOV pasy na przemian
x
i|
każde 5 km - Normalna:
|
Ograniczenia
Twoja funkcja lub program musi:
- Drukuj do STDOUT (oznacza to odpowiedniki
System.out.print
Java,console.log
JavaScript itp.) - Być w stanie wydrukować 1 - 9 pasów z 0 - 10 medianami
- Być w stanie wydrukować do 50 km jezdni (50 linii wyjściowych)
- Nie używaj żadnych standardowych luk
- Końcowe białe znaki są niedopuszczalne, z wyjątkiem opcjonalnego
\n
na końcu wydruku
Największy możliwy wynik: 3700 bajtów (74 znaki * 50 wierszy).
Najmniejszy możliwy wynik: 5 bajtów (z wejściem B
, 1)
Założenia
- Brak sąsiednich median (substring
MM
nie wystąpi) - Druga linia oznaczeń może zostać odcięta (na przykład, jeśli długość wynosi 9 lub 12 km)
- Pasy mogą nie mieć logicznego sensu (możliwe jest dowolne zamówienie, na przykład pas skrętu w prawo po lewej stronie drogi)
To jest golf golfowy , więc wygrywa najkrótszy kod (w bajtach)!
Odpowiedzi:
Ruby, 245
Wydrukuj podział linii, jeśli to konieczne, a następnie wydrukuj linię.
Nie oczekuję wygranej.
Dziennik zmian
Efektywnie 245 stderr i dzielenie tablic.
263 lepszy sposób na indeksowanie tablicy
268 po prostu wydrukuj każdy wiersz, nie obliczaj wersji kanonicznej.
330 początkowego zatwierdzenia
źródło
JavaScript (ES6), 316 bajtów
Próbny
Powinien działać w przeglądarce Firefox i Edge w momencie pisania, Chrome / Opera wymaga włączenia funkcji eksperymentalnych.
źródło
05AB1E ,
175174175 bajtówCałkiem złe podejście, ale działa i było fajnie. Zdecydowanie można jednak zagrać w golfa.
+1 bajt jako poprawka błędów dla dwóch sąsiednich
HH
pasów.Wypróbuj online.
Wyjaśnienie:
Krok 1: Utwórz wszystkie możliwe pasy o rozmiarze 10:
Krok 2: Przekształć łańcuch wejściowy na indeksy (których będziemy używać do indeksowania do listy utworzonej w kroku 1):
Krok 3: używamy tych indeksów do indeksowania na liście pasów. Następnie konwertujemy listę ścieżek na prawidłowe dane wyjściowe, w tym przedłużając / skracając je do wielkości liczby całkowitej:
Zobacz ten 05AB1E końcówki kopalni (sekcje Jak ciągi kompres nie Część słownika? I jak skompresować dużych liczb całkowitych? ) , Aby zrozumieć, dlaczego
Ž5E
jest1289
;.•o¤[‹‡•
jest"tlrpbhmu"
;ŽDý
jest10201
;•δ~¬]•
jest1119188999
;Ž\nÿ
jest19889
.źródło