Jesteś odpowiedzialny za budowę nowej autostrady. Prowadzi jednak przez górzyste ziemie i dlatego potrzebuje wielu mostów i tuneli. Sama autostrada powinna pozostać na jednym poziomie.
Wkład
Otrzymujesz przybliżony opis ASCII tego, jak wyglądają góry na standardowym wejściu, na przykład:
/\
/ \
/\ / \
/\ / \/ \
/ \ / \ /\
/ \/ \ / \
_ / \ /\ / \
\ / \ / \ / \ /\
\ / \ / \/ \/ \
\ / \ /
\/ \/
_
W pierwszych znaków kolumny początkiem a poziom drogi. Pasmo górskie jest przylegające i jeśli ostatni odcinek będzie mostem, ma parzystą liczbę znaków.
Możesz założyć, że linia wejściowa nigdy nie jest dłuższa niż 100 znaków i że nie ma więcej niż 15 linii. Każda linia ma taką samą długość, która na końcu może być wypełniona spacją. Droga nigdy nie zaczyna się w obrębie góry lub mostu. Pierwszą rzeczą po kafelku drogi na wejściu jest zbocze w dół lub w górę.
Wydajność
Wyjście jest tym samym pasmem górskim, z tą różnicą, że istnieje droga, na której wcześniej był tylko jej początek. Dane wyjściowe podano na wyjściu standardowym.
W tym celu istnieje wiele zasad:
Droga musi rozpoczynać się w miejscu wskazanym na wejściu i pozostawać na tym samym poziomie. Aby to ułatwić, przygotowaliśmy szereg gotowych płytek drogowych, które wyglądają następująco
_
:_______ \ / \/\/
Droga musi rozciągać się na drugi koniec pasma górskiego (tj. Długość linii wejściowych decyduje o tym, jak daleko jedzie droga).
Tunele muszą być wiercone za każdym razem, gdy góra jest tam, gdzie musi iść droga. Tunele prowadzą prosto przez górę i pozostawiają dziury na początku i na końcu (tj. Tunel zastępuje zbocze góry zamykającym nawiasem na początku i nawiasem otwierającym na końcu).
Tunele opuszczają, no cóż, tunel w górze, który zwykle ma sufit. Nasze wstępnie przygotowane płytki drogowe na szczęście można wykorzystać do wzmocnienia sufitu, aby tunel się nie zawalił (linia nad tunelem musi zostać użyta
_
do wzmocnienia tunelu):/\ / \ /____\ ___)______(__ \/ \/
Tunel nie musi być wzmacniany, gdy góra nie jest wystarczająco wysoko nad nim. Brzmi również dziwnie dla mnie, ale powiedziano mi, że prefabrykowane płytki drogowe są wystarczająco mocne, aby je utrzymać, nawet gdy są w tym przypadku rozmieszczone (sufit nie jest rysowany, gdy nachylenie jest bezpośrednio nad tunelem):
/\ /\/__\ ___)______(__ \/ \/
Mosty są potrzebne, gdy droga musi przejść przez przepaść. W przypadku krótkich mostów prefabrykowane płytki drogowe są wystarczająco mocne, ale nadal wymagają nieco wsparcia na początku i na końcu mostu (pierwsze nachylenie w dół pod mostem i ostatnie nachylenie w górę są zastąpione przez,
Y
tak aby istniała belka nośna dla mostu ):_____ Y Y \/
Dłuższe mosty wymagają dodatkowego wsparcia. Długi most to taki, który ma więcej niż sześć nieobsługiwanych płytek drogi z rzędu. Długie mosty potrzebują filaru w środku. Filary są łatwo zbudowane z naszych gotowych belek filaru, które wyglądają tak:
|
. Każdy filar potrzebuje dwóch z nich i rozciągają się aż do dna przepaści:_____________________________ Y || Y \ /\ || /\ /\/ \ /\ / \||/ \ /\/ \/ \/ \/ \/
Ponieważ dane wejściowe stanowią tylko część całego pasma górskiego, przez który trzeba zbudować autostradę, może ona nagle zakończyć się na środku mostu lub tunelu. Reguła długiego mostu nadal obowiązuje dla ostatniego segmentu i można założyć, że pierwsza część poza danym wejściem ponownie obsługuje most.
Zgodnie z powyższymi zasadami otrzymujemy następujące informacje:
/\
/ \
/\ / \
/\ / \/ \
/ \ / \ /\
/____\/______________\ /__\
_________)______________________(________)(____)____(______
Y Y Y Y Y Y Y YY
\ / \ / \/ \/ \
\ / \ /
\/ \/
Wygrywa najkrótszy kod według liczby znaków. Końcowe spacje w wierszach są ignorowane podczas sprawdzania poprawności.
Przykładowe dane wejściowe 1
_
\ /\
\ / \
\ / \
\ /\ / \ /\ /
\ /\ / \ / \ /\ /\/ \ /
\ / \ / \/ \ / \/ \/\ /
\/ \ / \ / \/
\ / \/
\/
Próbka wyjściowa 1
____________________________________________________________
Y || YY ||
\ || / \ ||
\ || / \ ||
\ || /\ / \ || /\ /
\ /\ || / \ / \ /\ |/\/ \ /
\ / \ || / \/ \ / \/ \/\ /
\/ \ || / \ / \/
\||/ \/
\/
Przykładowe wejście 2
/\ /\
/ \/ \ /
/\ / \ /\ /
/\ / \ / \/ \ /
/ \ / \/\ / \ /\ /
/ \/ \ / \ / \ /
_/ \ / \/ \/
\ /
\ /\/
\ /\ /
\/ \ /
\ /
\/
Przykładowe wyjście 2
/\ /\
/ \/ \ /
/\ / \ /\ /
/\ / \ / \/ \ /
/ \ / \/\ / \ /\ /
/____\/________\ /__________________\ /__\ /____
_)________________(__________________)____________________()____()_____
Y || Y
\ || /\/
\ /\ || /
\/ \|| /
\| /
\/
Uwaga
Końcowe spacje na wyjściu są ignorowane w celu porównania z rozwiązaniami referencyjnymi.
Warunki wygranej
Wygrywa najkrótszy kod, jak to jest w golfie. W przypadku remisu wygrywa wcześniejsze rozwiązanie.
Przypadki testowe
Istnieją dwa skrypty testowe, zawierające identyczne przypadki testowe:
Wywołanie jest w obu przypadkach: <test script> <my program> [arguments]
np . ./test ruby bridges.rb
Lub ./test.ps1 ./bridges.exe
.
Kolejna uwaga
To zadanie było częścią konkursu golfowego, który odbył się na mojej uczelni w latach 2011-W24. Wyniki i języki naszych zawodników były następujące:
- 304 - Perl
- 343 - C
- 375 - C
- 648 - Python
Nasze własne rozwiązanie (dzięki Ventero) było
- 262 - Rubinowy