Oto moja głowa:
\ /-- -|
/ -\ | | |
\ \ \ \ |
--\ | \ | |
/ |--| / / |
/|- //--| / |
| | || //\ |
| \ /| // \ |
Składa się z dokładnie ośmiu włosów. Moje włosy są za długie. Wytnij każdy pojedynczy pas na określoną przeze mnie długość.
Wejście
Główną atrakcją w tej sekcji jest faktyczna głowa włosów. Oto graficzna, kolorowa reprezentacja wraz z animacją dla leniwych:
A oto pełna specyfikacja tego, czym jest zestaw włosów:
- Poszczególne włosy, które będziemy nazywać nici , zostaną wykonane z
/
,\
,|
i-
znaków ASCII, odtąd znany jako atomów . - Cała głowa słuchu (wszystkie pasma łącznie) będą
c
kolumnami por
rzędach, gdziec
≥ 1 ir
≥ 2. - Każda nić będzie ...
- zacznij od ostatniego rzędu głowy (rząd
r
- 1). - mają długość, w
l
którejl
≥ 2.
- zacznij od ostatniego rzędu głowy (rząd
- Nici można analizować następująco:
- Zacznij od dolnej części pasma. Będzie to
/
,|
czy\
atom, który nazywamy pierwiastek . (Pasemka są analizowane od lewej do prawej, uporządkowane według katalogu głównego). - Znajdź atom wskazujący na rdzeń.
- A
|
punktów atomów w górę i w dół. A-
punkty atom lewo i prawo (ale nie może wskazywać na korzeniu ponieważ tylko korzenie mogą być w dolnym rzędzie). A/
punkty atom lewo-dół i góra-prawo, a\
atom nie odwrotnie. - Zawsze będzie dokładnie jeden atom wskazujący na atom korzenia.
- A
- Znajdź nieużywane atom (taki, który nie jest jeszcze częścią nici), który wskazuje na ten atom i nie znajduje się również poniżej tego atomu (włosy nie mogą rosnąć w dół, ale na boki jest w porządku).
- Jeśli jest zero, osiągnąłeś koniec pasma!
- Jeśli istnieje, jest to kolejny atom pasma. Powtórz krok 3 z tym atomem. (Ten atom jest teraz oznaczony jako „użyty” do celów kroku 3, ponieważ jest częścią nici).
- W żadnym punkcie głowy nigdy nie będzie wielu niewykorzystanych atomów.
- Zacznij od dolnej części pasma. Będzie to
Format wejściowy będzie:
- Głowa włosów. Może być wprowadzany w obecnym stanie (wejście wielowierszowe z dosłownymi znakami nowej linii) lub z ogranicznikiem do wyboru zamiast znaków nowego wiersza. Pamiętaj, że głowa zawsze będzie prostokątem; tj. końcowe białe spacje zostaną dodane w razie potrzeby (dziwne proste włosy po prawej stronie mają na celu wyeliminowanie dodatkowych białych spacji, aby uniknąć zamieszania).
- Liczba ≥ 1 określająca, ile włosów należy obciąć. Zostanie to szczegółowo opisane w następnej sekcji.
Możesz zaakceptować wejście do funkcji, użyć STDIN / STDOUT itp. (Cokolwiek rozsądnego ).
Wynik
Twój wynik będzie głową włosów z zastosowaną fryzurą. Aby uzyskać fryzurę, po prostu zmniejsz długość każdego pasma włosów o określoną ilość (która zawsze będzie wynosić 1 lub więcej), zaczynając od punktu końcowego włosów przesuwających się w kierunku korzenia. Jednak zawsze opuszczają korzeń nienaruszony!
Oto prosty przykład. Powiedz, że wejście dla głowy to
\
/
|
|
Z drugim wejściem 2
odetniesz dwa atomy z nici i uzyskasz wynik
|
|
I z wejściem 42
, wyjście byłoby po prostu
|
Zauważ, że białe znaki przed i po głowie są całkowicie nieistotne; możesz przyciąć dodatkowe znaki nowej linii lub dodać więcej wypełnienia. To nie ma znaczenia, dopóki głowa pozostaje nienaruszona. (Możesz również robić, co chcesz, z końcowymi spacjami).
Przypadki testowe
Dla wszystkich przypadków testowych zostanie użyty przykład przedstawiony na samym początku tego postu.
Długość fryzury = 1:
/- |
/ \ | |
\ \ \ \ |
--\ | \ | |
/ |-- / / |
|- //--| / |
| | || // |
| \ /| // \ |
Długość 3:
|
\ |
--\ | \ |
/ |-- / / |
|- // | / |
| || // |
| \ /| // \ |
Długość 7:
|- / |
| | / |
| \ /| // \ |
Długość 1337:
| \ /| // \ |
Punktacja
To jest code-golf , więc wygra najkrótszy kod w bajtach!
-
trzeci pas z lewej strony|
na czwartym pas z lewej-
, a nie od tego , na co wskazuje . Na przykład,|
nie wskazuje/
na pierwszą nić, ale wskazuje na to/
. (Tak, wiem, że to mylące; musiałem kilkakrotnie przerobić GIF, ponieważ myliłem nawet siebie!) Łatwiejszym sposobem na zrozumienie tego może być spojrzenie na górę drugiego pasma.-
należy połączyć je z czwartą nicią, a nie z trzecią.Odpowiedzi:
JavaScript (E6) 195
212 222 232Za pomocą funkcji rekurencyjnej R znajdź ścieżkę każdej nici i zaznacz pozycje od 1 dla najdalej od nasady. Następnie w drugim przejściu łatwo jest zastąpić dolną zaznaczoną pozycję spacjami.
Przetestuj w konsoli FireFox / FireBug
Wynik
źródło