Modul acar Python digunakan untuk serialisasi, yang memungkinkan seseorang untuk membuang objek sedemikian rupa sehingga dapat kemudian direkonstruksi. Untuk ini, acar menggunakan bahasa berbasis stack sederhana.
Untuk mempermudah, kami akan menangani sebagian kecil dari bahasa ini:
( Push a mark to the stack
S'abc'\n Push a string to the stack (here with contents 'abc')
l Pop everything up to the last mark, wrapping all but the mark in a list
t Pop everything up to the last mark, wrapping all but the mark in a tuple
. Terminate the virtual machine
Tugas Anda adalah mengimplementasikan subset bahasa ini. Perhatikan bahwa \n
ini adalah baris baru literal di sini, dan baris baru sebenarnya penting untuk bahasa tersebut.
Bagi mereka yang terbiasa dengan GolfScript atau bahasa seperti CJam, (
dan l/t
beroperasi mirip dengan masing [
- ]
masing.
Memasukkan
Agar semuanya sederhana, input akan selalu valid. Secara khusus, Anda dapat mengasumsikan berikut tentang input:
- String hanya akan terdiri dari huruf kecil dan spasi
[a-z ]
, dan akan selalu menggunakan tanda kutip tunggal. - Tidak akan ada karakter asing, dengan semua instruksi seperti yang ditentukan di atas. Misalnya, ini berarti bahwa baris baru hanya akan pernah muncul setelah string.
- Setiap orang
l/t
memiliki pencocokan(
sebelum dan setiap(
pencocokanl/t
setelahnya. Setidaknya akan ada satu(
. - Akan ada persis satu
.
, dan itu akan selalu menjadi karakter terakhir.
Anda dapat mengambil input melalui baris perintah, STDIN atau argumen fungsi. Anda dapat menggunakan string yang diloloskan baris baru alih-alih string multiline jika diinginkan, tetapi harap tentukan ini dalam jawaban Anda.
Keluaran
Output harus berupa representasi dari objek akhir, dicetak ke STDOUT atau dikembalikan sebagai string . Secara khusus:
String direpresentasikan dengan membuka dan menutup tanda kutip tunggal dengan konten di antaranya, mis
S'abc' -> 'abc'
. Anda tidak boleh menggunakan tanda kutip ganda untuk tantangan ini, meskipun mereka diizinkan dalam Python.Daftar diwakili oleh elemen yang dipisahkan koma yang dikelilingi oleh
[]
(misalnya['a','b','c']
), sedangkan tupel diwakili oleh elemen yang dipisahkan koma yang dikelilingi oleh()
(misalnya('a','b','c')
).- Spasi tidak penting, mis
('a', 'b', 'c' )
. Tidak apa-apa. - Anda tidak dapat memiliki koma sebelum braket penutup. Perhatikan bahwa ini sengaja berbeda dari aturan sintaksis Python untuk membuat segalanya lebih mudah bagi sebagian besar bahasa, dan juga untuk membuatnya lebih sulit untuk hanya membangun daftar / tuple dengan Python kemudian mengeluarkannya, karena bagaimana tupel elemen tunggal direpresentasikan (untuk ini tantangan, kita perlu
('a')
sebagai lawan('a',)
).
Contohnya
Teks di atas mungkin tampak menakutkan, tetapi contoh-contoh berikut seharusnya membuat segalanya lebih jelas.
(l.
Output yang mungkin: []
(t.
Output yang mungkin: ()
(S'hello world'
l.
Output yang mungkin: ['hello world']
(S'string one'
S'string two'
S'string three'
t.
Output yang mungkin: ('string one', 'string two', 'string three')
(S'a'
(S'b'
S'c'
lt.
Output yang mungkin: ('a',['b','c'])
((S'a'
S'b'
(lS'c'
t(S'd'
tl.
Output yang mungkin: [('a', 'b', [], 'c'), ('d')]
((S'a'
((S'b'
t(S'c'
lS'd'
(((ltlS'e'
S'f'
lS'g'
tl.
Output yang mungkin: [('a',[('b'),['c'],'d',[([])],'e','f'],'g')]
Aturan
- Ini adalah kode-golf , jadi kode dalam byte paling sedikit menang.
- Fungsionalitas apa pun yang dirancang untuk bekerja dengan acar Python tidak diizinkan.
Catatan keamanan: Dalam kode sungguhan, hanya lepaskan dari sumber yang Anda percayai, atau Anda akan mendapat cos\nsystem\n(S'rm -rf'\ntR.
kejutan yang tidak menyenangkan
S'abc'\n
mendorongabc
atau'abc'
?