Dalam Elixir, daftar (ditautkan) berada dalam format di [head | tail]
mana head bisa berupa apa saja dan ekor adalah daftar dari sisa daftar, dan []
- daftar kosong - adalah satu-satunya pengecualian untuk ini.
Daftar juga dapat ditulis seperti [1, 2, 3]
yang setara dengan[1 | [2 | [3 | []]]]
Tugas Anda adalah mengonversi daftar seperti yang dijelaskan. Input akan selalu menjadi daftar yang valid (di Elixir) yang hanya berisi angka yang cocok dengan regex \[(\d+(, ?\d+)*)?\]
. Anda dapat mengambil input dengan (satu spasi setelah setiap koma) atau tanpa spasi. Output mungkin dengan (satu spasi sebelum dan sesudah masing-masing |
) atau tanpa spasi.
Untuk input dengan angka nol di depan, Anda dapat membuat output tanpa angka nol atau dengan.
Input harus diambil sebagai string (jika menulis fungsi), seperti halnya output.
Contohnya
[] -> []
[5] -> [5 | []]
[1, 7] -> [1 | [7 | []]]
[4, 4, 4] -> [4 | [4 | [4 | []]]]
[10, 333] -> [10 | [333 | []]]
terkait , bukan duplikat karena ini sebagian melibatkan penambahan mode ]
ke akhir. Selain itu, jawaban Haskell di sini sangat berbeda dengan yang ada di sana.
Jawaban:
Haskell, 50 byte
Cobalah online!
The
+0
memungkinkan Haskell jenis checker tahu bahwa kita berhadapan dengan daftar nomor, sehinggaread
akan mengurai input string untuk kita.sumber
Python 2 , 50 byte
Cobalah online!
sumber
JavaScript (ES6), 50 byte
Cobalah online!
Versi rekursif, 51 byte
Cobalah online!
sumber
Retina ,
39333220 byteDisimpan 13 byte berkat H.PWiz, ovs, ASCII-only, dan Neil.
Cobalah online!
Penjelasan
Jika kami tidak memiliki daftar kosong, tambahkan tanda koma.
Meskipun ada koma, bungkus dengan
|[ thing ]
.sumber
\b]
dengan,]
. (Kalau tidak, saya secara independen telah menemukan solusi yang sama.)\b
sesuatu karena suatu alasan> _> 20 byte @MnemonicPerl 5
-pl
,3128 byteCobalah online!
Bagaimana?
sumber
Elixir ,
11185 byteCobalah online!
Saya belum pernah menggunakan Elixir sebelumnya. Menentukan fungsi yang mengambil string dan referensi ke dirinya sendiri dan mengembalikan string.
sumber
Ceylon , 113 byte
Cobalah online!
Ini dia:
Cobalah online!
Seperti dicatat oleh ovs dalam komentar (sekarang dihapus): Jika seseorang memilih opsi "tanpa spasi" untuk input dan output yang ditunjukkan dalam pertanyaan, seseorang dapat menyimpan 3 byte lebih (yang jelas dengan spasi di dalamnya).
Jika kita tidak perlu mem-parsing input, tetapi hanya bisa mendapatkan urutan sebagai input, itu akan menjadi jauh lebih pendek (69 byte).
Cobalah online!
sumber
Python 3 , 65 byte
Cobalah online!
Jika inputnya bisa berupa daftar, maka:
Python 3 , 53 byte
Cobalah online!
sumber
SNOBOL4 (CSNOBOL4) , 114 byte
Cobalah online!
sumber
Stax , 19 byte
Jalankan dan debug itu
Posting Stax pertama saya, jadi mungkin tidak optimal.
Dibongkar dan dikomentari:
Jalankan dan debug yang ini
sumber
Sekam , 22 byte
Cobalah online!
sumber
Befunge-98 (PyFunge) ,
2221 byteCobalah online!
Jika tidak ada batasan aneh pada output, kita bisa melakukan ini dalam 18:
Fakta menyenangkan, ini secara teknis adalah program yang tidak melakukan apa pun dengan Python.
sumber
Ruby
-p
, 39 byteProgram lengkap:
Cobalah online!
Ruby ,
4845 byteFungsi rekursif:
Cobalah online!
sumber
R ,
847169 byteCobalah online!
sumber
\K
lookbehindProton , 57 byte
Cobalah online!
sumber
Jelly , 19 byte
Cobalah online!
Alternatif non-rekursif untuk solusi Erik .
sumber
Jelly , 18 byte
Cobalah online!
sumber
Jelly , 18 byte
Program lengkap mencetak hasilnya (sebagai tautan monadik, ia menerima daftar karakter tetapi mengembalikan daftar karakter dan bilangan bulat).
Cobalah online!
Bagaimana?
sumber
Java 10, 107 byte
Cobalah online.
Penjelasan:
sumber
Standar ML , 71 byte
Cobalah online! Menggunakan format tanpa spasi. Misalnya
it "[10,333,4]"
hasil"[10|[333|[4]|[]]]]"
.ungolfed
Cobalah online!
sumber
R ,
140136 byteTurun 4 byte sesuai saran suara Giuseppe.
Cobalah online!
sumber
substr
lebih pendek dan yang pertamapaste0
bisapaste
mendapatkan ini hingga 136 byte.eval
,,parse
dansub
bukannyaunlist
,strsplit
dansubstr
, saya juga hanya mengelola 136 byte (saya pikir mungkin lebih pendek tapi tidak)R , 108 byte
Cobalah online!
Butuh waktu hampir setahun untuk menemukan solusi R yang lebih baik dari sebelumnya ... seharusnya tahu
Reduce
jawabannya! Output tanpa spasi, input bisa dengan atau tanpa spasi.sumber
Python 2 , 63 byte
Cobalah online!
sumber
sed +
-E
, 46 bytePendekatan yang cukup mudah. Baris kedua mengambil
[\d+, ...]
dan mengubahnya ke[\d | [...]]
. Baris ketiga melompat kembali ke baris pertama, jika penggantian berhasil. Substitusi berulang sampai gagal dan kemudian program berakhir. Jalankan dengansed -E -f filename.sed
, melewati input melalui stdin.sumber
Merah , 110 byte
Cobalah online!
Penjelasan dari versi yang tidak diserami:
Merah sangat mudah dibaca, bahwa saya ragu saya perlu menambahkan komentar di atas :)
sumber
Perl 6 , 38 byte
Cobalah online!
sumber