Diberikan array bilangan bulat non-kosong dari dari 0
ke 9
, menampilkan jumlah sel yang ada 8
dan tidak memiliki tetangga 8
. Tetangga di sini dipahami dalam pengertian Moore , yaitu termasuk diagonal. Jadi setiap sel memiliki 8
tetangga, kecuali sel-sel di tepi array.
Misalnya diberi input
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
output seharusnya 3
. Tiga sel yang memenuhi syarat akan menjadi yang berikut, ditandai dengan tanda bintang (tetapi hanya jumlah entri tersebut yang akan ditampilkan):
* 4 5 6 5
9 3 8 4 *
0 8 6 1 5
6 7 9 * 2
8 8 7 4 2
Aturan tambahan
Anda secara opsional dapat mengambil dua angka yang mendefinisikan ukuran array sebagai input tambahan.
Masukan dapat diambil dengan cara apa pun yang masuk akal . Formatnya fleksibel seperti biasa. Misalnya, bisa berupa array karakter 2D, atau daftar daftar angka, atau daftar datar.
Program atau fungsi diizinkan, dalam bahasa pemrograman apa pun . Celah standar dilarang.
Kode terpendek dalam byte menang.
Uji kasus
Memasukkan:
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
Keluaran:
3
Memasukkan
8 8 2 3
Keluaran:
0
Memasukkan:
5 3 4 2 5 2
Keluaran:
0
Memasukkan:
5 8 3 8
Keluaran:
2
Memasukkan:
8 0 8
Output:
2
.Memasukkan:
4 2 8 5 2 6 1 8 8 5 5 8
Keluaran:
1
Memasukkan:
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
Keluaran
3
.Memasukkan:
8
Keluaran:
1
Memasukkan:
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
Output:
4
.Memasukkan:
8 1 8 2 5 7 8 0 1
Output:
3
.
Input dalam format 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]
Input dalam format 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]]
Output:
3, 0, 0, 2, 2, 1, 3, 1, 4, 3
sumber
Jawaban:
MATL ,
211710 byteCobalah online!
Terima kasih kepada Luis Mendo untuk bantuan dalam obrolan, dan untuk menyarankan konvolusi 2D.
Penjelasan:
sumber
R ,
117 6359 byteCobalah online!
dist
menghitung jarak (default adalah Euclidean) di antara deretan matriks.which
dengan argumen keduaTRUE
mengembalikan koordinat di mana predikat itu benar.Koordinat adalah tetangga jika jarak di antara mereka tidak lebih dari akar kuadrat dari 2, tetapi bagian dalam
<2
cukup baik karena jarak yang dimungkinkan melompat darisqrt(2)
ro2
.sumber
colSums()^2<=2
untuk bekerja.sqrt(2)
melompat ke2
(misalnyasort(c(dist(expand.grid(1:6,1:6))), decreasing = TRUE))
) jadi kami terlalu pintar di sana.APL (Dyalog Classic) ,
292825 byteCobalah online!
sumber
1
(kecuali tidak diatur secara eksplisit). Itu masuk akal.Jelly ,
1815 byteCobalah online!
Bagaimana itu bekerja
Solusi sebelumnya, 18 byte
Cobalah online!
Ingin berbagi pendekatan lain, meskipun ini 1 byte lebih lama dari solusi Jonathan Allan .
Bagaimana itu bekerja
sumber
JavaScript (Node.js) ,
8885 byteCobalah online!
Terima kasih Arnauld untuk 2 byte
sumber
J ,
43, 4037 byte-3 byte terima kasih kepada Bubbler
Cobalah online!
Penjelasan:
Bagian pertama dari algoritma memastikan bahwa kita dapat menerapkan jendela geser 3x3 untuk inputnya. Ini dicapai dengan mendahului deretan nol dan rotasi 90 derajat, diulang 4 kali.
sumber
@:
dan bergerak|.
. Perhatikan bahwa@
di tempat@:
tidak bekerja.Retina 0.8.2 , 84 byte
Cobalah online! Penjelasan:
Bungkus setiap baris dalam non-
8
karakter sehingga semua8
memiliki setidaknya satu karakter di setiap sisi.Ini adalah tahap terakhir, jadi penghitungan kecocokan tersirat. The
m
pengubah membuat^
dan$
karakter sesuai pada awal atau akhir setiap baris.Jangan mencocokkan karakter secara langsung setelah 8, atau ...
... karakter di bawah 8; yang
(?(1).)^(?<-1>.)*
sesuai dengan kolom yang sama sebagai¶(.)*
pada baris berikutnya, tetapi.?.?
memungkinkan8
untuk menjadi 1 kiri atau kanan dari karakter setelah.
pada baris berikutnya.Cocok
8
s.Jangan mencocokkan angka 8 segera sebelum angka 8, atau ...
... karakter dengan 8 pada baris di bawah ini; lagi,
(?<-2>.)*$(?(2).)
cocok dengan kolom yang sama seperti(.)*¶
pada baris sebelumnya, tetapi.?.?
memungkinkan8
untuk menjadi 1 kiri atau kanan8
sebelum.
pada baris sebelumnya.sumber
Jelly , 17 byte
Cobalah online! Atau lihat test-suite .
Bagaimana?
sumber
J, 42 byte
Cobalah online!
penjelasan
Pendekatan tingkat tinggi di sini mirip dengan yang digunakan dalam solusi APL klasik untuk permainan kehidupan: https://www.youtube.com/watch?v=a9xAKttWgP4 .
Dalam solusi itu, kami menggeser matriks kami di 8 kemungkinan arah tetangga, membuat 8 duplikat input, menumpuknya, dan kemudian menambahkan "pesawat" bersama-sama untuk mendapatkan jumlah tetangga kami.
Di sini, kami menggunakan trik "multiply by infinity" untuk mengadaptasi solusi untuk masalah ini.
sumber
~
dan>
Java 8,
181157156 byte-24 byte terima kasih kepada @ OlivierGrégoire .
Mengambil dimensi sebagai parameter tambahan
R
(jumlah baris) danC
(jumlah kolom).Sel-sel diperiksa sangat mirip seperti yang saya lakukan dalam jawaban simulator Fryer saya .
Cobalah online.
Penjelasan:
sumber
Python 2 , 130 byte
Cobalah online!
sumber
Powershell, 121 byte
Skrip uji yang kurang golf:
Keluaran:
Penjelasan:
Pertama, skrip menghitung panjang string pertama.
Kedua, itu menambahkan perbatasan ekstra ke string. Augmented
realitymenyukai:mewakili string multiline:
Catatan 1: jumlah
=
cukup untuk string dengan panjang berapa pun.Catatan 2: sejumlah besar
=
tidak mempengaruhi pencarian untuk delapan.Selanjutnya, ekspresi reguler
(?<=[^8]{3}.{$l}[^8])8(?=[^8].{$l}[^8]{3})
mencari digit8
dengan non-delapan sebelumnya dan non-delapan(?<=[^8]{3}.{$l}[^8])
berikut(?=[^8].{$l}[^8]{3})
:Akhirnya, jumlah pertandingan dikembalikan sebagai hasilnya.
sumber
Jelly , 12 byte
Cobalah online!
Bagaimana itu bekerja
sumber
JavaScript (ES6), 106 byte
Cobalah online!
Pendekatan bitwise, 110 byte
Cobalah online!
sumber
[[7]]
Clojure ,
227198 byteAduh. Jelas bukan yang terpendek di sini dengan cara apa pun. 54 byte kurung adalah pembunuh. Saya masih relatif senang dengan itu.
-29 byte dengan menciptakan fungsi pembantu yang menghasilkan berbagai sejak saya melakukan itu dua kali, mengubah
reduce
ke(count (filter
setup, dan menyingkirkan makro threading setelah bermain golf.Di mana
test-cases
array memegang semua "Python test cases"Cobalah online!
sumber