Intro
Lebih kompleks daripada Sekotak teks karena ini membutuhkan padding dan input memiliki tipe data yang tidak diketahui.
Setiap tahun, Dyalog Ltd. mengadakan kompetisi siswa. Tantangannya adalah untuk menulis kode APL yang baik . Ini adalah edisi kode golf- bahasa agnostik dari masalah kesepuluh tahun ini.
Saya memiliki izin eksplisit untuk mengirimkan tantangan ini di sini dari penulis asli kompetisi. Jangan ragu untuk memverifikasi dengan mengikuti tautan yang disediakan dan menghubungi penulis.
Masalah
Tulis program / fungsi yang akan membentuk kembali string atau daftar numerik yang diberikan ke dalam kotak terkecil yang akan berisi semua elemen input, padding dengan elemen tambahan jika perlu. Elemen pad harus elemen isi default untuk tipe data yang diberikan, atau salah satu elemen pilihan Anda. Elemen-elemen bujur sangkar harus dalam urutan sedemikian rupa sehingga meratakannya akan memberikan urutan asli dari data input (dengan elemen bantalan tambahan, jika ada).
Uji kasus
[1,2,3,4]
→
[[1,2],
[3,4]]
[1,2,3,4,5]
→
[[1,2,3],
[4,5,0],
[0,0,0]]
"Dyalog APL"
→
[["Dyal"], [["D","y","a","l"],
["og A"], or ["o","g"," ","A"],
["PL "], ["P","L"," "," "],
[" "]] [" "," "," "," "]]
[100]
→
[[100]]
[]
→
setara dengan bahasa Anda yang terdekat dengan matriks kosong, misalnya []
atau[[]]
[1,2,3,4,'O']
, atau apakah dijamin tidak terjadi? 3. Apakah pesanan yang diperlukan setelah persyaratan perataan mengabaikan elemen pad (mis. Dapatkah input[1,2,3,4,5]
hasil[[0,0,0],[0,1,2],[3,4,5]]
atau bahkan[[0,1,0],[2,0,3],[0,4,5]]
)?Jawaban:
MATL ,
129 byteDisimpan tiga byte berkat Luis.
he
bukannyaUGwewe
, tetapi menambahkant
di awal.Cobalah online!
Ini mengembalikan hasil, tetapi ditransposisikan dibandingkan dengan hasil di pos OPs (yang OK).
Penjelasan:
Ini bekerja dengan cara yang sama untuk input numerik dan string, karena MATL memperlakukannya dengan cara yang sama.
Asumsikan inputnya adalah
'Dyalog APL'
Ini tidak menghasilkan apa-apa untuk input kosong, yang kebetulan merupakan cara MATL mengeluarkan matriks / string kosong.
sumber
tnX^Xkt3$e
itu juga berhasiltnX^Xkthe
reshape
dan tidak melihat sangat jelas:$: Specified inputs
. Dan saya tidak tahu Anda bisa melewatkan dimensi sebagai vektor. Saya tahu harus ada jalan tanpa harus melalui dua bentuk ulang. Terima kasih! :)JavaScript (ES7), 70 byte
Mengembalikan
[]
untuk array / string kosong. Digunakanundefined
sebagai nilai isi. Untuk ES6 ganti(...)**.5
denganMath.sqrt(...)
(+5 byte).sumber
Brachylog , 10 byte
Cobalah online!
Mengambil string sebagai daftar karakter (penanya telah mengkonfirmasi bahwa ini OK).
Ini sangat tidak efisien pada input yang lebih lama, karena brute-force semua kemungkinan pembentukan kembali input, mencoba semakin banyak padding, sampai menemukan yang kebetulan persegi.
Penjelasan
Elemen padding yang digunakan adalah nilai "nilai apa pun" Prolog
_
, yang biasanya ditampilkan sebagai_G
ditambah beberapa digit acak pada output (untuk memungkinkan mesin Prolog mengekspresikan hubungan antara nilai-nilai tujuan umum).Kebetulan, ada perbaikan bug untuk SWI-Prolog hanya beberapa hari yang lalu yang membuat program ini mungkin (meskipun tampaknya masih berfungsi pada versi yang lebih tua, kereta); kendala "itu persegi panjang" yang tersirat
\
sebelumnya rusak, tetapi telah diperbaiki pada waktunya untuk tantangan.sumber
Python 2 , 105 byte
Cobalah online!
sumber
PHP, 139 Bytes
Output string sebagai array char 2D
bekerja dengan
[]
array kosongCobalah online!
PHP, 143 Bytes
perlu
[[]]
sebagai array kosongOutput string sebagai array string 1D
Cobalah online!
sumber
Jelly , 13 byte
Tautan monadik yang mengambil daftar datar dan mengembalikan daftar daftar.
Test suite di Coba online!
Bagaimana?
Menambahkan sebanyak nol (elemen padding) karena ada elemen dalam input dan kemudian membentuk kembali menjadi persegi, menjatuhkan setiap nol kelebihan untuk persyaratan dalam proses.
sumber
R, 91 byte
Secara default, R bantalan matriks oleh elemen daur ulang vektor input dan mengkodekan matriks dalam urutan kolom-utama. Akan mengembalikan
0x0
matriks untuk inputdouble(0)
(array ganda kosong) atau''
.Baris pertama (
if
pernyataan) membagi string menjadi vektor karakter penyusunnya; jika saya dapat mengambil vektor itu sebagai gantinya, garis itu dapat dihapus.Cobalah online!
sumber
Bash ,
91776967 byteCobalah online!
Memformat teks, bantalan dengan spasi. Output tidak ada yang stdout pada input kosong.
Pembaruan : mencuri beberapa trik dari jawaban di sini .
sumber
Haskell, 87 byte
Cobalah online!
Elemen isi adalah
error[]
, nilai terpendek yang dari jenis apa pun (undefined
sedikit lebih lama).Catatan pada tautan TIO:
Anda tidak dapat mencetak
error
, jadi saya menggabungkan matriks dengan elemen isi kembali ke daftar dan mencetak panjangnyaTIO tidak punya
Data.Lists
, hanya sajaData.List.Split
itu menunjukkan 5 byte lebih.Cara kerjanya: hitung panjang
c
matriks c-by-c. Ambilc
elemen pertama dari daftar potongan panjangc
dari daftar input diikuti oleh daftar elemen pengisian yang memiliki panjang yang sama dengan daftar input. Misalnya:sumber
Dyalog APL,
2019 byte-1 Byte berkat @ Adám!
Cobalah online!
sumber
{(,⍨⍴⍵↑⍨×⍨)⌈.5*⍨≢⍵}