Kotak ajaib adalah kotak persegi n-demi-n , diisi dengan bilangan bulat positif yang berbeda dalam kisaran 1,2, ... n ^ 2 , sehingga setiap sel berisi bilangan bulat yang berbeda dan jumlah bilangan bulat di setiap baris, kolom dan diagonal sama.
Tugas Anda adalah mengambil matriks n-per-n yang terdiri dari angka positif, dan karakter placeholder untuk sel kosong (saya akan menggunakan 0 , tetapi Anda dapat menggunakan karakter non-numerik atau tipe data apa pun yang Anda suka), dan menentukan apakah itu mungkin untuk membuat kotak ajaib dengan mengisi angka yang hilang
Matriksnya akan setidaknya 2-by-2 , dan paling banyak 10-by-10 . Kuadrat ajaib non-trivial terkecil yang mungkin adalah 3-oleh-3 . Angka-angka dalam matriks input mungkin lebih tinggi dari n ^ 2 , dan mungkin saja semua sel diisi.
Kasus uji:
2 2
2 0
False
8 0 6
0 5 0
0 9 2
True
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
True
10 0 1
0 5 9
3 7 5
False
99 40 74 8 15 51 0 67 0 1
0 41 55 14 0 57 64 0 98 0
81 47 56 20 22 63 70 54 0 88
0 28 0 21 0 69 71 60 85 19
0 34 0 2 9 75 52 61 0 25
24 65 49 0 90 26 33 42 17 76
0 0 30 89 91 0 39 48 0 82
6 72 31 95 0 38 45 29 0 13
12 53 0 96 78 0 0 0 10 94
18 59 43 77 0 0 27 36 0 100
True
[ [ 1, 5, 9 ], [ 6, 7, 2 ], [ 8, 3, 4 ] ]
(falsy)[[8, X1, 6], [X2, 5, X3], [X4, 9, 2]]
)?Jawaban:
JavaScript (ES6),
270268 byteMengambil matriks sebagai array 2D. Pengembalian
0
atau1
.Uji kasus
Ini pasti terlalu lambat untuk test case terakhir. :-(
Tampilkan cuplikan kode
sumber
05AB1E , 45 byte
Bisa jadi kurang dari 4 byte, tetapi saat ini ada bug di builtin
.;
dengan daftar 2D.:
dan.:
bekerja seperti yang diharapkan, tetapi.;
tidak melakukan apa-apa pada daftar 2D sekarang .. karena itu penyelesaian˜
dan¹gô
perataan matriks; gunakan.;
dalam daftar; dan mengubahnya kembali menjadi matriks lagi.Cobalah secara online atau verifikasi beberapa kasus uji lagi . (CATATAN: Test case terakhir dari deskripsi tantangan tidak termasuk, karena terlalu banyak 0s ..)
Penjelasan:
Bagian
©O®øO®Å\O®Å/O)˜Ë
ini juga digunakan dalam jawaban 05AB1E saya untuk tantangan Verify Magic Square , jadi lihat jawaban itu untuk penjelasan yang lebih mendalam tentang bagian kode itu.sumber