Definisi
The k th cincin dari matriks persegi ukuran N , di mana 1 ≤ k ≤ langit-langit (N / 2) adalah daftar yang dibentuk oleh unsur-unsur dari k th dan (N-k + 1) th baris dan kolom, tetapi tanpa elemen k-1 pertama dan terakhir .
Contoh:
Matriks: 1 2 3 4 5 6 7 8 9 1 8 7 6 5 4 3 2 1 9 8 7 6 5 4 3 Dibatasi dalam cincin: + ------------------- + | 1 2 3 4 5 | | + ----------- + | | 6 | 7 8 9 | 1 | | | + --- + | | | 8 | 7 | 6 | 5 | 4 | | | + --- + | | | 3 | 2 1 9 | 8 | | + ----------- + | | 7 6 5 4 3 | + ------------------- +
Cincin pertama di atas adalah 1,2,3,4,5,1,4,8,3,4,5,6,7,3,8,6
, yang kedua adalah 7,8,9,5,9,1,2,7
dan yang ketiga adalah 6
.
Sebuah N oleh N matriks bilangan bulat positif adalah (untuk tujuan tantangan ini):
cekung jika semua bilangan bulat pada k th cincin secara ketat lebih besar dari orang-orang di (k + 1) th cincin, di mana k adalah setiap bilangan bulat antara 1 dan N (orang-orang pada deringan pertama adalah lebih besar dibandingkan pada kedua, yang pada gilirannya lebih besar dari pada yang ketiga dll) Contoh:
4 5 6 4 7 -> karena 4,5,6,4,7,4,8,5,5,4,6,5,9,5,5,4 semuanya lebih tinggi dari 4 3 2 2 4 mana saja dari 3,2,2,3,2,3,3,2, yang semuanya lebih tinggi dari 1 5 2 1 3 8 5 3 3 2 5 9 5 6 4 5
datar jika semua bilangan bulat dalam matriks sama. Contoh lain (mungkin berlebihan):
2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
cembung jika semua bilangan bulat pada cincin k th benar-benar lebih rendah daripada yang ada di cincin (k + 1) th , di mana k adalah bilangan bulat antara 1 dan N (yang pada cincin pertama lebih rendah dari pada yang kedua, yang merupakan pada gilirannya lebih rendah dari pada yang ketiga dll). Contoh:
1 2 1 -> karena 1 dan 2 keduanya lebih rendah dari 6 2 6 2 1 2 1
tercampur jika matriks tidak memenuhi salah satu kriteria di atas. Contoh:
3 3 3 3 3 3 2 2 2 3 3 2 3 2 3 3 2 2 2 3 3 3 3 3 3
Tantangan
Diberikan matriks kuadrat dari bilangan bulat positif dengan ukuran minimal 3 , mengklasifikasikannya sesuai dengan definisi di atas. Yaitu, mengeluarkan satu dari empat nilai konsisten berbeda berdasarkan apakah matriks itu cekung, datar, cembung atau campuran.
Anda dapat bersaing dalam bahasa pemrograman apa pun dan dapat mengambil input dan memberikan output melalui metode standar apa pun dan dalam format apa pun yang wajar, sambil memperhatikan bahwa celah ini dilarang secara default. Ini adalah kode-golf , jadi pengiriman terpendek (dalam byte) untuk setiap bahasa menang.
Uji kasus
Berikut adalah banyak contoh untuk Anda pilih - Saya memilih 6 dari setiap kategori.
Cekung
[[3, 3, 3], [3, 1, 3], [3, 3, 3]]
[[2, 3, 4], [5, 1, 6], [7, 8, 9]]
[[19, 34, 45], [34, 12, 14], [13, 13, 13]]
[[3, 4, 3, 4], [4, 2, 1, 3], [3, 1, 2, 4], [4, 3, 4, 3]]
[[4, 5, 6, 4, 7], [4, 3, 2, 2, 4], [5, 2, 1, 3, 8], [5, 3, 3, 2, 5], [9, 5, 6, 4, 5]]
[[7, 7, 7, 7, 7], [7, 6, 6, 6, 7], [7, 6, 5, 6, 7], [7, 6, 6, 6, 7], [7, 7, 7, 7, 7]]
Datar
[[1, 1, 1], [1, 1, 1], [1, 1, 1]]
[[2, 2, 2], [2, 2, 2], [2, 2, 2]]
[[8, 8, 8], [8, 8, 8], [8, 8, 8]]
[[120, 120, 120], [120, 120, 120], [120, 120, 120]]
[[10, 10, 10, 10], [10, 10, 10, 10], [10, 10, 10, 10], [10, 10, 10, 10]]
[[5, 5, 5, 5, 5, 5], [5, 5, 5, 5, 5, 5], [5, 5, 5, 5, 5, 5], [5, 5, 5, 5, 5, 5], [5, 5, 5, 5, 5, 5], [5, 5, 5, 5, 5, 5]]
Cembung
[[1, 2, 1], [2, 6, 2], [1, 2, 1]]
[[1, 1, 1], [1, 2, 1], [1, 1, 1]]
[[19, 34, 45], [34, 76, 14], [13, 6, 13]]
[[3, 3, 3, 3], [3, 4, 4, 3], [3, 4, 4, 3], [3, 3, 3, 3]]
[[192, 19, 8, 6], [48, 324, 434, 29], [56, 292, 334, 8], [3, 4, 23, 23]]
[[291, 48, 7, 5], [47, 324, 454, 30], [58, 292, 374, 4], [9, 2, 53, 291]]
Campuran
[[1, 2, 3], [4, 5, 9], [6, 7, 8]]
[[10, 14, 21], [100, 8, 3], [29, 2, 19]]
[[5, 5, 5, 5], [5, 4, 4, 5], [5, 4, 6, 5], [5, 5, 5, 5]]
[[3, 3, 3, 3], [3, 1, 2, 3], [3, 3, 2, 3], [3, 3, 3, 3]]
[[12, 14, 15, 16], [12, 18, 18, 16], [12, 11, 11, 16], [12, 14, 15, 16]]
[[5, 5, 5, 5, 5], [5, 4, 4, 4, 5], [5, 4, 6, 4, 5], [5, 4, 4, 4, 5], [5, 5, 5, 5, 5]]
sumber
Jawaban:
Java (JDK 10) ,
247232220 byteCobalah online!
Output:
1
untuk "cekung"2
untuk "flat"3
untuk "cembung"4
untuk "campur"Tidak Terkumpul:
sumber
Jelly ,
18 1716 byteSaya percaya ada banyak potensi untuk upaya ini untuk bermain golf
Tautan monadik yang menerima daftar daftar angka yang mengembalikan daftar bilangan bulat:
Cobalah online! Atau lihat test-suite .
L‘H
bisa diganti dengan yang kurang efisien tetapi secara atom lebih pendekJÆm
.Bagaimana?
sumber
Python 2 ,
219216189176 byteCobalah online!
Output
set([1]), set([0]), set([-1]),
atauFalse
untuk cekung, datar, cembung, atau campuran, masing-masing.Terima kasih untuk: Kekalahan 27 byte dari beberapa optimisasi oleh ovs . Lalu satu lagi 13 byte setelah itu.
Pemahaman daftar
A
(karena ovs) membuat daftar elemen setiap cincin, diurutkan.Selanjutnya, kami membandingkan
max
danmin
nilai antara cincin yang berdekatan dengan melihat0
-1
elemen th dan th dari setiap daftar yang disortir dalam A. Perhatikan bahwa jika, misalnya,M
cekung,min
setiap cincin luar harus lebih besar daripadamax
cincin paling dalam berikutnya ; dan kemudian mengikuti bahwamax
dari setiap cincin luar juga akan lebih besar darimin
cincin paling dalam berikutnya.Jika
M
cekung, datar, atau cembung, himpunanmin/max
perbandingan ini hanya memiliki 1 elemen{-1, 0, 1}
; jika dicampur, akan ada dua elemen atau lebih.sumber
while M:k=M[0]+M[-1];M=M[1:-1];A+=sorted(k+[i.pop(j)for j in[0,-1]for i in M]),
(174 byte),A=()
jumlah byte Anda ...A=()
while M: A+= (some expression)
.Jelly , 17 byte
Mengembalikan 1 untuk cekung , 0 untuk flat , -1 untuk cembung , dan tidak untuk campuran .
Cobalah online!
sumber
JavaScript (ES6), 168 byte
Pengembalian:
-1
untuk flat0
untuk campuran1
untuk cembung2
untuk cekungCobalah online!
Bagaimana?
Minimum dan maksimum pada setiap dering
Kami menghitung m minimum dan M maksimum pada setiap cincin.
Kami menguji apakah sel terletak pada cincin yang diberikan dengan menghitung jarak kuadrat dari pusat matriks pada setiap sumbu. Mengambil nilai absolut akan berhasil juga, tetapi mengkuadratkan lebih pendek.
Sel di (x, y) terletak di cincin ke- n (diindeks 0, dimulai dari yang terluar) jika rumus berikut salah :
dimana:
Contoh: apakah sel (1, 2) pada cincin ke-2 dari matriks 6x6?
Bendera
Pada akhir setiap iterasi, kami membandingkan m dan M terhadap p minimum dan P maksimum dari cincin sebelumnya dan memperbarui variabel flag i sesuai:
i |= 1
jika m> Pi |= 2
jika M <pPada akhir proses, kami mengonversi nilai akhir i sebagai berikut:
sumber
K (ngn / k) ,
1007169 byteCobalah online!
pengembalian
1
= cekung,::
= datar,-1
= cembung,0
= campuran(
::
digunakan sebagai pengganti untuk nilai yang hilang dalam k)sumber
&/1_`{&/+(y>|/x;y<&/x;,/x=/:y)}':(,/*:'(|+:)\)'-1_(-1_1_+-1_1_)\
OK , 56 byte
Didasarkan atas jawaban ngn .
Cobalah online!
sumber
{&/1_`{&/+(y>|/x;y<&/x;,/x=/:y)}':(,/x)@.=i&|i:&/!2##x}
C ++ 17 (gcc) , 411 byte
Skor tinggi baru! (pada saat posting, setidaknya) Oh well, ini agak bagus, tapi masih C ++.
Cobalah online!
Lambda
C
mengambilstd::vector<std::vector<int>>
dan mengembalikan 1 untuk cekung, 2 untuk cembung, 3 untuk flat, atau 0 untuk campuran.Versi kode yang lebih mudah dibaca, dengan pengidentifikasi deskriptif, komentar,
R
->return
danI
->int
dituliskan, dll .:sumber