Ide
Kami telah melakukan spiral matriks sebelumnya, dan rotasi penuh, dan bahkan rotasi diagonal , tetapi sejauh ini saya tidak bisa, rotasi ular !
Apa itu rotasi ular?
Bayangkan deretan matriks yang bolak-balik, dengan pembagi di antara mereka seperti pembagi antrian panjang:
+--------------+
1 2 3 4 5|
+------------ |
|10 9 8 7 6|
| +-----------+
|11 12 13 14 15|
+------------ |
20 19 18 17 16|
+--------------+
Sekarang bayangkan memutar item-item ini dengan 2. Setiap item bergerak maju, seperti orang-orang bergerak dalam satu baris, dan item-item di ujung tumpah dan kembali ke awal:
+--------------+
--> 19 20 1 2 3|
+------------ |
| 8 7 6 5 4|
| +-----------+
| 9 10 11 12 13|
+------------ |
<-- 18 17 16 15 14|
+--------------+
Jika ada jumlah ganjil dari baris itu akan keluar dari kanan, tetapi masih membungkus ke awal. Sebagai contoh, ini adalah 3 rotasi:
+--------------+
1 2 3 4 5|
+------------ |
|10 9 8 7 6|
| +-----------+
|11 12 13 14 15
+--------------+
+--------------+
--> 13 14 15 1 2|
+------------ |
| 7 6 5 4 3|
| +-----------+
| 8 9 10 11 12 -->
+--------------+
Rotasi negatif akan membawa Anda mundur. Ini rotasi -2:
+--------------+
<-- 3 4 5 6 7|
+------------ |
|12 11 10 9 8|
| +-----------+
|13 14 15 1 2 <--
+--------------+
Tantangan
Fungsi atau program Anda akan mengambil 2 input, dalam format apa pun yang nyaman:
- Sebuah matriks
- Integer (positif atau negatif) yang menunjukkan berapa banyak tempat untuk memutarnya.
Itu akan kembali:
- Matriks yang diputar
Catatan:
- Golf kode. Bytes paling sedikit menang.
- Matriks tidak harus persegi, tetapi akan mengandung setidaknya 2 baris dan 2 kolom
- Bilangan bulat positif akan memutar baris 1 ke kanan
- Bilangan bulat negatif akan memutar baris 1 ke kiri
- Anda dapat membalikkan arti angka rotasi positif / negatif, jika nyaman
- Jumlah rotasi bisa lebih besar dari jumlah item. Dalam hal ini, itu akan dibungkus. Artinya, itu akan setara dengan jumlah modulo jumlah item.
- Matriks hanya akan berisi bilangan bulat, tetapi mungkin berisi bilangan bulat apa pun, termasuk pengulangan
Uji Kasus
Format:
- Matriks
- Nomor rotasi
- Nilai pengembalian yang diharapkan
4 5
6 7
1
6 4
7 5
2 3 4 5
6 7 8 9
10 11 12 13
-3
5 9 8 7
12 11 10 6
13 2 3 4
8 8 7 7
5 5 6 6
10
5 5 8 8
6 6 7 7
Jawaban:
Jelly , 10 byte
Link diad yang menerima marix di sebelah kiri dan integer rotasi di sebelah kanan (menggunakan makna terbalik positif / negatif)
Cobalah online!
Bagaimana?
sumber
R ,
121110101 byteCobalah online!
Panduan
sumber
Python 3.8 (pra-releasSSSse) , 119 byte
Fungsi yang tidak disebutkan namanya menerima
matrix, rotation
yang menghasilkan matriks baru.Menggunakan tanda rotasi yang berlawanan.
Cobalah online!
Bagaimana?
Kami mengatur
n=-1
dimuka untuk menghemat tanda kurung nanti dan mengambil matriks sebagaim
dan rotasi sebagair
.Matriks baru dibangun dengan dimensi yang sama dengan
m
- dengan lebarw
(w:=len(m[0])
) dan tinggih
(h:=len(m)
).Setiap baris lain dari matriks ini dibalik (
[::n**j]
).Nilai-nilai dicari dengan menghitung baris dan kolom mereka di aslinya,
m
menggunakan baris elemen saat inii
,, dan kolom,j
...Kami mengatur
s
ker+i
dank
ke(j+s//w)%h
.k
adalah deretan dokumen asli untuk mengakses elemen kami saat ini.Agar dapat dengan mudah mengakses baris aneh yang diindeks dari kanan, kami membalikkan baris tersebut sebelum mengakses elemennya (dengan
[:n**k]
), ini berarti elemen yang diminati adalahs%w
.sumber
J ,
413021 byte-11 byte, terima kasih untuk Jonah!
-9 byte, terima kasih kepada FrownyFrog & ngn!
Cobalah online!
Terbalik
+/-
sumber
$@]t@$(|.,@(t=.#\,`(|.@,)/.]))
( Coba online! )&.
saya kehilangan argumen kiri sepanjang waktu, itu sebabnya saya menyerah.JavaScript (Node.js) , 102 byte
Mengambil input sebagai
(matrix)(integer)
. Arti tanda bilangan bulat terbalik.Cobalah online!
Fungsi pembantu
Fungsi pembantug
Fungsi utama
sumber
05AB1E , 16 byte
Cobalah online!
Terima kasih kepada Emigna untuk -5. Sayangnya, saya tidak bisa melihat bagaimana cara golf bagian yang berlebihan keluar. :(
sumber
Arang , 36 byte
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:
Membalikkan baris alternatif input.
Ratakan array.
Putar array yang rata.
Membagi array kembali menjadi baris.
Membalikkan baris alternatif.
Konversi setiap entri ke string dan output dalam format output default yang merupakan satu angka per baris dengan baris spasi ganda. (Memformat dengan pemisah akan memakan biaya panjang pemisah.)
sumber
Pyth, 20 byte
Cobalah online di sini .
sumber
Japt , 28 byte
Cobalah
Jawaban Port of Arnauld . Tantangan terbesar adalah menciptakan fungsi yang dapat digunakan kembali. Secara khusus, ada fungsi pembantu untuk membalik setiap baris lainnya. Pendekatan yang saya ambil adalah membuat panggilan rekursif dan tergantung pada apakah variabel diatur.
JS yang dialihkan:
sumber
Python 3 , 94 byte
Cobalah online!
Menggunakan pembalikan baris ganjil dari jawaban Jonathan Allan .
sumber
APL (Dyalog Classic) , 20 byte
Cobalah online!
sumber
C # (Visual C # Interactive Compiler) , 141 byte
Cobalah online!
-5 total byte berkat @someone!
Fungsi anonim yang melakukan modifikasi di tempat ke matriks input.
Satu loop berulang di atas sel. Anda dapat memindai dari atas ke bawah dan dari kiri ke kanan menggunakan rumus berikut:
row=i/w
col=i%w
Di mana
i
penghitung lingkaran danw
jumlah kolom. Ini sedikit bervariasi saat memindai dalam pola ular.row=i/w
col=i%w
(Baris ke-0, ke-2, ke-4, dll.)col=w-i%w-1
(Baris 1, 3, 5, dll.)Hal lain yang perlu diperhatikan adalah bahwa
%
di C # tidak dikonversi ke nilai positif seperti di beberapa bahasa lain. Diperlukan beberapa byte tambahan untuk menjelaskan hal ini.sumber
dynamic
; komentar juga l. Cobalah online!var
untuk bermain golf yang tidak memungkinkan Anda mendeklarasikan daftar variabel. Mungkin mengapa saya melewatkan ini. Tangkapan yang bagus!y
sepenuhnya untuk menghemat 2 byte: Cobalah secara online!