Tantangan
Diberikan n x n
matriks bilangan bulat dengann >= 2
1 2 3 4
dan daftar bilangan bulat dengan 2n
elemen yang tepat
[1,2, -3, -1]
output matriks yang diputar. Matriks ini dibuat dengan cara berikut:
- Ambil bilangan bulat pertama dalam daftar dan putar baris pertama ke kanan dengan nilai ini.
- Ambil bilangan bulat berikutnya dan putar kolom pertama ke bawah dengan nilai ini.
- Ambil bilangan bulat berikutnya dan putar baris kedua ke kanan dengan nilai ini, dll. Hingga Anda memutar setiap baris dan kolom matriks satu kali.
Daftar ini dapat berisi bilangan bulat negatif yang berarti Anda menggeser baris / kolom ke kiri / atas, bukan kanan / bawah. Jika bilangan bulat adalah nol, jangan putar baris / kolom.
Contoh menggunakan input di atas
Daftar elemen Penjelasan Matriks -------------------------------------------------- ---------- 1 2 1 Putar baris ke-1 tepat dengan 1 3 4 2 2 1 Putar kolom 1 ke bawah sebanyak 2 3 4 -3 2 1 Putar baris ke-2 yang tersisa 3 4 3 -1 2 3 Putar kolom ke-2 sebanyak 1 4 1
Aturan
- Anda dapat memilih format input yang paling mudah digunakan. Cukup jelaskan yang mana yang Anda gunakan.
- Fungsi atau program lengkap diizinkan.
- Aturan default untuk input / output.
- Celah standar berlaku.
- Ini adalah kode-golf , sehingga byte-count terendah akan menang. Tiebreak adalah pengiriman sebelumnya.
Uji kasus
Format input di sini adalah daftar daftar untuk matriks dan daftar normal untuk bilangan bulat.
[[1,2], [3,4]], [1,2, -3, -1] -> [[2,3], [4,1]] [[1,2], [3,4]], [1,1,1,1] -> [[3,2], [4,1]] [[1,2], [3,4]], [0,0,0,0] -> [[1,2], [3,4]] [[1,2, -3], [- 4,5,6], [7, -8,0]], [1, -2,0, -1,3,4] -> [[7, 5,0], [- 3, -8,2], [- 4,1,6]] [[1,2, -3], [- 4,5,6], [7, -8,0]], [3,12, -3,0, -6, -3] -> [[1 1 , 2, -3], [- 4,5,6], [7, -8,0]]
Selamat Coding!
code-golf
array-manipulation
matrix
Denker
sumber
sumber
Jawaban:
CJam, 13 byte
Blok tanpa nama (fungsi) yang mengambil matriks dan daftar di atas tumpukan (dalam urutan itu) dan meninggalkan matriks baru di tempatnya.
Jalankan semua test case.
Ide yang sama, jumlah byte yang sama, implementasi yang berbeda:
Penjelasan
Idealnya kita ingin memperlakukan setiap instruksi dalam daftar sama, dan cukup menggunakannya untuk memutar baris pertama dari matriks. Ini dapat dilakukan dengan cukup mudah dengan mentransformasikan matriks setelah setiap instruksi sedikit dan memastikan bahwa semua transformasi tambahan tersebut dibatalkan pada akhirnya. Jadi setelah memproses setiap instruksi, kami memutar semua baris satu ke atas (sedemikian rupa sehingga instruksi berikutnya sepanjang dimensi yang sama memproses baris berikutnya) dan kemudian memindahkan matriks, sehingga kami benar-benar memproses kolom berikutnya. Transformasi tambahan ini ortogonal dengan instruksi dalam daftar dan memiliki periode yang tepat
2n
, hanya apa yang kita butuhkan.Adapun kode:
sumber
APL (Dyalog Extended) ,
17151413 byte-3 byte oleh Adám
Cobalah online!
Mengambil input sebagai daftar di mana elemen pertama adalah matriks, dan elemen lainnya adalah jumlah rotasi. Jika ⌽ diputar ke kanan dan bukan ke kiri, ini akan mengalahkan CJam.
sumber
{⍉1⊖⌽⍺⌽@(⍳1)⌽⍵}
→(⍉1⊖⌽@(⍳1)⍢⌽)
tetapi dapatkah Anda menjelaskan kepada saya mengapa@1
tidak berhasil@(⍳1)
atau bukan@(,1)
? Selain itu, OP dapat memungkinkan Anda untuk mengambil input secara terbalik.at
yang berada di belakang extended@
bukanlah ekstensi yang kompatibel. Namun, Anda dapat menggunakan asli@
dengan`@1
yang menyimpan byte di atas@1 1
.Python 2, 96 byte
Tes
f
mengembalikan daftar tupel. Setiap baris di badan fungsi diberi indentasi dengan 1 karakter tab.sumber
return zip(*m)
menghemat 5 byte?m=zip(*m);return m
dengan yang barureturn zip(*m)
? Saya tidak bisa melakukan itu karenam=zip(*m)
ini adalah bagian darifor
loopStax , 12 byte
Jalankan dan debug itu
sumber