Tantangan:
Diberikan matriks NxN di mana dan satu dari delapan 'opsi lipat' yang berbeda, menghasilkan array 2D / daftar dengan nilai yang dikurangi.
Delapan opsi lipat adalah: kiri-ke-kanan; kanan ke kiri; atas ke bawah; dari bawah ke atas; topleft-to-bottomright; sayap kanan atas ke bawah; bottomleft-to-topright; bottomleight ke topleft.
Contoh langkah demi langkah:
Matriks input:
[[ 1, 3, 5, 7],
[ 0, 8, 6, 4],
[ 1, 1, 1, 1], (a'th row in the explanation below)
[ 1,25, 0,75]]
Dengan opsi lipat dari atas ke bawah, kami menampilkan sebagai berikut:
[[ 1,-7,-5,-3],
[ 0,22,-5,68]]
Mengapa? Kami melipat dari atas ke bawah. Karena dimensi matriksnya genap, kami tidak memiliki lapisan tengah untuk dilestarikan apa adanya. Baris ' akan dikurangi dengan baris ' (akan menjadi 'baris untuk matriks dimensi ganjil); jadi menjadi . Baris ' kemudian akan dikurangi dengan baris ' (akan menjadi 'baris untuk matriks dimensi ganjil); jadi menjadi .[1, 1, 1, 1]
[1-0, 1-8, 1-6, 1-4]
[1, -7, -5, -3]
[1, 25, 0, 75]
[1-1, 25-3, 0-5, 75-7]
[0, 22, -5, 68]
Dengan opsi lipat bottomright-to-topleft (dengan input-matriks yang sama di atas) kami menampilkan sebagai berikut:
[[-74, 2, 1, 7],
[ 0, 7, 6],
[-24, 1],
[ 1]]
Dengan pengurangan lipat berikut:
[[1-75, 3-1, 5-4, 7],
[ 0-0, 8-1, 6],
[1-25, 1],
[ 1]]
Aturan tantangan:
- Anda dapat menggunakan delapan huruf berbeda
[A-Za-z]
atau angka berbeda dalam rentang untuk opsi pelipatan. Angka atau mungkin merupakan opsi yang paling umum, tetapi jika Anda ingin menggunakan angka yang berbeda dalam kisaran untuk beberapa perhitungan cerdas, jangan ragu untuk melakukannya. Harap sebutkan opsi lipat mana yang Anda gunakan dalam jawaban Anda. - Matriks input akan selalu berupa matriks NxN persegi, jadi Anda tidak harus menangani matriks NxM persegi panjang. juga akan selalu minimal 2, karena matriks kosong atau 1x1 tidak dapat dilipat.
- Input dari matriks akan selalu berisi angka-angka non-negatif dalam kisaran (angka-angka dalam output karena itu akan berada dalam kisaran ).
- Dengan lipatan diagonal (anti-) atau lipatan vertikal / horisontal dimensi ganjil, 'lapisan' tengah akan tetap tidak berubah.
- I / O fleksibel. Dapat berupa array 2D / daftar bilangan bulat; dapat dikembalikan atau dicetak sebagai string yang dibatasi spasi-dan-baris; Anda dapat memodifikasi input-matrix dan mengganti angka-angka yang seharusnya dengan
null
atau angka di luar[-999, 999]
rentang untuk menunjukkan mereka hilang; dll. dll
Aturan umum:
- Ini adalah kode-golf , jadi jawaban tersingkat dalam byte menang.
Jangan biarkan bahasa kode-golf mencegah Anda memposting jawaban dengan bahasa non-codegolf. Cobalah untuk memberikan jawaban sesingkat mungkin untuk bahasa pemrograman 'apa saja'. - Aturan standar berlaku untuk jawaban Anda dengan aturan I / O default , sehingga Anda diizinkan untuk menggunakan STDIN / STDOUT, fungsi / metode dengan parameter yang tepat dan tipe pengembalian, program penuh. Panggilanmu.
- Celah default tidak diperbolehkan.
- Jika memungkinkan, silakan tambahkan tautan dengan tes untuk kode Anda (yaitu TIO ).
- Juga, menambahkan penjelasan untuk jawaban Anda sangat dianjurkan.
Kasus uji:
Input-matrix 1:
Input-matrix (for the following eight test cases):
[[ 1, 3, 5, 7],
[ 0, 8, 6, 4],
[ 1, 1, 1, 1],
[ 1,25, 0,75]]
Input-folding option: left-to-right
Output: [[2,6],[-2,4],[0,0],[-25,74]]
Input-folding option: right-to-left
Output: [[-6,-2],[-4,2],[0,0],[-74,25]]
Input-folding option: top-to-bottom
Output: [[1,-7,-5,-3],[0,22,-5,68]]
Input-folding option: bottom-to-top
Output: [[0,-22,5,-68],[-1,7,5,3]]
Input-folding option: topleft-to-bottomright
Output: [[7],[6,-1],[1,-7,-2],[1,24,0,74]]
Input-folding option: topright-to-bottomleft
Output: [[1],[-3,8],[-4,-5,1],[-6,21,-1,75]]
Input-folding option: bottomleft-to-topright
Output: [[1,3,4,6],[8,5,-21],[1,1],[75]]
Input-folding option: bottomright-to-topleft
Output: [[-74,2,1,7],[0,7,6],[-24,1],[1]]
Input-matrix 2:
Input-matrix (for the following eight test cases):
[[17, 4, 3],
[ 8, 1,11],
[11, 9, 7]]
Input-folding option: left-to-right
Output: [[4,-14],[1,3],[9,-4]]
Input-folding option: right-to-left
Output: [[14,4],[-3,1],[4,9]]
Input-folding option: top-to-bottom
Output: [[8,1,11],[-6,5,4]]
Input-folding option: bottom-to-top
Output: [[6,-5,-4],[8,1,11]]
Input-folding option: topleft-to-bottomright
Output: [[3],[1,7],[11,1,-10]]
Input-folding option: topright-to-bottomleft
Output: [[17],[4,1],[8,-2,7]]
Input-folding option: bottomleft-to-topright
Output: [[17,-4,-8],[1,2],[7]]
Input-folding option: bottomright-to-topleft
Output: [[10,-7,3],[-1,1],[11]]
A-Za-z
apa saja atau bilangan bulat apa pun dalam rentang[-999,999]
, jadi pesanan tidak masalah. Dan maaf, tetapi Anda harus menampilkan lipatan yang benar berdasarkan input, jadi mengeluarkan kedelapan tidak diperbolehkan.Jawaban:
Oktaf ,
256248244248 byteCobalah online!
-2 byte (dan sedikit merapikan) terima kasih kepada Luis Mendo
+2 byte karena koreksi untuk TB
Operasi 1-Indexed untuk nilai b dari 1-8:
Ini membuat saya sakit kepala, saya akan golf dengan benar nanti
sumber
rows(a)
alih-alihsize(a,2)
Jelly ,
3934 byteAda kemungkinan bermain golf lebih lanjut dengan menggabungkan beberapa "fungsi".
... ya: -5 terima kasih kepada NickKennedy!
Cobalah online!
Sebuah link diad yang menerima integer (instruksi) dan daftar daftar angka (matriks).
Bagaimana?
Tautan ini membuat kode Jelly yang kemudian dievaluasi menggunakan M sebagai ...
Masing-masing dari delapan opsi tersebut adalah:
Masing-masing (kecuali
0
dan4
) menerapkan transformasi untukM
menggunakan beberapaZ
(transpos),Ṛ
(mundur), danU
(mundur masing-masing); kemudian salah satu dari dua fungsi (lihat di bawah), kemudian kebalikan dari transformasi pengaturan (jika ada satu) diimplementasikan dengan kebalikan dari kode.Dua fungsi batin adalah:
sumber
JavaScript (ES6),
149 ... 133128 byte(matrix)(d)
NaN
Cobalah online!
Berkomentar
sumber
Jelly ,
7134 byteCobalah online!
Test Suite
Program lengkap. Argumen yang benar adalah matriks. Argumen kiri adalah jenis lipatan:
Ditulis ulang untuk menggunakan binary bijective 5-bit sebagai input. Perhatikan bahwa program yang diberikan di atas tidak akan bekerja berulang kali untuk beberapa lipatan.
sumber
Oktaf ,
482 byte, 459 BytesInput untuk memutuskan arah pelipatan adalah:
1) kiri ke kanan
2) bawah ke atas
3) kanan ke kiri
4) atas ke bawah
5) tr ke bl
6) br ke tl
7) bl ke tr 7) bl ke tr
8) tl ke br
Setiap panggilan hanya menghasilkan lipatan yang ditentukan, bukan semuanya (yang mungkin akan memakan waktu kurang dari byte). Masalah terbesar adalah bahwa untuk kasus ini saya tidak tahu cara meletakkan lipatan 1-4 dan 5-8 dalam satu lingkaran yang sama. Tapi setidaknya oktaf memiliki matriks yang terlihat bagus.
Cobalah online!
Output suppression biaya byte, jadi abaikan semua yang bukan pernyataan pengembalian (ans =).
sumber
Arang ,
7877 byteCobalah online! Tautan adalah untuk mengucapkan versi kode. Gunakan opsi lipat berikut:
Nilai yang dilipat diganti dengan string kosong. Penjelasan:
Putar array empat kali.
Lipat array secara horizontal bila perlu.
Lipat array secara diagonal bila perlu.
Keluarkan array setelah diputar kembali ke orientasi aslinya.
sumber