Wyzwanie to zostało zainspirowane reklamą Wendy z 1984 roku.
Ilustracja TS Rogers
Twoim zadaniem jest znalezienie szesnastkowej 0xBEEF na binarnej bułce.
„Wołowina” składa się z następującego wzoru:
1 0 1 1 (0xB)
1 1 1 0 (0xE)
1 1 1 0 (0xE)
1 1 1 1 (0xF)
A „bun” składa się z macierzy binarnej 12x12, takiej jak:
1 1 1 0 0 1 1 1 1 1 1 0
1 1 0 1 0 0 1 0 0 0 0 0
0 1 0 0 0 1 1 1 1 1 0 1
1 0 0 1 0 0 1 0 0 1 0 0
1 0 0 1 0 1 1 0 0 1 1 1
1 1 1 1 1 1 0 0 0 0 1 0
1 1 0 1 1 1 0 0 0 0 0 1
1 0 0 1 1 1 1 0 0 0 0 1
1 0 0 1 1 1 0 1 1 1 1 1
1 1 1 1 1 0 0 1 1 1 1 1
1 0 0 0 0 1 0 1 0 1 1 1
1 1 0 0 1 1 0 0 0 0 1 1
Wejście
Twój program lub funkcja pobierze macierz binarną jako dane wejściowe. Format macierzy jest bardzo elastyczny, ale musi być jasno opisany w odpowiedzi.
Na przykład:
pojedynczy ciąg binarny, z separatorami między wierszami lub bez:
"111001111110 110100100000..."
lub:
"111001111110110100100000..."
tablica ciągów binarnych:
["111001111110", "110100100000", ...]
tablica liczb (każda liczba opisująca wiersz raz przekonwertowany z powrotem na binarny i dopełniony zerami):
[3710, 3360, ...]
Wynik
Współrzędne (X, Y)
„wołowiny”, (0, 0)
która jest lewym górnym rogiem bułki.
Alternatywnie możesz użyć współrzędnych opartych na 1 (ale nie mieszanki obu formatów, takich jak 0 dla X i 1 dla Y).
W powyższym przykładzie oczekiwana odpowiedź to (3, 4)
(na podstawie 0) lub (4, 5)
(na podstawie 1):
00 01 02 03 04 05 06 07 08 09 10 11
00 1 1 1 0 0 1 1 1 1 1 1 0
01 1 1 0 1 0 0 1 0 0 0 0 0
02 0 1 0 0 0 1 1 1 1 1 0 1
03 1 0 0 1 0 0 1 0 0 1 0 0
04 1 0 0 [1 0 1 1] 0 0 1 1 1
05 1 1 1 [1 1 1 0] 0 0 0 1 0
06 1 1 0 [1 1 1 0] 0 0 0 0 1
07 1 0 0 [1 1 1 1] 0 0 0 0 1
08 1 0 0 1 1 1 0 1 1 1 1 1
09 1 1 1 1 1 0 0 1 1 1 1 1
10 1 0 0 0 0 1 0 1 0 1 1 1
11 1 1 0 0 1 1 0 0 0 0 1 1
Ponownie, każdy rozsądny format działałby, o ile jest określony w odpowiedzi. Proszę również wspomnieć, jeśli używasz współrzędnych 0 lub 1.
Zasady
- Możesz bezpiecznie założyć, że na bułce zawsze znajduje się dokładnie jedna „wołowina”. Twój kod nie jest wymagany do obsługi przypadków z więcej niż jedną wołowiną lub bez wołowiny.
- Wzór wołowiny zawsze będzie wyglądał jak opisano. Nigdy nie zostanie w żaden sposób obrócony ani dublowany.
- To jest golf golfowy, więc wygrywa najkrótsza odpowiedź w bajtach. Standardowe luki są zabronione.
Przypadki testowe
W poniższych przypadkach testowych każdy wiersz macierzy jest wyrażony jako reprezentacja dziesiętna.
Input : [ 3710, 3360, 1149, 2340, 2407, 4034, 3521, 2529, 2527, 3999, 2135, 3267 ]
Output: [ 3, 4 ]
Input : [ 1222, 3107, 1508, 3997, 1906, 379, 2874, 2926, 1480, 1487, 3565, 633 ]
Output: [ 3, 7 ]
Input : [ 2796, 206, 148, 763, 429, 1274, 2170, 2495, 42, 1646, 363, 1145 ]
Output: [ 6, 4 ]
Input : [ 3486, 3502, 1882, 1886, 2003, 1442, 2383, 2808, 1416, 1923, 2613, 519 ]
Output: [ 1, 1 ]
Input : [ 3661, 2382, 2208, 1583, 1865, 3969, 2864, 3074, 475, 2382, 1838, 127 ]
Output: [ 8, 8 ]
Input : [ 361, 1275, 3304, 2878, 3733, 3833, 3971, 3405, 2886, 448, 3101, 22 ]
Output: [ 0, 3 ]
Input : [ 3674, 2852, 1571, 3582, 1402, 3331, 1741, 2678, 2076, 2685, 734, 261 ]
Output: [ 7, 7 ]
(1,1)
)?y
,x
(czyli w odwrotnej kolejności)?Odpowiedzi:
Galaretka ,
201716 bajtówDane wejściowe mają postać macierzy boolowskiej, dane wyjściowe to para indeksów oparta na 1 (Y, X) .
Wypróbuj online! lub zweryfikuj wszystkie przypadki testowe .
Jak to działa
źródło
ṡ4Z€Ḅw€“Ье‘ĖUṀ
ṡ€4ḄZjw“¿ÇÇБ’d24
indeksowanie oparte na 0, ale niestety jest on o jeden bajt dłuższy.vim,
126807776Oczekuje danych wejściowych w formularzu
I wyniki (z indeksami opartymi na 1) jak
Dzięki Jörgowi Hülsermannowi za pośrednie zaoszczędzenie 46 bajtów, dzięki czemu zdałem sobie sprawę, że mój regex jest super głupi, a DJMcMayhem za 3 kolejne bajty.
źródło
Yp
jest lepsze niżyyp
(choć wiem, że sprzeciwisz sięY
: P) 2) białe znaki wexec 'norm Go'
są niepotrzebne. I 3)kd{
jest krótszy niżkdgg
. (Nie testowałem tego jednak)Y
ponieważ mam odbicie w moim vimrc. : P W rzeczywistościkdgg
był to odpowiednik justd{
, który, co zaskakujące, nie usuwa bieżącej linii.{
ruch postaci; więc zrobiłem coś takiego,{d''
aby usunąć całe linie.JavaScript (ES6),
636056 bajtówPobiera dane wejściowe jako 155-znakowy ciąg rozdzielany spacjami 12 12-cyfrowych ciągów binarnych, zwraca wartości o indeksie zerowym. Edycja: Zapisano 3 bajty dzięki @ JörgHülsermann. Zaoszczędź 4 bajty dzięki @ETHproductions.
źródło
s.search(r)
zamiastr.exec(s).index
?s=>[
na(s,i)=>[
, ponieważ musisz zdefiniować gdzieś: /C,
146177173163 bajtówDzięki Numberknot za poprawienie kodu (przesunięcie dolnych trzech rzędów).
Zapisywanie 4 bajty zastępując
>>=1
ze/=2
w 4 miejscach. Oszczędność 10 dodatkowych bajtów, pozwalającx
iy
być globalnym i domyślnymint
dzięki MD XFNie golfowany:
Zwraca x, y (na podstawie 0) w górnej i dolnej części bajtu.
Stosowanie:
źródło
#define T(i,n)if((A[y+i]&15)==n)
i sekcję if,T(0,11)T(1,14)T(2,14)T(3,15)return
aby zapisać 6 bajtów. Zmień także podpis funkcjiint b(int*A)
na 4 kolejne zapisane bajty.MATL ,
2221 bajtówDane wejściowe to macierz binarna z
;
separatorem wierszy. Wyjście 1 jest oparte w odwrotnej kolejności:Y X
.Wypróbuj online! Lub zweryfikuj wszystkie przypadki testowe z dziesiętnym formatem wejściowym.
Wyjaśnienie
Wzór jest wykrywany za pomocą splotu 2D. Dla tego,
1, -1
zamiast1, 0
. Ponieważ wzorzec ma rozmiar 4 × 4, jego występowanie jest wykrywane przez wpis równy16
wyjściu splotu.Ponadto, ponieważ splot wprowadza przesunięcie w wykrytych indeksach, należy to poprawić w danych wyjściowych.
źródło
Mathematica, 62 bajty
Zwraca wszystkie pozycje macierzy BEEF, 1-indeksowane. Dane wejściowe muszą być macierzą cyfr binarnych. X i y na wyjściu są jednak przełączane.
źródło
x
i zmianyy
.Poślizg , 28 bajtów
27 bajtów kodu, +1 dla
p
opcji.Wymaga wprowadzenia w postaci wielowierszowego prostokąta 1 i 0 bez spacji. Wypróbuj tutaj (z trzecią próbą jako wejściem).
Wyjaśnienie
Slip to język z wyzwania 2-D Pattern Matching . Sp3000 może powiedzieć o wiele więcej niż ja, ale w zasadzie jest to rozszerzona forma wyrażenia regularnego z kilkoma poleceniami kierunkowymi, które pozwalają dopasować w dwóch wymiarach. Powyższy kod używa tytułowego polecenia „poślizgu”
\
, które nie zmienia kierunku wskaźnika dopasowania, ale przesuwa go w bok o jeden znak. Używa również „grupy stacjonarnej”(?|...)
, która coś pasuje, a następnie resetuje wskaźnik do poprzedniej lokalizacji.Kod dzieli się w następujący sposób:
To pasuje do
0xBEEF
kwadratu. Tap
opcja wyświetla współrzędne dopasowania, indeksowane 0.źródło
1011>001>1(11>){3}1>1
1(11>){3}
.PHP, 87 bajtów
ciąg binarny jako dane wejściowe bez separatorów zwraca wartości indeksowane od zera.
tablica liczb jako wejściowe 128 bajtów
14 bajtów zapisanych przez @Titus Dziękujemy
źródło
,
zamiast.
wecho
i możesz usunąć nawiasy. (-4)PREG_OFFSET_CAPTURE
: dołącz,256
dopreg_match
parametrów, usuń^(.*)
z wyrażenia regularnego,$c[0][1]
zamiaststrlen($c[1])
(-6)Java 7,
182177 bajtówPrzesłałem odpowiedź Karla Napfa C do JAVA I dzięki Karlowi Napfowi za zaoszczędzenie 5 bajtów, przypominając mi trochę Magii. (Btw, ja też wpadłem na ten pomysł, ale pomysł zwrotu części @KarlNapf nie był mój). Przepraszam, jeśli ci się nie podobało.
(0-oparty)
Nie golfił
źródło
a[y++]>>=1)
iif((a[y]&15)==
. Przy okazji, liczę 182 bajty zamiast 183? : S...a[y++]/=2)
iif((a[y]&15)==...
.Siatkówka, 47 bajtów
Chciałbym to przeprosić. Myślę, że to prawdopodobnie okropny i zły przykład używania tego języka, ale ponieważ użyłem Regexu do mojej odpowiedzi w Perlu, pomyślałem, że spróbuję Retina. Nie jestem za dobry. :( Fragmenty na githubie bardzo mi pomogły!
Dzięki @ wullzx za jego komentarz do mojej odpowiedzi w Perlu na -3 bajty oraz @ Taemyr za wskazanie problemu z moją metodą!
Oczekuje, że dane wejściowe są rozdzielone spacjami ciągiem binarnym, a dane wyjściowe koordynują rozdzielone spacjami.
Wypróbuj online!
Sprawdź wszystkie testy jednocześnie.
źródło
You can safely assume that there is always exactly one 'beef' on the bun. Your code is not required to support cases with more than one beef or no beef at all.
? W razie potrzeby można to rozwiązać za pomocą modyfikatorów bezresekcyjnych(.{12})*?(.)*?
.Scala, 90 bajtów
Wyjaśnienie:
(a -> b) andThen (b -> c)
daje w wyniku(a -> c)
funkcję, jest jak odwrotność komponowania, ale wymaga mniej adnotacji typu w scala. W takim przypadku pobiera ciąg cyfr binarnych jako dane wejściowe i zwraca krotkę indeksów zerowych.źródło
J,
3129 bajtówDane wejściowe są sformatowane jako tablica 2d wartości binarnych, a dane wyjściowe to współrzędne zerowe jako tablica
[y, x]
.Spłaszczania i konwersji bazy w celu znalezienia indeksu nauczyłem się z tego komentarza Dennisa.
Stosowanie
Wyjaśnienie
źródło
Python 2,
989592 bajtówDane wejściowe to lista ciągów, dane wyjściowe to ciąg XY (indeksy 1).
Przetestuj na Ideone .
źródło
Perl, 54 bajty
53 bajtowy kod + 1 dla
-n
. Używa-E
bez dodatkowych kosztów.Wykorzystuje wskaźniki oparte na 0. Oczekuje danych wejściowych w postaci ciągu
1
s i0
s, a współrzędne są oddzielone spacjami.Dzięki @ wullxz i @ GabrielBenamy za pomoc w oszczędzaniu 9 bajtów oraz @ Taemyr komentarzowi do mojej odpowiedzi Retina za wskazanie problemu!
Stosowanie
źródło
(.{8}1110){2}
zamiast.{8}1110.{8}1110
length$`
na$-[0]
\1
ale nie miałem szczęścia, nie pomyślałem, aby spróbować{2}
! Dzięki!$-[0]
to przesunięcie początku ostatniego pomyślnego dopasowania.$-[n]
To przesunięcie początku podciągu dopasowanego przez n-ty subpattern lubundef
jeśli subpattern nie pasuje”. from: perldoc.perl.org/perlvar.html (poszukaj@-
)Scala, 318 bajtów
To rozwiązanie można jeszcze ulepszyć ... ale zachowałem jego czytelność i pozwoliłem, aby dane wejściowe były matrycą o wielu liniach.
Rzeczywiste rozwiązanie, jeśli tablica ciągu binarnego
Przykładowa praca
źródło
Python, 137 bajtów (według Linuksa (dzięki ElPedro))
Nie do końca konkurencyjna bajt, ale algorytm jest nieco interesujący. Pobiera dane wejściowe jako ciąg wartości binarnych.
źródło
Rubin , 62 bajty
Spodziewa się ciąg
0
i1
i zwraca tablicę z X i Y, zera.Spróbuj na ideone .
źródło
F # - 260 bajtów
Pełny program, w tym wymagany oznacznik EntryPoint (więc licz mniej, jeśli tak przypuszczam).
Dane wejściowe: każdy wiersz jako osobny ciąg: „111001111110” „110100100000” „010001111101” „100100100100” „100101100111” „111111000010” „110111000001” „100111100001” „100111011111” „111110011111” „100001010111” „110011000011”
Kod:
Nie jest to najbardziej eleganckie rozwiązanie, ale chciałem zachować ciągi, więc tak to zrobiłem. Prawie udało mi się, żeby była to pojedyncza linia i mniejsza za pomocą rur, ale jest coś z podwójnym blokiem, który sprawił, że nie mogłem rozwiązać. No cóż!
Myślałem też o przeniesieniu odpowiedzi Karla do F #, ponieważ jest to dobra i nadal mogę to robić dla zabawy jako inne podejście, ale chciałem pozostać przy tym, aby było inaczej.
źródło
Dyalog APL,
2927 bajtówBierze tablicę binarną 12x12 jako dane wejściowe użytkownika i zwraca współrzędne w odwrotnej kolejności, indeksy zaczynają się od 1.
Dzięki @ Adám za uratowanie wielu bajtów. -2 bajty, bo jestem głupi i zostawiłem wszystko w funkcji bez powodu.
źródło
~2 8 12∊⍨4 4⍴⍳16
z15 7 15 9⊤⍨4/2
. Pamiętaj, że0~⍨∊{⍵×⍳⍴⍵}
można go zastąpić⍸
wersją 16.0 (kod działa tylko w APL Dyalog).⍸
jest dodawany z wersji 16, nie mogłem znaleźć listy operacji podstawowych GNUAPL.Element , 130 bajtów
Wypróbuj online!
Pobiera dane wejściowe jako jeden długi ciąg 1 i 0 bez żadnych ograniczników. Wyjścia takie jak
3 4
(indeksowanie 0).Działa to poprzez umieszczenie danych wejściowych w „tablicy” (w zasadzie słownika z kluczami liczb całkowitych), a następnie dla każdej możliwej wartości początkowej testuje bity przy określonych przesunięciach (wszystkie 16 w bardzo pracochłonnym procesie).
źródło