Biorąc pod uwagę ciąg 2D jako dane wejściowe, albo jako ciąg z nowymi liniami, albo z listą linii, wypisz współrzędne (x, y)
wszystkich skrótów ( #
) na liście. Dane wejściowe będą zawierać tylko skróty i spacje. (i znaki nowej linii, jeśli wybierzesz opcję wprowadzania jako ciąg 2D)
Jeśli nie ma skrótów, możesz wydać wszystko.
Dane wyjściowe powinny być jednoznaczne, z którymi liczbami są powiązane.
Przykład:
##
Powinien generować:
(0,0), (1,0)
To zakłada indeksowanie oparte na 0, zaczynając od lewego górnego rogu. Możesz zacząć od dowolnego rogu, użyć indeksowania opartego na 0 lub 1 i / lub wyjść y
. (np. w formie y,x
).
Więcej przypadków testowych (znowu wszystkie wykorzystujące (x, y)
indeksowanie w lewym górnym rogu na podstawie 0 ):
#
#####
#
(4, 0), (0, 1), (1, 1), (2, 1), (3, 1), (4, 1), (0, 2)
# ###
### #
(0, 0), (2, 0), (3, 0), (4, 0), (0, 1), (1, 1), (2, 1), (4, 1)
Zauważ, że te przypadki testowe wszystkie są wyświetlane według wierszy, a nie według ścieżki.
Możesz założyć, że skróty utworzą ciągły ślad, tj # #
Nigdy nie będą wejściowe. (prawdopodobnie nie będzie to miało znaczenia, ale na wypadek, gdyby ktoś zechciał to regexować)
Możesz także wyprowadzać współrzędne w dowolnej kolejności, tj. Pionowe kolumny, poziome rzędy lub po prostu nieposortowana lista.
Odpowiedzi:
Poślizg , 2 + 1 = 3 bajty
+1 bajt dla
p
flagi. Kod:Wyjaśnienie:
W
p
FLAG Zwraca pozycję każdego wystąpienia z następujących powodów:Wypróbuj tutaj!
źródło
Brud , 5 bajtów
Wypróbuj online! Format wyjściowy jest nieco funky, ale OP stwierdził, że jest poprawny.
Wyjaśnienie
Grime to mój język dopasowywania wzorów 2D. Część po
`
jest wzorem , w tym przypadku kwadratem 1 × 1 zawierającym#
znak. Grime przeszuka siatkę wejściową pod kątem dopasowania i wydrukuje pierwszą, którą znajdzie domyślnie. Poprzednia część`
zawiera opcje, w tym przypadku oznaczające, że wszystkie dopasowania (a
) powinny zostać wydrukowane, wraz z ich pozycjami i rozmiarami (p
).źródło
MATL ,
7 65 bajtówJest to oparte na indeksowaniu 1
(1,1)
w lewym górnym rogu.Wyjaśnienie:
Dzięki @DJMcMayhem i @LuisMendo za każde -1 bajt!
Wypróbuj online!
źródło
ooH#fh
aby zapisać jeden bajt. (konwersja na liczby całkowite, mod2) Ponieważ spacja jest parzysta (mod 2 == 0, falsy) i#
jest nieparzysta (mod 1 == 1, prawda)Pyton , 67 bajtów
To właściwie tylko golf mojej odpowiedzi Stack Overflow na podobny temat.
Wypróbuj online!
Pętle przechodzą przez listę 2D, rejestrując znaki skrótu i zwracając wynik. Zapisujemy bajt za pomocą
char > '!'
zamiastchar == '#'
, ponieważ dane wejściowe będą składały się wyłącznie z skrótów i spacji, a więc hashes (0x23
) będą jedynymi znakami większymi niż wykrzykniki (0x21
).źródło
JavaScript (ES6),
7067 bajtówTworzy listę współrzędnych oddzielonych znakiem nowej linii i spacji, np
Możesz uzyskać znacznie krótszy z dziwnym formatem wyjściowym:
To wychodzi
dla drugiego przypadku testowego. Nadal jest jasne, które numery są sparowane z którymi ...
źródło
J , 12 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
Galaretka , 8 bajtów
Wypróbuj online!
Biorąc pod uwagę tablicę znaków 2D (= listę ciągów znaków):
źródło
Dyalog APL 16.0, 5 znaków = 9 bajtów lub 6 znaków = 8 bajtów
Podaje listę par (y, x) od lewego górnego rogu.
⍸
gdzie⎕
wkład=
równa się'#'
ta postać** Można zapisać znak kosztem jednego bajtu, zastępując
'#'
go⍕#
(sformatuj główną przestrzeń nazw)Wypróbuj APL online! Zauważ, że
⍸
został emulowany,i
ponieważ TryAPL działa w wersji 14.0.źródło
⍸
nie jest zawarty w wersji jednobajtowej. Zobacz link „bajty”.JavaScript (Firefox 30-57), 61 bajtów
Zwraca współrzędne oparte na 1. Łatwe przełączanie
[y, x]
i[x, y]
zamawianie. Nie golfowany:źródło
Vim, 37 bajtów
Ponieważ V jest w większości kompatybilny wstecz, możesz wypróbować online!
Proste rozwiązanie wyrażenia regularnego, w którym zamienia każdy „#” na lokalizację, w której został znaleziony (indeksowanie oparte na jednym). Trochę się martwiłem, pisząc to, że lokalizacja zmieni się po zastąpieniu pierwszego w linii, ale to nie wydaje się problemem. TBH Jestem mile zaskoczony, jak proste stało się to rozwiązanie.
Niestety, vimscript jest bardzo szczegółowy, więc większość bajtów pochodzi z rozdzielenia wyników, dzięki czemu jest nadal czytelna. W przeciwnym razie moglibyśmy zrobić
Ale tworzy to wynik, który jest dość trudny do interpretacji. Dodatkowo zadziała tylko wtedy, gdy siatka jest zawsze 9 x 9 lub mniejsza.
To naprawdę fajne rozwiązanie, ponieważ pokazuje każdą parę współrzędnych w lokalizacji reprezentowanego przez siebie hasha. Na przykład dane wejściowe
wyjścia
Oczywiście, gdybyśmy używali V, moglibyśmy usunąć końcowy znak nowej linii i skompresować wyrażenie regularne. To może po prostu być
(32 bajty)
Ale ponieważ jest to dokładnie to samo podejście i wciąż bolesnie gadatliwe, nie warto używać języka golfowego.
źródło
Haskell, 53 bajty
Dane wejściowe są traktowane jako lista ciągów. Dane wyjściowe to lista
(x,y)
par (indeksowanych 0), npźródło
Lua, 141 bajtów
Jest 02:30, leżę w łóżku na telefonie. Dlaczego to robię?
źródło
Mathematica, 12 bajtów
Formularz operatora
Position
. Zakłada tablicę znaków 2D. 1-indeksowany, zaczynając od lewego górnego wpisu. Wyświetla listę współrzędnych w formularzu{row,column}
.źródło
char[]
, co jest właściwie powszechnym sposobem przechowywania ciągów w językach opartych na C. Ponadto w tym opisie zadania wyraźnie wspomniano „jako ciąg znaków z nowymi liniami lub listę linii” i nie wspomina o liście-list-znaków lub matrycy znaków 2D.PHP, 69 bajtów
Używa indeksowania opartego na 1, zaczynając od lewego górnego rogu.
Użyj jak:
Wyjdzie:
źródło
C, 113 bajtów
Dane wyjściowe z przypadków testowych:
Wypróbuj online!
źródło
RBX.Lua, 131 bajtów
Musi zakładać, że dane wejściowe są prawidłowe (Z to płaska oś, białe spacje to
White
kafelki, skróty mogą mieć dowolny inny kolor, górna lewa część znajduje się w0, 0, 0
) i wszystkie części są częścią tego samego modeluM
, a model jest inaczej pusty.Przykładowe wejście / wyjście:
źródło
Perl 6 , 25 bajtów (22 znaków)
Pobiera dane wejściowe jako listę linii.
Wyprowadza jedną listę na linię, każda zawierająca krotki (y, x) dla współrzędnych.
Wypróbuj online!
Jak to działa
źródło
Groovy,
8068 bajtówPrzykładowe dane wejściowe:
Przykładowe dane wyjściowe:
źródło
Rubin , 24 + 1 = 25 bajtów
+1 bajt dla
-n
flagi. Współrzędne są oparte na 1, jedna liczba na linię.Wypróbuj online!
źródło
C, 80 bajtów
Wymaga wprowadzania w postaci znaku rozdzielanego znakami nowej linii, wypisuje dane wyjściowe na ekran.
Niegolfowane i użytkowanie:
źródło
x,y;f(char*s){for(x=y=0;*s;*s++==10?++y,x=0:++x)*s==35&&printf("%d,%d ",x,y);}