Ambil matriks persegi yang berisi bilangan bulat positif sebagai input, dan hitung "jumlah yang diputar" dari matriks.
Jumlah yang diputar:
Ambil jumlah dari matriks asli dan matriks yang sama diputar 90, 180 dan 270 derajat.
Misalkan matriksnya adalah:
2 5 8
3 12 8
6 6 10
maka jumlah yang diputar adalah:
2 5 8 8 8 10 10 6 6 6 3 2
3 12 8 + 5 12 6 + 8 12 3 + 6 12 5 =
6 6 10 2 3 6 8 5 2 10 8 8
26 22 26
22 48 22
26 22 26
Kasus uji:
Input dan output dipisahkan oleh tanda hubung, kasus uji berbeda dipisahkan oleh baris baru. Kasing uji dalam format yang lebih nyaman dapat ditemukan di sini .
1
-------------
4
1 3
2 4
-------------
10 10
10 10
14 6 7 14
6 12 13 13
6 2 3 10
5 1 12 12
-------------
45 37 24 45
24 30 30 37
37 30 30 24
45 24 37 45
14 2 5 10 2
18 9 12 1 9
3 1 5 11 14
13 20 7 19 12
2 1 9 5 6
-------------
24 29 31 41 24
41 49 31 49 29
31 31 20 31 31
29 49 31 49 41
24 41 31 29 24
f=lambda*l:l[3:]and[map(sum,zip(*d))for d in zip(*l)]or f(zip(*l[0][::-1]),*l)
menyimpan dua byte dengan input "normal". Cobalah online!lambda*l
itu tidak mungkin dalam Python 2 karena beberapa alasan.x,*y=1,2,3
dengan Python 2.7 atau[*x]
Python 3.4, tetapi ekspresi berbintang dapat digunakan untuk argumen fungsi bahkan dalam Python 1.6. Cobalah online!Oktaf , 29 byte
Cobalah online!
Penjelasan
Ini menambahkan matriks input dengan versi rotasi 90 derajat itu sendiri. Hasilnya kemudian ditambahkan dengan versi diputar 180 derajat itu sendiri.
sumber
Bersihkan , 110 byte
Cobalah online!
Dari matricies:
X = transpose(reverse M)
: Rotasi 90 derajatY = reverse(map reverse M)
: Rotasi 180 derajatZ = reverse(transpose M)
: Rotasi 270 derajatIni ritsleting operator tambahan atas
M
danX
, sertaY
danZ
, dan kemudian atas hasilnya.sumber
Bahasa Wolfram (Mathematica) , 28 byte
adalah\[Transpose]
.Cobalah online!
sumber
ReplacePart[#,{a_,b_}:>Tr@Extract[#,{{a,b},{b,-a},{-a,-b},{-b,a}}]]&
dan jugaPlus@@NestList[Reverse@#&,#,3]&
Julia 0,6 , 29 byte
Cobalah online!
Saya tidak bisa mendapatkan di bawah solusi LukeS
Tetapi dalam mencoba saya memang datang dengan ini, yang saya pikir agak lucu.
Pertama kita mendefinisikan ulang perkalian menjadi operasi rotasi, di mana pertama kali ada berapa kali untuk memutar. Jadi sejak julia dikalikan dengan penjajaran lalu:
1x
menjadirotr90(x,1)
dan3x
menjadirotr90(x,3)
dll.Lalu kami menulis jumlahnya.
sumber
Julia 0,6 ,
2824 byteCobalah online!
sumber
[1]
contoh harus dilakukan~reshape([1], (1,1))
karena itulah bagaimana matriks 1x1 dinyatakan dalam julia 0.6.Jelly , 7 byte
Cobalah online!
sumber
MATL , 9 byte
Cobalah di MATL Online
Penjelasan
sumber
Oktaf , 33 byte
Cobalah online!
Penjelasan:
(r=@rot90)
dengan cara inline menciptakan pegangan fungsi yangr
digunakan untuk memutar matriks 90 derajat. Jika argumen kedua,k
diberikanr
maka akan memutark*90
derajat matriks . Jadi ini sama dengan kode pseudo:sumber
Pyth , 13 byte
Cobalah online!
sumber
J ,
1615 byteCobalah online!
sumber
^:
. Solusi pintar!MATL , 7 byte
Cobalah di MATL Online!
Penjelasan
Port jawaban Octave saya.
sumber
R ,
6964 byteCobalah online!
Coba nomor tiga di codegolf. Dari 69 hingga 64 byte, terima kasih kepada Giuseppe!
sumber
a
ke argumen fungsi akan menghemat byte dengan memungkinkan Anda untuk menyingkirkan{}
sekitar fungsi body. Juga, porting pendekatan Octave Luis Mendo mungkin menghemat beberapa byte? Akhirnya, saya tidak yakin 100% tetapit(apply(x,2,rev))
setara denganapply(x,1,rev)
?n
untuka()
mengulang operasi sekalipun.APL (Dyalog Classic) , 8 byte
Cobalah online!
sumber
Pari / GP , 31 byte
Cobalah online!
sumber
JavaScript (ES6), 77 byte
sumber
Jelly , 7 byte
Cobalah online!
Disimpan 1 byte berkat Erik the Outgolfer (juga berkat saran untuk memperbaiki bug).
Bagaimana?
sumber
Python 2 , 76 byte
Cobalah online!
sumber
APL (Dyalog Classic) , 17 byte
Cobalah online!
APL NARS 34bytes
2117 karakter-2 karakter berkat ngn
-2 karakter karena operator komposit ∘ tampaknya lebih diutamakan pada +
sepertinya rota putar dari 90 °, ⌽⊖a putar dari 180 °, aa putar dari 270 ° seperti ⍉⌽
Jika ada operator p sebagai:
Operator p di atas akan sedemikian rupa sehingga jika g adalah fungsi argumen 1 (monadik?) Maka harus:
solusinya adalah pheraps 15 chars
Tetapi bisa lebih baik satu operator "terdiri n waktu" d sedemikian rupa sehingga "3 df w" adalah f (f (f (w ()))).
Sekarang saya menulis sesuatu tetapi terlalu rapuh tanpa perlu memeriksa jenis.
Tetapi saya lebih suka operator q yang mengulangi penulisan f dengan argumen m (tidak lengkap karena kasus kesalahan jenis tidak ditulis)
solusinya adalah 17 karakter tetapi saya lebih suka itu
sumber
⍉⌽
dan semuanya cocok untuk kereta+/⌽∘⍉f 4⍴⊂⍵
? Untuk mendapatkan empat salinan⍵
, pertama Anda harus melampirkannya⊂
. Untuk memiliki⌽⍉
sebagai operand untukf
, Anda harus menulis ke dalam fungsi tunggal seperti ini:⌽∘⍉
. Misteriusf
bisa berupa pemindaian (backslash), tetapi ada detail lain untuk dijaga -⌽∘⍉
akan mendapatkan argumen kiri, jadi kita harus membuatnya mengabaikannya:+/{⌽⍉⍵}\4⍴⊂⍵
atau+/⊢∘⌽∘⍉\4⍴⊂⍵
.⊢ + ⌽∘⍉ + ⌽∘⊖ + ⍉∘⌽
. Itu bisa mengarah pada solusi yang lebih singkat jika Anda mengatur ulang coretan dengan cerdik dan memanfaatkan kereta dengan baik.K4 / K (oK) ,
238 byteLarutan:
Cobalah online!
Contoh:
Penjelasan:
Terima kasih kepada ngn untuk teknik transformasi yang disederhanakan.
Tambahan:
Dalam Q ini bisa ditulis sebagai
sumber
+/{|+x}\
Ruby ,
74 7266 byteCobalah online!
Ini bekerja berdasarkan elemen-demi-elemen, menemukan elemen terkait secara matematis, alih-alih memutar array. Bagian kuncinya adalah
i,j=j,~i
, yang berputar (i, j) searah jarum jam 90 derajat.-2 byte terima kasih kepada Tn. Xcoder
-6 byte karena
sum
sumber
Python 3 ,
105102 byte3 byte terima kasih kepada Tn. Xcoder.
Cobalah online!
sumber
Ruby
8979 byte-10 byte terima kasih kepada Unihedron
Cobalah online!
sumber
.map &:dup
dengan*1
untuk memotong banyak karakter.array*length
menciptakan array baru dan merupakan cara praktis untuk mengkloning dangkal.n=*m
ini lebih pendek.transpose
05AB1E , 12 byte
Cobalah online!
sumber
Haskell ,
84 8367 byteCobalah online!
Terima kasih kepada Laikoni dan benar-benar manusiawi karena menghemat banyak byte!
sumber
Sekam , 9 byte
Cobalah online!
Penjelasan
sumber
tinylisp , 132 byte
Mari kita ambil fungsi perpustakaan yang baru ditambahkan
transpose
untuk memutar!Baris terakhir adalah fungsi lambda tanpa nama yang melakukan penjumlahan rotasi. Untuk benar-benar menggunakannya, Anda ingin menggunakannya
d
untuk mengikatnya ke sebuah nama. Cobalah online!Tidak disatukan, dengan komentar
sumber
Attache , 20 byte
Cobalah online!
Penjelasan
MatrixRotate&0:3
mengembang untuk, dengan masukanx
,MatrixRotate[x, 0:3]
yang pada gilirannya exapnds untuk[MatrixRotate[x, 0], MatrixRotate[x, 1], MatrixRotate[x, 2], MatrixRotate[x, 3]]
. Dengan kata lain, ini melakukan vektorisasi pada RHS. Kemudian,Sum
ambil jumlah semua matriks ini dengan satu level. Ini memberikan hasil yang diinginkan.sumber
Java 8,
135133 byte-2 byte terima kasih kepada @ceilingcat .
Penjelasan:
Cobalah online.
sumber