Ambil matriks A yang terdiri dari bilangan bulat positif, dan satu bilangan bulat positif N sebagai input, dan tentukan apakah setidaknya ada N kejadian berurutan dari nomor yang sama di setiap baris atau kolom dalam matriks.
Anda hanya perlu menguji secara horizontal dan vertikal.
Uji kasus
N = 1
A =
1
Result: True
----------------
N = 3
A =
1 1 1
2 2 3
Result: True
----------------
N = 4
A =
1 1 1
2 2 3
Result: False
----------------
N = 3
A =
3 2 3 4 2 1
4 1 4 2 4 2
4 2 3 3 4 1
1 1 2 2 3 4
3 2 3 1 3 1
1 1 2 2 3 4
Result: True
----------------
N = 1
A =
5 2 3 8
Result: True
----------------
N = 3
111 23 12 6
111 53 2 5
112 555 5 222
Result: False
----------------
N = 2
4 2 6 2 1 5
2 3 3 3 3 3
11 34 4 2 9 7
Result: True
Penjelasan selalu merupakan hal yang baik :)
code-golf
number
decision-problem
matrix
Stewie Griffin
sumber
sumber
Jawaban:
Sekam , 9 byte
Mengambil array 2D dan angka, mengembalikan
0
untuk contoh falsy dan angka positif untuk contoh yang benar. Cobalah online!Penjelasan
Sekam adalah bahasa fungsional, jadi programnya hanyalah komposisi dari beberapa fungsi.
sumber
Dyalog APL,
272523 byteCobalah secara Online!
Terima kasih kepada @MartinEnder dan @Zgarb untuk masing-masing -2 byte (komposisi menghilangkan kebutuhan untuk menggunakan
w
dan parens tidak berguna)Beri tahu saya jika ada masalah dan / atau byte untuk golf. Argumen kiri adalah N , argumen kanan adalah A .
Penjelasan:
sumber
Perl 6 , 60 byte
Cobalah online!
@^m
adalah matriks input (argumen pertama) dan$^n
merupakan jumlah kejadian berurutan untuk diperiksa (argumen kedua).[Z,] @^m
adalah transpos dari matriks input.(@^m | [Z,] @^m)
adalah atau-persimpangan dari matriks input dan transposnya. Berikut inimap
mengevaluasi nilai kebenaran jika$^n
nilai yang sama berturut-turut terjadi di setiap baris undangan. Diterapkan pada matriks input ATAU transposinya, ia mengevaluasi ke nilai kebenaran jika matriks input atau transposinya mengandung$^n
nilai yang sama berturut-turut di setiap baris; jika transpos memenuhi kondisi itu, itu berarti matriks input memiliki$^n
nilai yang sama berturut-turut di salah satu kolomnya.*.rotor($^n => $^n - 1)
mengubah setiap baris menjadi urutan$^n
irisan -element. Misalnya, jika$^n
3 dan berturut-turut adalah<1 2 2 2 3>
, ini dievaluasi menjadi(<1 2 2>, <2 2 2>, <2 2 3>)
..map({ [==] $_ })
mengubah setiap irisan menjadi boolean yang menunjukkan apakah semua elemen irisan sama. Melanjutkan contoh sebelumnya, ini menjadi(False, True, False)
..any
mengubah urutan boolean menjadi sebuah atau-persimpangan yang benar jika salah satu boolean itu benar.Outputnya adalah nilai true-junction yang benar jika salah satu matriks input ATAU transposnya memiliki baris APA PUN di mana
$^n
nilai berturut-turut sama.sumber
MATL , 12 byte
Cobalah online! Atau verifikasi semua kasus uji .
Penjelasan
Matriks non-kuadrat tidak dapat digabungkan dengan benar untuk transposnya, baik secara vertikal maupun horizontal. Jadi kode menyatukan mereka secara diagonal , dengan membuat matriks blok-diagonal.
Matriks yang dihasilkan dilinearisasi dalam urutan kolom-utama dan run-length dikodekan. Nol yang dihasilkan dari penyatuan blok-diagonal berfungsi untuk mengisolasi nilai-nilai aktual.
Hasil dari pengkodean run-length adalah array nilai dan array run-lengths. Run-length yang sesuai dengan nilai-nilai bukan nol disimpan. Outputnya adalah
1
jika beberapa dari panjang tersebut lebih besar dari atau sama dengan jumlah input, dan0
sebaliknya.Mari kita lihat hasil antara untuk membuatnya lebih jelas. Pertimbangkan input
dan
Matriks blok diagonal yang berisi matriks input dan transposinya (kode
t!Yd
) adalah:Matriks ini tersirat linierisasi dalam urutan kolom-utama (turun, lalu lintas):
Run-length encoding (kode
Y'
) memberikan dua vektor berikut (ditampilkan di sini sebagai vektor baris; sebenarnya mereka adalah vektor kolom): vektor dengan nilaidan vektor dengan panjang run
Menyimpan hanya panjang yang sesuai dengan nilai yang bukan nol (kode
wg)
) berikanMembandingkan untuk melihat panjang mana yang lebih besar dari atau sama dengan nomor input (kode
>~
) menghasilkan vektorAkhirnya, output harus
true
(ditampilkan sebagai1
) jika vektor di atas mengandung setidaknya satutrue
entri (kodea
). Dalam hal ini hasilnya adalahsumber
Oktaf,
7770 byteCobalah online!
Penjelasan: Karena matriks ini hanya berisi bilangan bulat bukan nol, kita dapat menambahkan batas 0s di sekitar matriks dan menghitung enkode runlength dari matriks (dibentuk kembali menjadi vektor)
sumber
runlength
... Mempelajari sesuatu yang baru setiap hari ...runlength
! Menjadi lebih fokus pada Matlab, saya tidak ingat yang ada di Octaverunlength
.Jelly ,
98 byteMengambil matriks sebagai argumen dan membaca integer dari STDIN.
Cobalah online!
Bagaimana itu bekerja
Contoh dijalankan
sumber
;Z
, meskipun di Japt daripada Jelly ...Ȧ
atom terinspirasi oleh MATL sekalipun.E
builtin adalah cara untuk melakukannya. Bagus :)Python 2 ,
609291 byteCobalah online!
Alih-alih menghitung, daftar dengan ukuran
n
(untuk setiap elemen dalam matriks) dihasilkan dan diperiksa jika ada pada matriksTanpa string, 94 byte
Cobalah online!
sumber
Oktaf , 59 byte
Cobalah online! Atau verifikasi semua kasus uji .
Ini menggunakan pendekatan yang sama dengan jawaban MATL saya (lihat penjelasan di sana).
sumber
blkdiag(A,A')
. Sangat bagus!Japt ,
181514 byteMenguji
Penjelasan
sumber
cUy)®ò¦ d_l ¨V\nd
, dan yang lain dengancUy)d_ò¦ d_l ¨V
, dan kemudian Anda praktis memiliki solusi (dihapus) saya.CJam , 16 byte
Cobalah online!
Penjelasan
sumber
runlength
fungsi Oktaf memberikan output dalam urutan itu juga. Tapi entah kenapa aku merasakan tatanan yangvalue, length
lebih alamiPython 3 ,
129128125120104101 bytesTerima kasih banyak kepada @ Zakary T, @Stewie Griffin, @Mr. Xcoder, @Rod, @totallyhuman sudah banyak memperbaiki ini.
Cobalah online!
sumber
1
danif
.a=b;b=0;c=0
dengana=b=c=0
m+zip(*m)
sebagai gantinyam
pada baris ke-4, dan lepaskan seluruhnya dari baris ke-1, memindahkannyan<=max()
ke baris terakhir sebagain<=c
b=b+1
menggunakanb+=1
... Ahh, Ninja'd oleh @StewieGriffin05AB1E ,
16 1412 byteCobalah online!
sumber
0
di baris kedua, jadi itu harus benar.[3,3,3]
. Saya salah membaca tantangan dalam kasus itu, jadi saya pikir saya salah di sini.Jelly , 18 byte
Cobalah online!
Pengembalian
0
untuk bilangan bulat palsu dan bilangan nol untuk kebenaran.Ew, ini buruk. Dan sangat panjang. Tips bermain golf akan dihargai :)
sumber
JavaScript (ES6), 99 byte
Mengambil matriks
m
dan jumlah kejadian yang diharapkann
dalam sintaks currying(m)(n)
. Mengembalikan boolean.Bagaimana?
Kode ini tidak terlalu pendek, tetapi saya ingin mencoba pendekatan murni berdasarkan pada ekspresi reguler.
Konversi dari matriks ke string
Kita gunakan
m.join('|')
untuk mengubah 2D-array menjadi sebuah string. Ini pertama-tama menyebabkan pemaksaan implisit dari baris-baris matriks ke string yang dipisah koma.Misalnya, input ini:
akan diubah menjadi:
Pencocokan baris
Kami mencari kejadian berturut-turut dengan:
Ini cocok:
\b
batas kata\d+
diikuti oleh angka(){n-1}
diikuti n-1 kali oleh:,
koma\1
diikuti oleh referensi kami: batas kata + angka pertama\b
diikuti oleh batas kataPencocokan kolom
Kami mencari kejadian berturut-turut di kolom dengan:
di mana
L
panjang baris.Ini cocok:
\b
batas kata\d+
diikuti oleh angka(){n-1}
diikuti n-1 kali oleh:(){L-1}
L-1 kali:.
setiap karakter (berlaku: koma atau pipa)\d+?
diikuti oleh angka (yang ini harus tidak serakah).
diikuti oleh karakter apa saja (lagi: koma atau pipa)\1
diikuti oleh referensi kami: batas kata + angka pertama\b
diikuti oleh batas kataUji kasus
Tampilkan cuplikan kode
sumber
Python 2 , 64 byte
Cobalah online!
sumber
Clojure, 77 byte
Membuat semua
p
panjang partisiN
(simbol%2
) berturut-turut dan menghitung berapa banyak nilai berbeda yang dimilikinya. Kemudian membentuk himpunan panjang ini dan kembali1
jika ditemukan dari himpunan dannil
sebaliknya.for
konstruk adalah yang paling cocok untuk ini, upaya awal saya digunakanflatten
,concat
atau sesuatu yang singkat.sumber