pengantar
Misalkan Anda memiliki daftar daftar bilangan bulat (atau objek apa pun sebenarnya, tetapi mari kita tetap menggunakan bilangan bulat untuk kesederhanaan). Daftarnya mungkin panjangnya berbeda, dan beberapa di antaranya mungkin kosong. Mari kita menulis daftar dalam format tabel:
[[ 1, 2, 3, 4, 5],
[ 6, 7],
[ 8, 9, 10, 11],
[],
[12, 13, 14],
[15, 16, 17, 18]]
Tabel ini memiliki 5 kolom vertikal, yang berisi nomor 1, 6, 8, 12, 15
, 2, 7, 9, 13, 16
, 3, 10, 14, 17
, 4, 11, 18
, dan 5
. Jika kita membalikkan setiap kolom, kita memperoleh daftar 15, 12, 8, 6, 1
, 16, 13, 9, 7, 2
, 17, 14, 10, 3
, 18, 11, 4
, dan 5
. Mari kita pasang angka-angka itu kembali ke kolom tabel sambil menjaga panjang baris sama seperti sebelumnya:
[[15, 16, 17, 18, 5],
[12, 13],
[ 8, 9, 14, 11],
[],
[ 6, 7, 10],
[ 1, 2, 3, 4]]
Tugas Anda adalah mengimplementasikan operasi ini.
Masukan dan keluaran
Input Anda adalah daftar daftar bilangan bulat negatif, mewakili baris. Baris mungkin memiliki panjang yang berbeda, dan beberapa di antaranya mungkin kosong. Akan selalu ada setidaknya satu baris. Output Anda adalah hasil membalikkan setiap kolom, seperti yang dijelaskan di atas. Input dan output mungkin dalam format yang masuk akal.
Hitungan byte terendah di setiap bahasa menang. Aturan standar kode-golf berlaku.
Uji kasus
[[]] -> [[]]
[[],[]] -> [[],[]]
[[8,5,1]] -> [[8,5,1]]
[[1,200],[0,3]] -> [[0,3],[1,200]]
[[],[3,9],[1],[]] -> [[],[1,9],[3],[]]
[[],[5,8,7],[0,6,5,7,1]] -> [[],[0,6,5],[5,8,7,7,1]]
[[1,8,5],[7,5,4],[],[1]] -> [[1,5,4],[7,8,5],[],[1]]
[[],[],[2],[],[31],[],[5],[],[],[],[7]] -> [[],[],[7],[],[5],[],[31],[],[],[],[2]]
[[1,10,100,1000],[2,20,200],[3,30],[4],[5,50,500],[6,60],[7]] -> [[7,60,500,1000],[6,50,200],[5,30],[4],[3,20,100],[2,10],[1]]
[[8,4],[3,0,4,8,1],[8],[0,8],[9,7,1,6],[3,8,1,9,5]] -> [[3,8],[9,7,1,9,5],[0],[8,8],[3,0,1,6],[8,4,4,8,1]]
[[3,9,3],[5],[1],[3,5],[9,0,6,2],[1,3],[4,9,2],[6,6,7,8,7]] -> [[6,6,7],[4],[1],[9,9],[3,3,2,8],[1,0],[5,5,6],[3,9,3,2,7]]
[[8,5,6],[3,5,2,4,9],[4,3,8,3,7],[6,1,1],[1,8,9,9],[9,1,2],[8,7]] -> [[8,7,2],[9,1,9,9,7],[1,8,1,3,9],[6,1,8],[4,3,2,4],[3,5,6],[8,5]]
[[2,4],[1,4],[0,8,7,3],[4,9,2,5],[2,8,0],[0,8,3],[7,3,1],[],[3,3,7,8]] -> [[3,3],[7,3],[0,8,7,8],[2,8,1,5],[4,9,3],[0,8,0],[1,4,2],[],[2,4,7,3]]
[[1,9],[3],[2,4,5]] -> [[2,4],[3,null],[1,9,5]]
)Jawaban:
Jelly , 16 byte
Cobalah online! atau verifikasi semua kasus uji .
Bagaimana itu bekerja
sumber
ṣ
di baris paling atas sangat pintar! (ḟṚṁṣj
Tidak⁸ḟ⁹Ṛṁ⁸ṣ⁹¤j⁹
tepat?) Kalau tidak saya punya ini untuk satu byteJapt ,
1513 bytedisimpan 2 byte berkat @Shaggy
Uji secara online!
Baris kedua dapat dihapus jika kita diizinkan untuk mengisi baris dengan nilai nol, menghemat 4 byte.
Penjelasan
sumber
l;
denganÊ
danmf_Ä
dengan®fÄ
.mf
sepertinya bekerja untuk baris kedua.mf
akan menghilangkan semua nol dalam hasilnya, sayangnya ...APL (Dyalog Unicode) ,
201916 byte SBCS-4 Terima kasih kepada ngn.
Program lengkap. Anjuran untuk input dari STDIN.
Cobalah online!
Penjelasan dengan contoh walk-through
⎕
meminta input yang dievaluasi[[1,8,5],[7,5,4],[],[1]]
*
meningkatkan e untuk kekuatan yang ( e n yang menjamin bahwa tidak akan ada nol)[[2.7,2981,148.4],[1096.6,148.4,54.6],[],[2.7]]
↑
campur daftar menjadi satu matriks, padding dengan nol:┌ ┐
│2.7E0 3.0E3 1.5E2│
│1.1E3 1.5E2 5.5E1│
│0.0E0 0.0E0 0.0E0│
│2.7E0 0.0E0 0.0E0│
└ ┘
⍉
mengubah urutan┌ ┐
│2.7E0 1.1E3 0.0E0 2.7E0│
│3.0E3 1.5E2 0.0E0 0.0E0│
│1.5E2 5.5E1 0.0E0 0.0E0│
└ ┘
⌽@×⍤1
membalikkan elemen positif dari setiap baris┌ ┐
│2.7E0 1.1E3 0.0E0 2.7E0│
│1.5E2 3.0E3 0.0E0 0.0E0│
│5.5E1 1.5E2 0.0E0 0.0E0│
└ ┘
⍉
mengubah urutan┌ ┐
│2.7E0 1.5E2 5.5E1│
│1.1E3 3.0E3 1.5E2│
│0.0E0 0.0E0 0.0E0│
│2.7E0 0.0E0 0.0E0│
└ ┘
↓
pisahkan matriks menjadi daftar daftar[[2.7,148.4,54.6],[1096.6,2981,148.4],[0,0,0],[2.7,0,0]]
0~¨⍨
hapus angka nol dari setiap daftar[[2.7,148.4,54.6],[1096.6,2981,148.4],[],[2.7]]
⍟
logaritma alami[[1,5,4],[7,8,5],[],[1]]
sumber
K4 , 36 byte
Larutan:
Contoh:
Penjelasan:
Yang ini menyakitkan, dan saya masih berusaha menyederhanakan pengindeksan elided.
Alih-alih mengindeks pada, misalnya,
x[0]
yang akan mengembalikan baris pertama , kami ingin mengambil kolom pertama , yang dapat dilakukan dengan menggunakanx[;0]
.Namun lewat variabel
y
kex[;]
memperlakukan sebagai melakukanx[y]
tidakx[;y]
maka mendorong para::
di sana:x[::;]
.Ini sama dengan membalik daftar, tetapi flip mengharuskan semua daftar memiliki panjang yang sama!
sumber
Haskell , 174 byte
Cobalah online!
Tidak Terikat / Penjelasan
Idenya adalah untuk membungkus semua elemen di
[]
dan pad baris dengan[]
(ternyata lebih pendek dari padding dengan bilangan bulat negatif, ini memungkinkan input negatif juga yang bagus), lalu transpos, balikkan semua baris dan transpos lagi dan ratakan setiap baris :* Fungsi transpose ini (
h
) mengembalikan daftar jika tidak ada elemen sama sekali.Fungsi mundur harus mengabaikan
[]
elemen (mis.[[],[1],[],[3],[4]]
->[[],[4],[],[3],[1]]
), ia melakukannya dengan menerima dua argumen: Yang pertama adalah elemen dalam urutan terbalik (mis.[4,3,1]
) Dan yang kedua adalah baris asli.sumber
Python 2 ,
11110592 byteCobalah online!
sumber
print
alih-alihreturn
menyimpan byte.JavaScript (ES6),
7976 byteSunting: Disimpan 3 byte berkat @ETHproductions.
sumber
APL (Dyalog Unicode) , 27 byte SBCS
Cobalah online!
sumber
@
tetapi saya tidak memilikinya.Clojure, 123 byte
Saya mengharapkan
(+ nil)
untuk melempar pengecualian, tetapi mengevaluasi untuknil
: oIni beroperasi tanpa padding, alih-alih menghitung berapa banyak baris sebelumnya setidaknya selama baris saat ini
R
.sumber