โมดูลดองเกิลของไพ ธ อนใช้สำหรับการทำให้เป็นอนุกรมทำให้สามารถทิ้งวัตถุในลักษณะที่สามารถสร้างขึ้นใหม่ได้ในภายหลัง สำหรับสิ่งนี้ pickle ใช้ภาษาสแต็กพื้นฐานอย่างง่าย
เพื่อให้เข้าใจง่ายเราจะติดต่อกับชุดย่อยของภาษานี้:
( 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
งานของคุณคือการใช้ภาษาชุดย่อยนี้ โปรดทราบว่า\n
นี่คือการขึ้นบรรทัดใหม่ตามตัวอักษรและการขึ้นบรรทัดใหม่มีความสำคัญต่อภาษา
สำหรับผู้ที่คุ้นเคยกับภาษา GolfScript หรือ CJam (
และl/t
ดำเนินการในลักษณะเดียวกัน[
และ]
ตามลำดับ
อินพุต
เพื่อให้สิ่งต่าง ๆ ง่ายอินพุตจะถูกต้องเสมอ โดยเฉพาะอย่างยิ่งคุณอาจสมมติสิ่งต่อไปนี้เกี่ยวกับอินพุต:
- สตริงจะประกอบด้วยตัวอักษรและช่องว่างเล็ก ๆ
[a-z ]
เท่านั้นและจะใช้เครื่องหมายคำพูดเดี่ยวเสมอ - จะไม่มีตัวอักษรที่ไม่เกี่ยวข้องกับคำสั่งทั้งหมดตามที่ระบุไว้ข้างต้น ตัวอย่างเช่นนี่หมายความว่าการขึ้นบรรทัดใหม่จะเกิดขึ้นหลังจากสตริงเท่านั้น
- ทุกคน
l/t
มีการจับคู่(
ก่อนหน้าและทุกคน(
มีการจับคู่l/t
หลังจากนั้น(
นอกจากนี้ยังจะเป็นที่หนึ่งอย่างน้อย - จะมีหนึ่งอย่างแน่นอน
.
และมันจะเป็นตัวละครสุดท้ายเสมอ
คุณสามารถรับอินพุตผ่านบรรทัดคำสั่ง STDIN หรืออาร์กิวเมนต์ของฟังก์ชัน คุณอาจใช้สตริงที่ขึ้นบรรทัดใหม่ที่มีการยกเว้นแทนที่จะเป็นสตริงหลายบรรทัดหากคุณต้องการ แต่โปรดระบุสิ่งนี้ในคำตอบของคุณ
เอาท์พุต
เอาท์พุทควรจะเป็นตัวแทนของวัตถุสุดท้ายพิมพ์ไป STDOUT หรือกลับเป็นสตริง โดยเฉพาะ:
S'abc' -> 'abc'
สตริงโดยมีตัวแทนเปิดและปิดราคาเดียวที่มีเนื้อหาในระหว่างเช่น คุณไม่สามารถใช้เครื่องหมายคำพูดคู่สำหรับความท้าทายนี้ได้แม้ว่าจะได้รับอนุญาตใน Python ก็ตามรายการจะถูกแสดงด้วยองค์ประกอบที่คั่นด้วยเครื่องหมายจุลภาคล้อมรอบด้วย
[]
(เช่น['a','b','c']
) ในขณะที่ tuples จะถูก repsented โดยองค์ประกอบที่คั่นด้วยเครื่องหมายจุลภาคล้อมรอบด้วย()
(เช่น('a','b','c')
)- ช่องว่างไม่สำคัญเช่น
('a', 'b', 'c' )
ไม่เป็นไร - คุณไม่สามารถใช้เครื่องหมายจุลภาคก่อนวงเล็บปิด โปรดทราบว่านี่คือเจตนาที่แตกต่างจากกฎไวยากรณ์ของ Python เพื่อให้ง่ายขึ้นสำหรับภาษาส่วนใหญ่และเพื่อให้ยากขึ้นในการสร้างรายการ / tuple ใน Python จากนั้นให้เอาท์พุทเนื่องจากวิธีการแสดง tuple องค์ประกอบเดียว (สำหรับสิ่งนี้ ความท้าทายที่เราต้องการ
('a')
ตรงข้ามกับ('a',)
)
ตัวอย่าง
ข้อความด้านบนอาจดูน่ากลัว แต่ตัวอย่างต่อไปนี้ควรทำให้สิ่งต่าง ๆ ชัดเจนขึ้น
(l.
เอาต์พุตที่เป็นไปได้: []
(t.
เอาต์พุตที่เป็นไปได้: ()
(S'hello world'
l.
เอาต์พุตที่เป็นไปได้: ['hello world']
(S'string one'
S'string two'
S'string three'
t.
เอาต์พุตที่เป็นไปได้: ('string one', 'string two', 'string three')
(S'a'
(S'b'
S'c'
lt.
เอาต์พุตที่เป็นไปได้: ('a',['b','c'])
((S'a'
S'b'
(lS'c'
t(S'd'
tl.
เอาต์พุตที่เป็นไปได้: [('a', 'b', [], 'c'), ('d')]
((S'a'
((S'b'
t(S'c'
lS'd'
(((ltlS'e'
S'f'
lS'g'
tl.
เอาต์พุตที่เป็นไปได้: [('a',[('b'),['c'],'d',[([])],'e','f'],'g')]
กฎระเบียบ
- นี่คือโค้ดกอล์ฟดังนั้นโค้ดในจำนวนไบต์น้อยที่สุดจะเป็นผู้ชนะ
- ไม่อนุญาตให้ใช้ฟังก์ชันใด ๆ ที่ออกแบบมาเพื่อทำงานกับ Python
หมายเหตุด้านความปลอดภัย: ในรหัสจริงปลดเฉพาะแหล่งที่มาที่คุณเชื่อถือหรืออื่น ๆ ที่คุณอาจได้รับความcos\nsystem\n(S'rm -rf'\ntR.
ประหลาดใจที่น่ารังเกียจ
S'abc'\n
ผลักดันabc
หรือ'abc'
?