To jest moje zwierzę domowe emoji, Billy:
-_-
Emoji nie lubią być w deszczu, więc Billy jest smutny ... Narysujmy parasol, aby poczuł się lepiej!
/\
/ \
/ \
-_-
To dobrze, jest całkowicie przykryty parasolem! Oto przykład, w którym objęta jest tylko jego część:
/\
/ \
/ \
-_-
W takim przypadku sekcje 2 i 3 jego ciała są narażone na deszcz.
Parasole są w wielu kształtach i rozmiarach, ale zawsze składają się z serii rosnących cięć, /
a następnie serii malejących ukośników \
. Na przykład są to wszystkie prawidłowe parasole:
/\
/ \
/ \
/\
/\
/ \
/ \
/ \
/ \
A to nie są:
/ \
\/
\
/ \
/ \
0\
/ \
//\\
/ \
Musisz ustalić, które części mojego emoji są narażone na deszcz.
Wyjaśnienia
Twój program (lub funkcja) pobierze ciąg 2d jako dane wejściowe. Może być w dowolnym formacie najbardziej dogodnym lub naturalnym dla twojego języka. Tablica ciągów, tablica znaków, ciąg znaków z nowymi liniami itp.
Musisz określić, które części emoji są narażone na deszcz. Może to być indeksowane zerowo lub indeksowane jednokrotnie, o ile to wyjaśnisz. Dane wyjściowe mogą być w dowolnym rozsądnym formacie. Jeśli cały emoji jest chroniony przed deszczem, nie wysyłaj nic (lub pustej tablicy).
Można założyć, że wszystkie wejścia będą miały poprawną parasol, i ten sam emotikony:
-_-
. Emoji zawsze będzie w ostatnim wierszu wejścia, jednak może to być kilka pustych linii między parasolem a emoji.Wszystko, co nie jest częścią parasola lub emoji, będzie znakiem spacji
lub znakiem nowej linii.
Dane wejściowe zostaną wypełnione spacjami, aby długość każdej linii była taka sama.
Obowiązują standardowe luki, a najkrótsza odpowiedź w bajtach wygrywa!
Test IO:
Wszystkie przykładowe przypadki będą korzystały z jednego indeksowania.
/\
/ \
/ \
-_-
Outputs: []
----------------
/\
/ \
-_-
Outputs: [2, 3]
----------------
/\
-_-
Outputs: [1]
----------------
/\
/ \
/ \
/ \
/ \
/ \
-_-
Outputs: [1, 2, 3]
["_","-"]
.Odpowiedzi:
05AB1E ,
181715 bajtówKod:
Wyjaśnienie:
Wykorzystuje kodowanie CP-1252 . Wypróbuj online! (pamiętaj o wypełnieniu wszystkich linii spacjami do tej samej długości ..
źródło
JavaScript (ES6), 95 bajtów
Dane wejściowe powinny być tablicą ciągów, z każdą linią wypełnioną spacjami, aby utworzyć kwadrat. Dane wyjściowe to tablica liczb 1-indeksowanych.
Wyjaśnienie
źródło
JavaScript (ES6), 92 bajty
Akceptuje nierówną tablicę wierszy i zwraca wynik o indeksie 1. Wyjaśnienie:
źródło
Java 8 lambda,
241218201191185184 (lub 161) znakówPonieważ wiesz, także Java potrzebuje suchych emoji.
Zwraca
ArrayLista HashSet a Stack zawierający części emoji, które są wystawione na działanie deszczu (indeksowanie zaczyna się od 0). Cała sprawa rozpakowana:Aktualizacje
Zrobiłem podstawowe golfa. Obejmuje to złożenie deklaracji razem, porównanie z wartościami ascii, aby zapisać niektóre znaki i skrócić pętle.
Dzięki @ user902383 za wskazanie mojego błędu zrzutu przy użyciu ArrayLists zamiast list. Zastąpiłem ArrayLists / Lists HashSets / Sets, który zapisuje więcej znaków. Dziękujemy również za jego wskazówkę dotyczącą użycia pętli foreach w wewnętrznej pętli! Dzięki tej zmianie jestem w stanie utworzyć zmienną dla indeksu ostatniego wiersza siatki, co nieco go skraca. Ogółem uratowano 17 znaków!
@KevinCruijssen zasugerował, aby usunąć generyczne podczas inicjalizacji, poszedłem o krok dalej: Usuń wszystkie ogólne To oszczędza kolejne 10 znaków.
Wróciłem z pętli foreach do pętli for. Umożliwia to pominięcie porównania ostatniej linii, co z kolei pozwala mi skrócić porównanie wartości ascii. W tym kontekście tylko „/”, „\” i „_” mają wartość ascii powyżej 46. Jeśli nie sprawdzimy ostatniego wiersza, możemy
> 46 check
zamiast tego użyć wartości rzeczywistej.Jeszcze raz dziękuję @ user902383 za pokazanie mi, że używam lambda i mogę użyć List + Stack zamiast Set + HashSet, aby zgolić inną postać.
Wersja zwracająca ciąg
@ user902383 wskazał, że zamiast tego mogę po prostu utworzyć ciąg z cyframi. Brzmi to bardzo podstępnie, ale inni wydają się to rozwiązywać w ten sposób, więc tutaj jest krótsza wersja wykorzystująca znak powrotu:
Nie golfowany:
źródło
always program to an interface
, jeśli użyjeszList
zamiast tegoArrayList
możesz zapisać 5 bajtów=new HashSet<>();
najprawdopodobniej można w nią grać=new HashSet();
.<>
zapisuje się 2 bajty. :)Set(3)
HashSet(7)
przeciwkoList
(4) iStack
(5).V ,
2019 bajtów (niekonkurencyjny)Alternatywna, konkurencyjna wersja (21 bajtów):
Wypróbuj online! (Uwaga: tryitonline.net używa nieco starej wersji V. Aby to zrekompensować, używa tej nieco dłuższej wersji)
Wyjaśnienie:
To samo daje poprawny wynik w 17 bajtach. Jednak tworzy również dodatkowe białe znaki. Nie przeszkadza mi to, ale nie chcę dać sobie nieuczciwej przewagi, więc dodaję dwa bajty:
źródło
JavaScript (ES6),
117112 bajtówAkceptuje nierówną tablicę
łańcuchówznaków i zwraca wyniki o indeksie 0.Próbny
źródło
Siatkówka , 56 bajtów
Liczba bajtów zakłada kodowanie ISO 8859-1.
Wypróbuj online!
Jest to pojedynczy etap zastępowania, w którym wyrażenie regularne pasuje do jednego ze znaków emoji, pod warunkiem, że gdzieś powyżej w tej samej poziomej pozycji znajduje się znak spacji (tj. A
/
lub\
), a następnie przechwytujemy liczbę znaków emoji do tego poziomu punkt. To dopasowanie zostało zastąpione długością ostatniego przechwytywania, co daje nam indeks tej niezabezpieczonej postaci emoji. Wyrażenie regularne zawiera również|\D
pasujące do wszystkich innych elementów, które są zastępowane niczym, więc usuwamy wszystkie pozostałe znaki.źródło
/
albo\
, ja popping z tej grupy ponownie, dopasowując rzeczy poprzedzającego że , a następnie upewnij się, że już całkowicie wyczerpany grupę. Zasadniczo zapewnia to dopasowanie poziomej pozycji emoji do znaku dachu.Pyth,
2723 bajtów0-indeksowane.
Wypróbuj online!
Wyjaśnienie
Historia
27 bajtów:
sM:#"^ *\d"0.T:R"-_-"s`M3.z
( Wypróbuj online! )źródło
Matlab, 43 bajty
Ten kod wyszukuje pozycje kolumn znaków spacji w ostatnim rzędzie danych wejściowych, sumuje liczbę znaków spacji w tych kolumnach i znajduje tam, gdzie jest tylko jeden taki znak (znak emoji, nie osłonięty parasolem!) . Ten kod zwraca tylko prawidłowe wyniki dla prawidłowo uformowanych parasoli (zakłada, że dowolny znak powyżej naszego emoji jest częścią dobrze uformowanego parasola).
Oto trochę kodu narzędzia do pisania przypadków testowych i sprawdzania mojej pracy:
Bieganie
x = thrht(7)
dajeLub
x = twht(0)
dajeźródło
APL, 31 bajtów
To pobiera macierz znaków jako dane wejściowe.
Testy:
Wyjaśnienie:
'-_-'⍷⍵
: w macierzy zer zerowej wielkości wejścia zaznacz pozycję początku'-_-'
wejścia za pomocą 1.+\+\
: Suma bieżąca nad wierszami. Pierwszy0 0 0 1 0 0 ...
przekształca się0 0 0 1 1 1 ...
, drugi przekształca się w0 0 0 1 2 3 ...
.⍵∊'/\'
: zaznacz wszystkie wystąpienia „/” i „\” na wejściu za pomocą 1s.∨⌿
:or
ponad kolumnami. Oznacza to 1 wszystkimi pozycjami w ostatnim rzędzie, które są objęte parasolem.~
:not
ponieważ potrzebujemy czegoś przeciwnego(
...)/
...: Wybierz wszystkie niepokryte kolumny z bieżącej macierzy sum wcześniej,
: Uzyskaj listę wszystkich wartości w wynikowej macierzy.(⍳3)∩
: Przecięcie tego i1 2 3
(pozbywa się dowolnych wybranych zer lub wyższych wartości, które byłyby spacjami).źródło
Python 2,
114111 bajtówWykorzystuje indeksowanie 0.
Wypróbuj tutaj .
źródło