Saya telah menulis beberapa tantangan terkait dengan matriks, dan yang umum untuk semua adalah bahwa saya menggunakan format seperti di bawah ini ketika mewakili matriks, baik dalam contoh maupun dalam kasus uji:
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
Ini mungkin format yang rumit dalam banyak bahasa.
Tantangan:
Tulis program / fungsi yang dapat mengambil matriks pada formulir yang diberikan di atas sebagai input (langsung salin / tempel dari posting ini), dan output matriks yang sama pada ketiga format konvensional lainnya yang ditunjukkan di bawah ini .
Format input:
Angka dipisahkan oleh jumlah ruang yang bervariasi, dan baris baru untuk mewakili baris (lihat kasus uji).
- Jumlah spasi antar angka tidak dijamin konsisten. Namun Anda dapat mengasumsikan bahwa digit terakhir di setiap kolom sejajar (jika itu membantu).
- Mungkin ada bilangan bulat dan mengapung, dan mereka bisa positif, negatif atau nol. Matriks tidak akan berisi bilangan bulat dan mengapung pada saat yang bersamaan.
- Anda dapat berasumsi bahwa tidak ada angka yang lebih panjang dari 10 karakter, termasuk titik minus dan desimal untuk pelampung negatif.
- Anda dapat mengasumsikan bahwa ada jumlah entri yang sama di setiap baris dan di setiap kolom.
- Tidak akan ada matriks input kosong, tetapi bisa ada angka tunggal, atau matriks dengan hanya satu baris atau kolom.
- Anda mungkin dalam kasus ini memilih antara format output yang ditunjukkan dalam kasus uji
Program / fungsi Anda harus menangani input jika langsung disalin dari pos ini dan ditempelkan ke penerjemah (STDIN atau sebagai argumen fungsi atau sesuatu yang setara). Anda mungkin memiliki apa pun yang Anda suka (tanda kurung, tanda kutip, tanda kurung) di depan, dan / atau setelah matriks, tetapi Anda harus mempertimbangkan matriks urutan karakter yang tidak dapat diubah (yang termasuk baris baru).
Untuk memperjelas: Asumsikan fungsi / program Anda dipanggil f
dan matriksnya adalah:
1 -2
3 5
6 7
maka Anda dapat memberikan matriks sebagai argumen fungsi seperti ini (dan banyak pilihan lainnya):
f(1 -2
3 5
6 7)
f([1 -2
3 5
6 7])
f("""1 -2
3 5
6 7""")
Jika bahasa Anda tidak bisa, dengan cara apa pun, ambil salinan / tempel matriks sebagai masukan maka saya khawatir Anda harus memilih bahasa lain.
Format output:
Anda harus menampilkan matriks pada tiga format berikut (urutan tidak masalah):
[[16, 2, 3, 13], [5, 11, 10, 8], [9, 7, 6, 12], [4, 14, 15, 1]]
{{16, 2, 3, 13}, {5, 11, 10, 8}, {9, 7, 6, 12}, {4, 14, 15, 1}}
[16, 2, 3, 13; 5, 11, 10, 8; 9, 7, 6, 12; 4, 14, 15, 1]
- Anda dapat memisahkan tiga output sesuai keinginan Anda (mis. Baris baru)
- Anda harus menampilkan angka menggunakan presisi yang sama dengan input (misalnya, Anda tidak boleh memangkas jumlah desimal, atau output integer sebagai pelampung).
- Ruang-ruang tersebut wajib
- Anda harus menggunakan
-
angka negatif, bukan_
atau serupa.
Kasus uji:
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
----
[[16, 2, 3, 13], [5, 11, 10, 8], [9, 7, 6, 12], [4, 14, 15, 1]]
{{16, 2, 3, 13}, {5, 11, 10, 8}, {9, 7, 6, 12}, {4, 14, 15, 1}}
[16, 2, 3, 13; 5, 11, 10, 8; 9, 7, 6, 12; 4, 14, 15, 1]
0.14778 0.27114 0.24415
0.45997 0.12287 0.67470
0.28945 0.37928 0.51887
----
[[0.14778, 0.27114, 0.24415], [0.45997, 0.12287, 0.6747], [0.28945, 0.37928, 0.51887]]
{{0.14778, 0.27114, 0.24415}, {0.45997, 0.12287, 0.6747}, {0.28945, 0.37928, 0.51887}}
[0.14778, 0.27114, 0.24415; 0.45997, 0.12287, 0.6747; 0.28945, 0.37928, 0.51887]
-0.0398301 0.2403455 -0.2253368 0.3565870 0.0605803 0.0830780
-0.3254422 -0.1185191 -0.2989537 0.1647319 0.3621135 0.2018815
-0.0022281 -0.3362287 -0.3568447 0.4419063 0.3801872 -0.2847033
---
[[-0.0398301, 0.2403455, -0.2253368, 0.3565870, 0.0605803, 0.0830780], [-0.3254422, -0.1185191, -0.2989537, 0.1647319, 0.3621135, 0.2018815], [-0.0022281, -0.3362287, -0.3568447, 0.4419063, 0.3801872, -0.2847033],]
{{-0.0398301, 0.2403455, -0.2253368, 0.3565870, 0.0605803, 0.0830780}, {-0.3254422, -0.1185191, -0.2989537, 0.1647319, 0.3621135, 0.2018815}, {-0.0022281, -0.3362287, -0.3568447, 0.4419063, 0.3801872, -0.2847033},}
[-0.0398301, 0.2403455, -0.2253368, 0.3565870, 0.0605803, 0.0830780; -0.3254422, -0.1185191, -0.2989537, 0.1647319, 0.3621135, 0.2018815; -0.0022281, -0.3362287, -0.3568447, 0.4419063, 0.3801872, -0.2847033]
0 4 1 0
0 0 -6 0
0 1 4 -3
2 0 0 8
0 0 0 0
----
[[0, 4, 1, 0], [0, 0, -6, 0], [0, 1, 4, -3], [2, 0, 0, 8], [0, 0, 0, 0]]
{{0, 4, 1, 0}, {0, 0, -6, 0}, {0, 1, 4, -3}, {2, 0, 0, 8}, {0, 0, 0, 0}}
[0, 4, 1, 0; 0, 0, -6, 0; 0, 1, 4, -3; 2, 0, 0, 8; 0, 0, 0, 0]
1
----
[1] (or [[1]])
{1} (or {{1}})
[1] (or 1)
1 2
----
[1, 2] (or [[1, 2]])
{1, 2} (or {{1, 2}})
[1, 2]
4
5
----
[[4], [5]]
{{4}, {5}}
[4; 5]
Saya sepenuhnya sadar akan hal ini , tetapi dalam tantangan ini, format I / O yang rumit adalah intinya. Tantangannya adalah tentang memformat output dalam beberapa bahasa, sementara membaca input akan menjadi bagian tersulit dalam bahasa lain.
Tolong jangan berkecil hati jika membaca input sulit, kiriman tersebut mungkin yang paling menarik. Singkat tidak selalu sama dengan mengesankan. Dan seperti biasa, penjelasan didorong!
Japt ,
6353 byteIni datang pada 44 byte sebelum saya perhatikan bahwa jarak dalam output adalah wajib.
Menguji
Penjelasan
sumber
Perl 5 , 71 byte
69 byte kode +
-p0
bendera.Cobalah online!
Penjelasan
s/^ *(.+)/[$1]/gm;
menambahkan[]
sekitar setiap baris sambil menghapus spasi utama.s/\s+/, /g;
menggantikan run spasi dan baris baru dengan koma dan spasi.Output pertama kemudian diperoleh sekitarnya dengan kawat gigi:
[$_]
.Yang kedua perlu mengganti kawat gigi dengan braket keriting (
y/[]/{}/r
) dan mengelilingi dengan braket keriting"{" ... "}"
.Untuk yang ketiga,
], [
diganti dengan titik koma dan spasi (s/], \[/; /gr
).Setelah menulis solusi ini, saya mencoba mengadaptasi jawaban Retina Martin Ender, tetapi akhirnya lebih lama 10 byte ( TryItOnline ):
Untuk versi ini, lihat jawaban Martin untuk penjelasannya.
sumber
MATL , 60 byte
Cobalah online!
Terima kasih banyak untuk Luis Mendo karena telah mencukur seperempat dari bytecount saya di masterclass dalam obrolan.
Tempel input, diikuti oleh baris kosong.
sumber
05AB1E ,
4544 byteCobalah online!
Output pertama
Output kedua
Keluaran ketiga
sumber
Python 2 , 143 byte
Cobalah online!
sumber
Javascript (ES6),
121110106 byte-15 byte terima kasih kepada @Shaggy dan @Justin
Cuplikan kode contoh:
sumber
map(x=>x.trim().replace(/ +/g,", "))
kemap(x=>x.match(/\S+/g).join`, `)
.Python 2 ,
163152150145 byte-5 byte terima kasih kepada Felipe Nardi Batista yang menyarankan penggunaan percikan (maaf, saya hanya perlu alasan untuk mengatakan kata itu: P).
Cobalah online!
sumber
Python 3 ,
184 178 174 173 169 163 * 157 *153 byteInput / Output Format: Output dengan spasi antara matriks dan input dengan pemanggilan fungsi ini (seperti yang ditunjukkan pada TIO):
Ini fungsinya:
Cobalah online!
* Menyimpan 6 byte berkat @officialaimm (dari 169 hingga 163 byte).
* Disimpan 4 byte berkat @FelipeNardiBatista.
Penjelasan yang akan datang setelah bermain golf lebih lanjut.
sumber
C, 415 byte
Itu monster dan waaayyyy terlalu lama, tapi aku sudah selesai dengan itu. Seharusnya pergi untuk pendekatan yang berbeda mungkin.
Cobalah online!
Kasing uji kedua | Kasus uji ketiga | Kasing uji keempat | Kasus uji kelima | Kasus uji keenam | Test case ketujuh
sumber
Jelly , 37 byte
Program lengkap mencetak tiga format pada tiga baris.
Cobalah online!
Bagaimana?
sumber
V , 41 byte
Cobalah online!
Penjelasan
sumber
R , 132 byte
Cobalah online!
fungsi anonim. Mengambil input seperti
Ini mencetaknya dalam urutan yang sama dengan test case, tetapi dengan spasi sebagai pemisah.
Penjelasan:
Pertama kali bertukar ruang dengan
,
dan menyimpan hasilnya sebagaiy
. Kemudian ia bertukar baris baru dengan], [
, meletakkan[[
dan]]
di kedua ujung, dan menyimpan hasilnya sebagaiz
.Berikutnya,
chartr
switch[
dengan{
dan]
dengan}
diz
.Akhirnya, dibutuhkan
y
, menukar baris baru dengan;
dan menempatkan[
dan]
di kedua ujungnya.Kemudian semua hasil diteruskan dalam urutan
cat
yang mencetaknya, semua diformat dengan baik, dan dipisahkan oleh satu ruang.Tanpa ungolfed:
sumber
Java 8 dengan Netbeans 8+, 209 byte
Hitung adalah 208 dari kode, ditambah 1 byte untuk menjalankannya dengan menekan
F6
.Jawaban rumit untuk tantangan rumit: p
Bagaimana cara menggunakan?
Di dalam Netbeans, rekatkan kode ini dalam file bernama
M.java
. Kemudian salin matriks yang ingin Anda gunakan. Kemudian antara dua karakter berturut-turut""
, tekanctrl
+v
sesuai kebutuhan oleh tantangan.Sekarang tekan
F6
! Ini akan mengkompilasi kode, menjalankannya dan menampilkan representasi matriks yang diharapkan.sumber
\n
, membuat hasilnya apa yang kamu lihat. Jadi saya tidak mengerti, jujur saja: sMathematica, 129 byte
Baris ketiga dan keempat bersama-sama mendefinisikan fungsi murni yang mengambil string sebagai input; misalnya, jika kita atur
f=Print...&
, maka test case terakhir akan disebut sebagai:Cuplikan
mem-parsing string input sebagai matriks (string - kita tidak pernah mencoba menafsirkan entri sebagai jumlah numerik) dan mengubah ekspresi yang dihasilkan kembali ke string; ini secara otomatis menghasilkan format output dengan kurung kurawal. Kemudian
Print[#,n,#~r~{"{"->"[","}"->"]"},n,#~r~{"{{"->"[","}}"->"]","}, {"->"; "}]
mencetak format output dan dua lainnya, dipisahkan oleh baris baru, dengan menggunakan aturan penggantian string langsung.sumber
Pip ,
4946 byte45 byte kode, +1 untuk
-r
bendera.Mengambil input dari stdin. Cobalah online!
Penjelasan
(Format penjelasan ini terasa agak berbelit-belit bagi saya, jadi beri tahu saya jika ada sesuatu yang tidak masuk akal.)
sumber
SCALA, 590 byte
Sulit, tapi saya pikir saya sudah selesai dengan itu
Penjelasan cepat: Saya mengambil input yang dikelilingi oleh tiga tanda kutip, lalu melepas spasi yang tidak diminta; pisahkan string dua kali (satu kali untuk garis dan satu kali untuk kolom); dan saya mencetak dengan tiga rutinitas saya. Mungkin bisa mendefinisikan fungsi untuk saling menguntungkan, tetapi saya tidak tahu caranya.
Cobalah online!
sumber
05AB1E , 34 byte
Cobalah online!
ε...}
telah diganti denganvy...})
di TIO karena belum ditarik ke sana.sumber
C # (.NET Core) , 214 byte
Cobalah online!
Mengambil Matrix sebagai string, mengembalikan tiga format sebagai string tunggal yang dipisahkan oleh baris baru.
sumber
using System.Text.RegularExpressions
itu diperlukan menambahkan (dengan hitungan saya) 37 byte tambahan.Arang , 38 byte
Cobalah online! Catatan: Ruang tambahan. Tautan adalah untuk mengucapkan versi kode. Arang memiliki opsi input multiline yang dibatasi menggunakan
["""
dan"""]
. Penjelasan:Ini mengambil input dan menyiapkannya dengan membaginya menjadi garis-garis dan menormalkan pemisah.
Ini menangani kasus
[[ ... ], [ ... ]]
dan{{ ... }, { ... }}
.Ini menangani
[ ... ; ... ]
kasus ini.Sebelum saya memainkan byte dari solusi di atas, saya dulu memiliki dua solusi 39-byte; ini yang lain:
Cobalah online! Catatan: Ruang tambahan. Tautan adalah untuk mengucapkan versi kode. Penjelasan:
sumber