Python'un turşu modülü serileştirme için kullanılır, bir kişinin bir nesneyi daha sonra yeniden oluşturulacak şekilde dökmesine izin verir. Bunun için turşu basit bir yığın tabanlı dil kullanır.
İşleri basitleştirmek için, bu dilin küçük bir alt kümesiyle ilgileneceğiz:
( 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
Göreviniz dilin bu alt kümesini uygulamaktır. \n
Burada gerçek bir yeni satır olduğunu ve yeni satırların aslında dil için önemli olduğunu unutmayın.
Dil-benzeri CJam GolfScript veya aşina, olanlar için (
ve l/t
aynı şekilde Hotel işletmek [
ve ]
sırasıyla.
Giriş
İşleri basit tutmak için girdi her zaman geçerli olacaktır. Özellikle, girdi hakkında aşağıdakileri varsayabilirsiniz:
- Dizeler yalnızca küçük harfler ve boşluklardan oluşacak
[a-z ]
ve her zaman tek tırnak kullanacaktır. - Tüm talimatlar yukarıda belirtildiği gibi yabancı karakterler olmayacaktır. Örneğin, bu, yeni satırların yalnızca dizelerden sonra gerçekleşeceği anlamına gelir.
- Her
l/t
birinin(
önünde bir eşleşme vardır ve her(
birinin önünde bir eşleşme vardırl/t
. Ayrıca en az bir tane olacak(
. - Tam olarak bir tane
.
olacak ve her zaman son karakter olacak.
Komut satırı, STDIN veya işlev bağımsız değişkeni ile girdi alabilirsiniz. İsterseniz çok satırlı bir dize yerine tek satırdan kaçan bir dize kullanabilirsiniz, ancak lütfen cevabınızda bunu belirtin.
Çıktı
Çıktı, son nesnenin bir temsili olmalı, STDOUT'a basılmalı veya dize olarak döndürülmelidir . özellikle:
Dizeler, aralarında içerik bulunan tek tırnakların açılması ve kapatılması ile temsil edilir, örn
S'abc' -> 'abc'
. Python'da izin verilse bile, bu meydan okuma için çift tırnak işareti kullanamazsınız.Listeler çevrili virgülle ayrılmış unsurları ile temsil edilmektedir
[]
(örneğin,['a','b','c']
küpe çevrili virgülle ayrılmış elemanlarla repsented ise),()
(örneğin('a','b','c')
).- Alanlar önemli değil, örneğin
('a', 'b', 'c' )
. - Kapatma dirseğinden önce virgül kullanamazsınız. Çoğu dil için işleri kolaylaştırmak ve aynı zamanda Python'da liste / tuple oluşturmayı ve ardından tek öğeli demetin nasıl temsil edildiğini (örneğin bunun için) zorlaştırmak için bunun Python sözdizimi kurallarından bilerek farklı olduğunu unutmayın. meydan okuma,
('a')
aksine ihtiyacımız var('a',)
).
Örnekler
Yukarıdaki metin göz korkutucu görünebilir, ancak aşağıdaki örnekler işleri biraz daha açık hale getirmelidir.
(l.
Olası çıktı: []
(t.
Olası çıktı: ()
(S'hello world'
l.
Olası çıktı: ['hello world']
(S'string one'
S'string two'
S'string three'
t.
Olası çıktı: ('string one', 'string two', 'string three')
(S'a'
(S'b'
S'c'
lt.
Olası çıktı: ('a',['b','c'])
((S'a'
S'b'
(lS'c'
t(S'd'
tl.
Olası çıktı: [('a', 'b', [], 'c'), ('d')]
((S'a'
((S'b'
t(S'c'
lS'd'
(((ltlS'e'
S'f'
lS'g'
tl.
Olası çıktı: [('a',[('b'),['c'],'d',[([])],'e','f'],'g')]
kurallar
- Bu kod golf , bu yüzden en az bayt kod kazanır.
- Python turşularıyla çalışmak üzere tasarlanmış hiçbir işleve izin verilmez.
Güvenlik notu: Gerçek kodda, yalnızca güvendiğiniz kaynaklardan seçim yapın, yoksa kötü bir cos\nsystem\n(S'rm -rf'\ntR.
sürpriz yaşayabilirsiniz
S'abc'\n
itmekabc
veya'abc'
?