Jangan Anda benci ketika Anda ingin menyalin-menempelkan daftar angka (vektor, array ...), dari satu program ke program lain, tetapi format nomor yang Anda gunakan tidak cocok dengan format yang Anda perlukan. ?
Misalnya, dalam MATLAB Anda mungkin memiliki daftar yang dipisahkan oleh ruang seperti ini:
[1 2 3 4 5] (you can also have it comma separated, but that's not the point)
Dengan Python, Anda harus memasukkan koma untuk membuat daftar itu menjadi input yang valid, jadi Anda harus mengubahnya
[1, 2, 3, 4, 5]
untuk membuatnya bekerja. Di C ++ Anda mungkin menginginkan sesuatu seperti:
{16,2,77,29}
dan seterusnya.
Untuk menyederhanakan kehidupan semua orang, mari kita buat konverter daftar, yang mengambil daftar pada format apa pun *, dan menampilkan daftar pada format lain yang ditentukan.
Kurung yang valid adalah:
[list]
{list}
(list)
<list>
list (no surrounding brackets)
Pembatas yang valid adalah:
a,b,c
a;b;c
a b c
a, b, c <-- Several spaces. Must only be supported as input.
a; b; c <-- Several spaces. Must only be supported as input.
a b c <-- Several spaces. Must only be supported as input.
Catatan, input dapat memiliki sejumlah spasi di antara angka-angka, tetapi output dapat memilih untuk memiliki spasi nol (jika ,
atau ;
digunakan sebagai pembatas), atau ruang tunggal (jika dibatasi-ruang).
Selain daftar input, akan ada string (atau dua karakter) yang menentukan format output. Format string pertama akan menjadi tipe pembukaan braket (hanya), [
, (
, <
, {
atau (yang terakhir adalah satu ruang yang digunakan ketika tidak ada braket sekitarnya). Jenis braket akan diikuti oleh jenis pembatas
,
,, ;
atau (yang terakhir adalah spasi tunggal). Dua karakter format input harus diambil sebagai argumen tunggal (string atau dua karakter berturut-turut) dalam urutan yang dijelaskan di atas.
Beberapa contoh format string:
[, <-- Output format: [a,b,c]
{; <-- Output format: {a;b;c}
<-- Two spaces, output list has format: a b c
Aturan:
- Output tidak dapat memiliki spasi terdepan
- Outputnya dapat memiliki spasi tambahan dan baris baru
- Outputnya hanya berupa daftar angka, bukan
ans =
atau serupa
- Outputnya hanya berupa daftar angka, bukan
- Input akan berupa daftar bilangan bulat atau angka desimal (baik positif dan negatif (dan nol)), dan serangkaian dua karakter
- Jika input hanya terdiri dari bilangan bulat, daftar keluaran harus hanya memiliki bilangan bulat. Jika daftar input terdiri dari bilangan bulat dan angka desimal, semua angka output dapat berupa angka desimal. (Ini opsional untuk menjaga integer sebagai integer)
- Jumlah digit maksimum setelah titik desimal yang harus didukung adalah 3.
- Masukan akan berupa dua argumen. Yaitu jumlahnya dalam satu argumen, dan format string adalah satu argumen.
- Kode dapat berupa program atau fungsi
- Input dapat berupa argumen fungsi atau STDIN
Beberapa contoh:
1 2 3 4
[,
[1,2,3,4]
<1; 2; 3>
; <-- Space + semicolon
1;2;3
not valid: 1.000;2.000;3.000 (Input is only integers => Output must be integers)
{-1.3, 3.4, 4, 5.55555555}
[,
[-1.300,3.400,4.000,5.556] (5.555 is also valid. Rounding is optional)
also valid: [-1.3,3.4,4,5.55555555]
Kode terpendek dalam byte menang. Seperti biasa, pemenang akan dipilih satu minggu dari hari tantangan diposting. Jawaban yang diposting nanti masih bisa menang jika lebih pendek dari pemenang saat ini.
Papan peringkat
Cuplikan Stack di bagian bawah posting ini menghasilkan katalog dari jawaban a) sebagai daftar solusi terpendek per bahasa dan b) sebagai leaderboard keseluruhan.
Untuk memastikan bahwa jawaban Anda muncul, silakan mulai jawaban Anda dengan tajuk utama, menggunakan templat Penurunan harga berikut:
## Language Name, N bytes
di mana N
ukuran kiriman Anda. Jika Anda meningkatkan skor Anda, Anda bisa menyimpan skor lama di headline, dengan mencoretnya. Contohnya:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Jika Anda ingin memasukkan beberapa angka dalam tajuk Anda (mis. Karena skor Anda adalah jumlah dari dua file atau Anda ingin membuat daftar hukuman penterjemah secara terpisah), pastikan bahwa skor sebenarnya adalah angka terakhir di tajuk:
## Perl, 43 + 2 (-p flag) = 45 bytes
Anda juga dapat membuat nama bahasa menjadi tautan yang kemudian akan muncul di cuplikan:
## [><>](http://esolangs.org/wiki/Fish), 121 bytes
_
untuk menunjukkan elemen negatif. :(Jawaban:
CJam, 27 byte
Coba di sini.
Penjelasan
sumber
JavaScript (ES6), 75
82Sebagai fungsi anonim
Sunting: 2 byte disimpan thx @ user81655 (dan 5 lainnya baru saja memeriksanya)
Cuplikan tes
sumber
CJam,
3534 byteUji di sini.
Mengharapkan format di baris pertama dan daftar di baris kedua.
Penjelasan
sumber
Pyth, 33 byte
Cobalah online: Demonstrasi atau Test Suite
Penjelasan:
sumber
PowerShell,
1081009585 Bytes(lihat riwayat revisi untuk versi sebelumnya)
Golf 15 byte lagi dengan menghapus
$b
dan$s
variabel dan mengubah parens pada string bagian dalam.Ini mengambil input sebagai dua string dan menyimpannya ke dalam ,
$i
dan$z
kemudian kita membangun string output baru. Parens dalam-split
s$i
dengan regex untuk memilih hanya numerik digit, maka-join
s kembali bersama-sama dengan pembatas yang diminta. Kami menyimpulkan bahwa dengan karakter pertama dari input pembatas (misalnya,[
) dan menutupnya dengan pengindeksan ke dalam string berdasarkan nilai ASCII dari karakter pertama dan beberapa tipuan formulasi. Bagian luar.Trim()
menghilangkan ruang depan atau belakang.sumber
"]})>"["[{(< ".IndexOf($b[0])]
dengan sesuatu seperti' }) >]'[($b[0]-32)%6]
. The($b[0]-32)%6
memberi Anda0,2,4,5,1
untuk membuka karakter bracket, yang dapat Anda gunakan untuk indeks ke penutupan braket tali' }) >]'
. Mungkin ada "formula" yang lebih pendek, tetapi ini tampaknya cukup baik.()
berada tepat di sebelah satu sama lain, tetapi tanda kurung lainnya memiliki karakter di antara keduanya, jadi saya pergi dengan pengindeksan. Terima kasih!String.Replace()
alih-alih-replace
operator akan membelikan Anda 2 byte lagi (tidak perlu melarikan diri atau mendefinisikan kelas karakter dengan[]
).Replace('[]{}()<>;,',' ')
tidak akan menangkap karakter individu tetapi mencoba untuk mencocokkan keseluruhan simbol, yang tidak ada. Kita harus menggunakan Regex.Replace , yang melibatkan[regex]::
panggilan .NET dan bukannya akan memperpanjang kode.-ne''
bukan|?{$_}
.Python 2, 96 byte
Panggil sebagai:
Keluaran:
sumber
JavaScript (ES6),
829211692 byteFungsi anonim, jalankan seperti ini
Ini mungkin bisa bermain golf lebih jauh ..
Tidak disatukan
sumber
The input will be a list of integer or decimal numbers (both positive and negative (and zero)), and a string of two characters
. Memperbaikinya, terima kasihMathematica, 108 byte
Mathematica umumnya canggung dengan input string kecuali string dimaksudkan untuk ditafsirkan sebagai teks.
Penjelasan
StringCases[t,NumberString]
mengembalikan daftar string angka.Riffle
menyisipkan pemisah antara angka-angka./.Thread[c@"[ {<(" -> c@"] }>)"])
mengganti "braket" kiri dengan braket kanan.<>
adalah bentuk infiks dariStringJoin
. Ini menempel bersama substring.sumber
Matlab, 85 byte
Contoh penggunaan:
sumber
Julia, 95 byte
Ini adalah fungsi
f
yang menerima dua string dan mengembalikan string.Tidak Terkumpul:
sumber
Bash + GNU Utilities, 90
sumber