Mengindeks jumlah dan strip matriks saya
Diberikan matriks / array 2d dalam bahasa pilihan Anda
Memasukkan:
- Matriks akan selalu memiliki panjang yang aneh
- Matriks akan selalu berbentuk kuadrat sempurna
- Nilai matriks dapat berupa bilangan bulat apa pun dalam bahasa Anda (positif atau negatif)
Contoh:
1 2 3 4 5 6 7
2 3 4 5 6 7 8
3 4 50 6 7 8 9
4 5 6 100 8 9 10
5 6 7 8 -9 10 11
6 7 8 9 10 11 12
7 8 900 10 11 12 0
Definisi:
- "Nomor sentral" didefinisikan sebagai angka yang memiliki jumlah angka yang sama di kiri, kanan, atas dan bawah
Dalam hal ini middlemost 100-nya
- "Cangkang luar" adalah kumpulan angka-angka dengan indeks x dan y atau 0 atau ukuran matriks
1 2 3 4 5 6 7
2 8
3 9
4 10
5 11
6 12
7 8 900 10 11 12 0
Tugas Anda:
Tambahkan ke nomor pusat jumlah dari setiap baris dan kolom setelah mengalikan nilai di masing-masing dengan indeks berbasis 1 mereka
Satu baris misalnya
4 5 6 7 8
untuk setiap nomor
number * index + number * index.....
4*1 + 5*2 + 6*3 + 7*4 + 8*5 => 100
contoh:
2 -3 -9 4 7 1 5 => 61
-2 0 -2 -7 -7 -7 -4 => -141
6 -3 -2 -2 -3 2 1 => -10
8 -8 4 1 -8 2 0 => -20
-5 6 7 -1 8 4 8 => 144
1 5 7 8 7 -9 -5 => 10
7 7 -2 2 -7 -8 0 => -60
|
78 65 60 45 -15 -89 10 => 154
|
=> -16
- Untuk semua baris dan kolom Anda menggabungkan nilai-nilai ini ..
- Sekarang Anda menjumlahkan ini juga => 154-16 = 138
- Anda menambahkan nomor itu ke "nomor pusat" dan menghapus "kulit luar" dari matriks
0 -2 -7 -7 -7 => -88
-3 -2 -2 -3 2 => -15
-8 4 1+138 -8 2 => 395
6 7 -1 8 4 => 69
5 7 8 7 -9 => 26
19 69 442 30 -26
lakukan ini sampai Anda berakhir dengan satu nomor
-2 -2 -3 => -15
4 1060 -8 => 2100
7 -1 8 => 29
27 2115 5
- Tambahkan 2114 + 2147 hingga 1060
- Hapus "kulit luar" dan dapatkan 5321
- Sekarang kita memiliki satu nomor yang tersisa
ini hasilnya!
kasus uji:
-6
-6
-7 -1 8
-4 -6 7
-3 -6 6
2
6 7 -2 5 1
-2 6 -4 -2 3
-1 -4 0 -2 -7
0 1 4 -4 8
-8 -6 -5 0 2
-365
8 3 5 6 6 -7 5
6 2 4 -2 -1 8 3
2 1 -5 3 8 2 -3
3 -1 0 7 -6 7 -5
0 -8 -4 -9 -4 2 -8
8 -9 -3 5 7 8 5
8 -1 4 5 1 -4 8
17611
-9 -7 2 1 1 -2 3 -7 -3 6 7 1 0
-7 -8 -9 -2 7 -2 5 4 7 -7 8 -9 8
-4 4 -1 0 1 5 -3 7 1 -2 -9 4 8
4 8 1 -1 0 7 4 6 -9 3 -9 3 -9
-6 -8 -4 -8 -9 2 1 1 -8 8 2 6 -4
-8 -5 1 1 2 -9 3 7 2 5 -6 -1 2
-8 -5 -7 -4 -9 -2 5 0 2 -4 2 0 -2
-3 -6 -3 2 -9 8 1 -5 5 0 -4 -1 -9
-9 -9 -8 0 -5 -7 1 -2 1 -4 -1 5 7
-6 -9 4 -2 8 7 -9 -5 3 -1 1 8 4
-6 6 -3 -4 3 5 6 8 -2 5 -1 -7 -9
-1 7 -9 4 6 7 6 -8 5 1 0 -3 0
-3 -2 5 -4 0 0 0 -1 7 4 -9 -4 2
-28473770
Jawaban:
MATL ,
3634 byteInput adalah array 2D dengan
;
pemisah barisCobalah online! Atau verifikasi semua kasus uji .
Penjelasan
sumber
Python 2.7, 229 byte
Ini adalah upaya pertama saya pada sesuatu seperti ini, jadi semoga saya mengikuti semua aturan dengan pengiriman ini. Ini hanya fungsi yang mengambil dalam daftar daftar sebagai parameternya. Saya merasa jumlah dan pemahaman daftar mungkin bisa dipersingkat sedikit, tapi itu terlalu sulit bagi saya. : D
Terima kasih kepada Easterly Irk karena membantu saya mencukur beberapa byte.
sumber
...) + sum([i*j...
->...)+sum([i*j...
), tetapi secara keseluruhan, pos pertama yang bagus !!!!...]for ...
bekerja. Anda dapat menghapus setidaknya 2 ruang seperti itu. (akhir daftar klik untuk loop)C #, 257 byte
di sini adalah jawaban non esolang
ungolfed:
sumber
using System.Linq
danusing System
. Saya tidak yakin apakah itu diwajibkan oleh aturan.System.Linq
. Bahasa lain yang memerlukan impor untuk menggunakan fitur tertentu melalui proses yang sama, jadi saya pikir tidak adil untuk menganggap bahwa setiap modul dimuat ke memori dalam C #.J, 66 byte
Pendekatan langsung berdasarkan proses yang dijelaskan dalam tantangan.
[:+/^:2#\*]+|:
mendapat jumlah.]+(i.@,~=](]+*)<.@-:)@#*
adalah cara yang sangat jelek untuk meningkatkan jumlah pusat.[:}:@}."1@}:@}.
menghapus kulit terluar. Mungkin ada cara yang lebih baik untuk melakukan ini.Pemakaian
sumber
Brachylog , 114 byte
Saya kaget ini bahkan bekerja jujur. Setidaknya saya menyadari bahwa Brachylog benar-benar membutuhkan "nilai perubahan elemen itu" sebagai built-in ...
Contoh penggunaan:
Penjelasan
Versi yang lebih mudah dibaca (dan lebih lama):
Saya hanya akan menjelaskan kira-kira apa yang masing-masing predikat (yaitu setiap baris kecuali yang pertama yang Predikat Utama + predikat 1) tidak:
Predikat utama + predikat 1
{l1,?hh.|:2f:7a$\:7a&.}.
: Jika input hanya memiliki satu baris, akhiri algoritme dan kembalikan nilai satu-satunya. Lain menemukan semua baris yang memenuhi predikat 2, kemudian menerapkan predikat 7 pada matriks yang dihasilkan, kemudian predikat 7 pada transposisi, kemudian panggil secara rekursif.Predikat 2
:Im:I:?:3f.
: AmbilI
baris th dari matriks, cari semua nilai baris yang memenuhi predikat 3I
dan matriks sebagai input tambahan.Predikat 3
[L:I:M]h:JmN,Ll:2/D(IJ,M:4&:N+.;'(DIJ),N.)
:L
adalah baris,I
adalah indeks baris,M
adalah matriks.N
adalahJ
elemen ke - 10 dariL
. Jika panjangL
dibagi 2 sama dengan keduanyaI
danJ
, maka output adalah jumlahN
dengan hasil predikat 4 pada matriks. Kalau tidak, outputnya adilN
. Dasar predikat ini menciptakan kembali matriks dengan pengecualian bahwa elemen tengah akan ditambahkan ke jumlah.Predikat 4
$\:?c:5a+.
: Terapkan predikat 5 pada setiap baris dan kolom matriks, satukan hasilnya dengan jumlah hasil.Predikat 5
:6f+.
: Temukan semua output yang valid dari predikat 6 pada baris, satukan output dengan jumlah dari daftar yang dihasilkan.Predikat 6
:ImN,I:1+:N*.
:N
adalah nilaiI
th dari baris tersebut, satukan hasilnya denganN * (I+1)
.Predikat 7
brbr.
: Hapus baris pertama dan terakhir dari matriks.sumber
APL, 56 karakter
Dalam Bahasa Inggris:
⍣(⌊.5×≢⍵)
ulangi "setengah ukuran dimensi bulat" -kali(⍵⍪⍉⍵)+.×⍳≢⍵
produk dalam matriks dan transposinya dengan vektor indeks(-⍴⍵)↑(⌈.5×⍴⍵)↑
mengubah hasil dalam matriks empuk dengan 0s1 1↓¯1 ¯1↓
menghilangkan kulit luarsumber