Katakanlah saya memiliki matriks (2D) berikut:
[[1, 2, 3, 4 ],
[5, 6, 7, 8 ],
[9, 10, 11, 12],
[13, 14, 15, 16]]
Putar matriks berlawanan arah jarum jam R
(tidak dalam peningkatan 90 derajat, hanya dengan 1 angka setiap kali),
1 2 3 4 2 3 4 8 3 4 8 12
5 6 7 8 --> 1 7 11 12 --> 2 11 10 16
9 10 11 12 5 6 10 16 1 7 6 15
13 14 15 16 9 13 14 15 5 9 13 14
Contoh lengkap:
Memasukkan:
2
[[1, 2, 3, 4 ],
[5, 6, 7, 8 ],
[9, 10, 11, 12],
[13, 14, 15, 16]]
Keluaran:
[[3, 4, 8, 12],
[2, 11, 10, 16],
[1, 7, 6, 15],
[5, 9, 13, 14]]
(spasi aneh adalah untuk menyelaraskan angka dalam kolom yang bagus)
"Cincin" luar matriks berputar 2 berlawanan arah jarum jam, dan kanan dalam berputar 2 juga. Dalam matriks ini, hanya ada dua cincin.
Contoh dengan 1 "dering":
2
[[1, 2],
[3, 4],
[5, 6]]
Haruskah output:
[[4, 6],
[2, 5],
[1, 3]]
Tantangan Anda adalah mengambil matriks dan integer R
, dan mengeluarkan versi terjemahan setelah R
rotasi.
Rotasi matriks 4x5 diwakili oleh gambar berikut:
Kendala:
2 ≤ M, N ≤ 100
, di mana M dan N adalah dimensi dari matriks. Dijamin bahwa minimum M dan N akan genap.1 ≤ R ≤ 80
, di mana r adalah jumlah rotasi.- Matriks hanya akan berisi bilangan bulat positif.
- Nilai tidak selalu berbeda.
- Input harus selalu berupa array 2D (jika Anda tidak dapat mengambil input runtime sebagai array 2D, maka Anda hanya perlu menemukan cara lain untuk mendapatkan input).
Test case lain, dengan nilai yang tidak berbeda:
1
[[1, 1],
[2, 2],
[3, 3]]
Output:
[[1, 2],
[1, 3],
[2, 3]]
Ini kode-golf , jadi jawaban terpendek menang!
code-golf
array-manipulation
matrix
StepUp
sumber
sumber
[[3, 4, 8, 12], [2, 11, 10, 16], [1, 7, 6, 16], [5, 9, 13, 14]]
16 tiba-tiba digandakan saya kira itu harus:[[3, 4, 8, 12], [2, 11, 10, 16], [1, 7, 6, 15], [5, 9, 13, 14]]
?Jawaban:
Jelly ,
39383635 byteCobalah online!
sumber
Oktaf, 210 byte
Cobalah di Octave Online!
Versi tidak disatukan:
Penjelasan:
Sebuah fungsi yang mendapat nomor dan menghasilkan kisaran yang diurutkan dan di tengah untuk input 4
-2 -1 1 2
(datar) menghasilkan untuk input 5 (ganjil) menghasilkan
-2.5 -1.5 0 1 2
hanya itu harus dipesan dan di tengah
matriks kompleks yang dihasilkan dari rentang
Konversi persegi panjang ke koordinat polar dan mengembalikan sudut sehingga untuk setiap sudut cincin diurutkan berlawanan arah jarum jam
Matriks berikut dihasilkan
Menghitung transformasi jarak B menggunakan jarak papan catur untuk menghasilkan indeks cincin
untuk matriks 6 * 7 kita akan memiliki matriks berikut
pengurutan leksikografis pertama berdasarkan indeks cincin dan kemudian berdasarkan urutan sudut (indeks elemen yang diurutkan dikembalikan)
dan akhirnya melingkar menggeser setiap cincin.
sumber
Python 3,
292288 byteMengambil input dengan baris baru dihapus, tetapi menyisakan ruang setelah jumlah kenaikan untuk memutarnya.
Penjelasan:
Alih-alih memodelkan matriks sebagai serangkaian cincin konsentris sesuai saran OP, seseorang dapat membaginya menjadi empat wilayah di mana elemen bergerak baik naik, turun, kanan, atau kiri selama satu putaran tunggal. Ini adalah tujuan dari string yang telah lama dievaluasi
f
: untuk menentukan daerah mana dari setiapi,j
kombinasi. Kemudian, hasil yang terlihat dua kali masukl
, memberikan elemen yang harus diputar ke posisii,j
pada langkah berikutnya. Fungsinyag
yang melakukan semua ini dan membentuk matriks baru setelah satu langkah kemudian dipanggil berulang kali dengan mengelak dari string yang dihasilkan yang berisi representasi dari panggilan fungsi bersarang.Ketika saya membuat ini awalnya, saya tidak sengaja menyebabkan matriks untuk memutar searah jarum jam, bukan berlawanan arah jarum jam. Daripada melakukan perbaikan yang tepat, saya menambahkan dua salinan yang ditempatkan secara strategis
[::-1]
untuk membalikkan matriks sebelum dan sesudah rotasi. Ini mungkin bisa golf ke ~280276 byte, tapi aku terlalu malas untuk melakukan itu.Juga, ini adalah port yang belum teruji cepat dari program Python 2 yang sedikit lebih lama, jadi maafkan saya jika tidak berfungsi dengan benar. Begini kode Python 2:
EDIT: Golf off 4 byte dengan mengganti
or
dengan|
dua kali.and
tidak dapat membantu, sayangnya.sumber
Perl,
330328 byteCobalah di Ideone .
Tidak Disatukan:
sumber