Masalah
Pertimbangkan kotak 3 x 3 bilangan bulat non-negatif. Untuk setiap baris i
jumlah bilangan bulat ditetapkan menjadi r_i
. Demikian pula untuk setiap kolom j
, jumlah bilangan bulat dalam kolom itu ditetapkan c_j
.
Tugasnya adalah menulis kode untuk menyebutkan semua kemungkinan penugasan bilangan bulat yang berbeda ke kisi mengingat batasan jumlah baris dan kolom. Kode Anda harus menampilkan satu tugas pada satu waktu.
Memasukkan
Kode Anda harus mengambil 3 bilangan bulat non-negatif menentukan batasan baris dan 3 bilangan bulat non-negatif menentukan batasan kolom. Anda dapat mengasumsikan bahwa ini valid, yaitu batasan jumlah atau baris sama dengan jumlah batasan kolom. Kode Anda dapat melakukan ini dengan cara apa pun yang nyaman.
Keluaran
Kode Anda harus menampilkan grid 2d yang berbeda yang dihitungnya dalam format yang dapat dibaca manusia pilihan Anda. Semakin cantik tentu saja lebih baik. Output tidak boleh mengandung duplikat grid.
Contoh
Jika semua batasan baris dan kolom persis 1
maka hanya ada 6
kemungkinan yang berbeda. Untuk baris pertama, Anda dapat menempatkan 1
di salah satu dari tiga kolom pertama, untuk baris kedua sekarang ada2
alternatif dan baris terakhir sekarang sepenuhnya ditentukan oleh dua kolom sebelumnya. Segala sesuatu yang lain di grid harus diatur ke 0
.
Katakanlah input 2 1 0
untuk baris dan 1 1 1
kolom. Menggunakan format output APL yang indah, kisi-kisi integer yang mungkin adalah:
┌─────┬─────┬─────┐
│0 1 1│1 0 1│1 1 0│
│1 0 0│0 1 0│0 0 1│
│0 0 0│0 0 0│0 0 0│
└─────┴─────┴─────┘
Sekarang katakan input 1 2 3
untuk baris dan 3 2 1
kolom. Grid integer yang mungkin adalah:
┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
│0 0 1│0 0 1│0 0 1│0 1 0│0 1 0│0 1 0│0 1 0│1 0 0│1 0 0│1 0 0│1 0 0│1 0 0│
│0 2 0│1 1 0│2 0 0│0 1 1│1 0 1│1 1 0│2 0 0│0 1 1│0 2 0│1 0 1│1 1 0│2 0 0│
│3 0 0│2 1 0│1 2 0│3 0 0│2 1 0│2 0 1│1 1 1│2 1 0│2 0 1│1 2 0│1 1 1│0 2 1│
└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
sumber
Sekam ,
2017 byte-3 byte terima kasih kepada @ H.PWiz
Mengambil input sebagai daftar yang
xs
mengkodekan kendala[r_1,r_2,r_3,c_1,c_2,c_3]
, coba online!Penjelasan
Pendekatan kekerasan: P Hasilkan semua kisi 3x3 dengan entri
[0..max xs]
:sumber
Brachylog , 17 byte
Cobalah online!
PERINGATAN: OUTPUT JELEK!Jangan main-main, itu masih bisa dibaca manusia, saya tidak diharuskan menghitung berapa. ;)
Untuk beberapa alasan itu harus lebih lama dari apa yang saya harapkan masuk akal (13 byte):
Versi terakhir ini, jika berhasil, akan mengambil input dari output (yaitu argumen command-line) sebagai gantinya.
sumber
Python 2 ,
149145142141138136 byteCobalah online!
Mengambil input sebagai daftar daftar:
[[r1, c1], [r2, c2], [r3, c3]]
sumber
Haskell,
94888479 byteMengambil jumlah baris dan kolom sebagai daftar 6 elemen datar tunggal
[r1,r2,r3,c1,c2,c3]
.Cobalah online!
Karena elemen-elemen dari matriks untuk menguji naik ke jumlah
r
, kode tidak selesai dalam waktu yang wajar untuk jumlah baris / kolom yang besar. Berikut ini adalah versi yang lebih tinggir
yang lebih cepat, tetapi lebih lama 4 byte: Coba online!sumber
Mathematica, 81 byte
menemukan semua matriks 3x3 dengan elemen 0..Max dan memilih yang benar
ini berarti bahwa
(Max+1)^9
matriks harus diperiksaCobalah online!
sumber
Grid
juga bekerja dengan TIO, menggunakanToString
. Cobalah online!R ,
115110 byteCobalah online!
Mengambil input sebagai
c(r1,r2,r3,c1,c2,c3)
, tunggalvector
, dan mencetak matriks ke stdout.Ini sangat mirip dengan jawaban APL Uriel , tetapi menghasilkan grid 3x3 agak berbeda.
Membiarkannya
M=max(S)
, ia menghasilkan vektor0:M
, lalurep
memakannya 9 kali, yaitu[0..M, 0...M, ..., 0...M]
sembilan kali. Kemudian ia memilih semua kombinasi vektor baru yang diambil 9 pada satu waktu, menggunakanmatrix, 3, 3
untuk mengkonversi masing-masing 9-kombinasi ke dalam3x3
matriks, dan memaksasimplify=F
untuk mengembalikan daftar daripada array. Itu kemudian menyatukan daftar ini dan menyimpannya sebagaim
.Kemudian filter
m
untuk mereka yang jumlah baris / kolomnya identik dengan input, mencetak yang ada dan tidak melakukan apa pun untuk yang tidak.Karena menghitung
choose(9*(M+1),9)
grid yang berbeda mungkin (lebih dari(M+1)^9
kemungkinan), itu akan kehabisan memori / waktu lebih cepat daripada jawaban yang lebih efisien (tapi kurang golf) di bawah:R , 159 byte
Cobalah online!
sumber
MATL ,
3522 byte-13 byte berkat Luis Mendo
Cobalah online!
Tautan adalah ke versi kode yang mencetak sedikit lebih baik; versi ini hanya akan mencetak semua matriks dengan satu baris baru di antara mereka.
Mengambil input sebagai
[c1 c2 c3 r1 r2 r3]
.Jelas, ini menghitung kekuatan Cartesian
X^
dari0...max(input)
dengan eksponen9
, dan mentransposisi!
. Kemudian loop di"
atas kolom, membentuk kembali masing-masing@
- sebagai matriks 3x33e
, menggandakant
, mentransposisi!
, dan menyatukannya secara horizontalh
. Kemudian menghitung jumlah koloms
, yang akan menghasilkan vektor[c1 c2 c3 r1 r2 r3]
. Kami melakukan kesetaraan elemen ke inputG=
, dan jika?
semua bukan nol, kami memulihkan matriks yang benar dengan memilih input ke fungsi!
dengan menggunakan4M
.sumber
Batch, 367 byte
Kuadrat kiri 2 × 2 memaksa hasil, jadi pendekatan terbaik adalah untuk menghasilkan semua nilai untuk integer kiri atas, semua nilai yang valid untuk jumlah dari kiri atas dan integer tengah atas, semua nilai yang valid untuk jumlah atas integer kiri dan kiri tengah, dan menghitung rentang nilai yang valid untuk integer tengah, kemudian, setelah melewati semua rentang yang sesuai, hitung nilai yang tersisa dari kendala.
sumber
Python 2 , 118 byte
Cobalah online!
Python 2 , 123 byte
Cobalah online!
sumber