Biorąc pod uwagę niepustą prostokątną tablicę liczb całkowitych od 0
do 9
, wypisz liczbę komórek, które są 8
i nie mają sąsiada, który jest 8
. Sąsiedztwo jest tutaj rozumiane w sensie Moore'a , to znaczy obejmuje przekątne. Każda komórka ma 8
sąsiadów, z wyjątkiem komórek na krawędziach tablicy.
Na przykład biorąc pod uwagę dane wejściowe
8 4 5 6 5
9 3 8 4 8
0 8 6 1 5
6 7 9 8 2
8 8 7 4 2
wyjście powinno być 3
. Trzy kwalifikujące się komórki byłyby następujące, oznaczone gwiazdką (ale należy wypisać tylko liczbę takich wpisów):
* 4 5 6 5
9 3 8 4 *
0 8 6 1 5
6 7 9 * 2
8 8 7 4 2
Dodatkowe zasady
Opcjonalnie możesz wziąć dwie liczby określające rozmiar tablicy jako dodatkowe dane wejściowe.
Dane wejściowe można pobierać dowolnymi rozsądnymi środkami . Format jest elastyczny jak zwykle. Może to być na przykład tablica znaków 2D lub lista liczb lub płaska lista.
Programy lub funkcje są dozwolone w dowolnym języku programowania . Standardowe luki są zabronione.
Najkrótszy kod w bajtach wygrywa.
Przypadki testowe
Wkład:
8 4 5 6 5 9 3 8 4 8 0 8 6 1 5 6 7 9 8 2 8 8 7 4 2
Wydajność:
3
Wkład
8 8 2 3
Wydajność:
0
Wkład:
5 3 4 2 5 2
Wydajność:
0
Wkład:
5 8 3 8
Wydajność:
2
Wkład:
8 0 8
Wyjście:
2
.Wkład:
4 2 8 5 2 6 1 8 8 5 5 8
Wydajność:
1
Wkład:
4 5 4 3 8 1 8 2 8 2 7 7 8 3 9 3 9 8 7 8 5 4 2 8 4 5 0 2 1 8 6 9 1 5 4 3 4 5 6 1
Wyjście
3
.Wkład:
8
Wydajność:
1
Wkład:
8 5 8 1 6 8 7 7 9 9 2 8 2 7 8 3 2 8 4 9 7 3 2 7 9 2 9 7 1 9 5 6 6 9 8 7 3 1 5 2 1 9 9 7 1 8 8 2 3 5 6 8 1 4 7 5
Wyjście:
4
.Wkład:
8 1 8 2 5 7 8 0 1
Wyjście:
3
.
Dane wejściowe w formacie MATLAB:
[8 4 5 6 5; 9 3 8 4 8; 0 8 6 1 5; 6 7 9 8 2; 8 8 7 4 2]
[8 8; 2 3]
[5 3 4; 2 5 2]
[5 8 3 8]
[8; 0; 8]
[4 2 8 5; 2 6 1 8; 8 5 5 8]
[4 5 4 3 8 1 8 2; 8 2 7 7 8 3 9 3; 9 8 7 8 5 4 2 8; 4 5 0 2 1 8 6 9; 1 5 4 3 4 5 6 1]
[8]
[8 5 8 1 6 8 7 7; 9 9 2 8 2 7 8 3; 2 8 4 9 7 3 2 7; 9 2 9 7 1 9 5 6; 6 9 8 7 3 1 5 2; 1 9 9 7 1 8 8 2; 3 5 6 8 1 4 7 5]
[8 1 8; 2 5 7; 8 0 1]
Dane wejściowe w formacie Python:
[[8, 4, 5, 6, 5], [9, 3, 8, 4, 8], [0, 8, 6, 1, 5], [6, 7, 9, 8, 2], [8, 8, 7, 4, 2]]
[[8, 8], [2, 3]]
[[5, 3, 4], [2, 5, 2]]
[[5, 8, 3, 8]]
[[8], [0], [8]]
[[4, 2, 8, 5], [2, 6, 1, 8], [8, 5, 5, 8]]
[[4, 5, 4, 3, 8, 1, 8, 2], [8, 2, 7, 7, 8, 3, 9, 3], [9, 8, 7, 8, 5, 4, 2, 8], [4, 5, 0, 2, 1, 8, 6, 9], [1, 5, 4, 3, 4, 5, 6, 1]]
[[8]]
[[8, 5, 8, 1, 6, 8, 7, 7], [9, 9, 2, 8, 2, 7, 8, 3], [2, 8, 4, 9, 7, 3, 2, 7], [9, 2, 9, 7, 1, 9, 5, 6], [6, 9, 8, 7, 3, 1, 5, 2], [1, 9, 9, 7, 1, 8, 8, 2], [3, 5, 6, 8, 1, 4, 7, 5]]
[[8, 1, 8], [2, 5, 7], [8, 0, 1]]
Wyjścia:
3, 0, 0, 2, 2, 1, 3, 1, 4, 3
źródło
Odpowiedzi:
MATL ,
211710 bajtówWypróbuj online!
Podziękowania dla Luisa Mendo za pomoc na czacie i sugestię splotu 2D.
Wyjaśnienie:
źródło
R ,
117 6359 bajtówWypróbuj online!
dist
oblicza odległości (domyślnie euklidesowe) między rzędami macierzy.which
z drugim argumentemTRUE
zwraca współrzędne, w których predykat jest prawdziwy.Współrzędne są sąsiadami, jeśli odległość między nimi nie jest większa niż pierwiastek kwadratowy z 2, ale wewnętrzna
<2
jest wystarczająco dobra, ponieważ możliwa odległość skacze zsqrt(2)
ro2
.źródło
colSums()^2<=2
na działanie.sqrt(2)
skacze do2
(np.sort(c(dist(expand.grid(1:6,1:6))), decreasing = TRUE))
), Więc byliśmy tam zbyt sprytni.APL (Dyalog Classic) ,
292825 bajtówWypróbuj online!
źródło
1
( z wyjątkiem, że nie jest wyraźnie ustawiony). To ma sens.Galaretka ,
1815 bajtówWypróbuj online!
Jak to działa
Poprzednie rozwiązanie, 18 bajtów
Wypróbuj online!
Chciałem podzielić się innym podejściem, choć jest to 1 bajt dłużej niż rozwiązanie Jonathana Allana .
Jak to działa
źródło
JavaScript (Node.js) ,
8885 bajtówWypróbuj online!
Dziękujemy Arnauldowi za 2 bajty
źródło
J ,
43, 4037 bajtów-3 bajty dzięki Bubblerowi
Wypróbuj online!
Wyjaśnienie:
Pierwsza część algorytmu zapewnia, że możemy zastosować przesuwne okno 3x3 do danych wejściowych. Uzyskuje się to, przygotowując rząd zer i obrót o 90 stopni, powtórzony 4 razy.
źródło
@:
i przenoszeniu|.
. Pamiętaj, że@
zamiast@:
nie działa.Retina 0.8.2 , 84 bajtów
Wypróbuj online! Wyjaśnienie:
Zawiń każdą linię w
8
znaki inne niż wszystkie, aby wszystkie8
s miały przynajmniej jeden znak po każdej stronie.To jest ostatni etap, więc implikowane jest liczenie meczów.
m
Modyfikator czyni^
i$
znaków pasuje na początku lub na końcu każdej linii.Nie dopasowuj postaci bezpośrednio po 8 lub ...
... postać poniżej 8;
(?(1).)^(?<-1>.)*
dopasowuje samą kolumnę jak¶(.)*
w następnym wierszu, ale.?.?
pozwala8
być 1 w lewo lub prawo od znaku po.
w następnym wierszu.Dopasuj
8
s.Nie dopasowuj 8 bezpośrednio przed 8 lub ...
... postać z 8 w linii poniżej; ponownie,
(?<-2>.)*$(?(2).)
dopasowuje tę samą kolumnę, co w(.)*¶
poprzednim wierszu, ale.?.?
pozwala na8
1 w lewo lub w prawo8
przed.
poprzednim w poprzednim wierszu.źródło
Galaretka , 17 bajtów
Wypróbuj online! Lub zobacz zestaw testowy .
W jaki sposób?
źródło
J, 42 bajty
Wypróbuj online!
wyjaśnienie
Podejście wysokiego poziomu jest podobne do tego zastosowanego w klasycznym rozwiązaniu APL do gry życia: https://www.youtube.com/watch?v=a9xAKttWgP4 .
W tym rozwiązaniu przesuwamy naszą macierz w 8 możliwych kierunkach sąsiadów, tworząc 8 duplikatów danych wejściowych, układamy je w stos, a następnie dodajemy „płaszczyzny” razem, aby uzyskać liczbę naszych sąsiadów.
W tym przypadku używamy sztuczki „pomnóż przez nieskończoność”, aby dostosować rozwiązanie tego problemu.
źródło
~
i>
Java 8,
181157156 bajtów-24 bajty dzięki @ OlivierGrégoire .
Traktuje wymiary jako dodatkowe parametry
R
(ilość wierszy) iC
(ilość kolumn).Komórki są sprawdzane dość podobnie jak w mojej odpowiedzi symulatora Fryer .
Wypróbuj online.
Wyjaśnienie:
źródło
Python 2 , 130 bajtów
Wypróbuj online!
źródło
PowerShell, 121 bajtów
Skrypt testu mniej golfowego:
Wydajność:
Wyjaśnienie:
Najpierw skrypt oblicza długość pierwszego ciągu.
Po drugie, dodaje dodatkowe obramowanie do łańcuchów. Ciąg
rzeczywistościrozszerzonej lubi:reprezentuje ciąg multilinii:
Uwaga 1: liczba
=
jest wystarczająca dla ciągu dowolnej długości.Uwaga 2: duża liczba
=
nie wpływa na wyszukiwanie ósemek.Następnie wyrażenie regularne
(?<=[^8]{3}.{$l}[^8])8(?=[^8].{$l}[^8]{3})
szuka cyfry8
z poprzedzającymi nie-ósemkami(?<=[^8]{3}.{$l}[^8])
i następującymi nie-ósemkami(?=[^8].{$l}[^8]{3})
:Na koniec zwracana jest liczba dopasowań.
źródło
Galaretka , 12 bajtów
Wypróbuj online!
Jak to działa
źródło
JavaScript (ES6), 106 bajtów
Wypróbuj online!
Podejście bitowe, 110 bajtów
Wypróbuj online!
źródło
[[7]]
Clojure ,
227198 bajtówOjej. Zdecydowanie nie najkrótszy tutaj pod żadnym względem. 54 bajty nawiasu to zabójca. Jednak nadal jestem z tego względnie zadowolony.
-29 bajtów poprzez utworzenie funkcji pomocnika, który generuje szereg ponieważ robiłem to dwa razy, zmieniając
reduce
do(count (filter
konfiguracji i pozbycie makro gwintowania po golfa.Gdzie
test-cases
jest tablica zawierająca wszystkie „przypadki testowe Pythona”Wypróbuj online!
źródło