ในกลุ่มคุณสามารถทำซ้ำคำสั่งโดยก่อนหน้านั้นมีจำนวนเช่นเทียบเท่ากับ3dd dd dd ddรูปแบบการทำซ้ำนี้ไม่ได้ จำกัด อยู่ที่คำสั่ง Vim สตริงสามารถทำซ้ำในลักษณะนี้ได้เช่นกัน
รายละเอียด:
รับสตริงซึ่งประกอบด้วยตัวเลขเท่านั้นตัวอักษรตัวอักษร (ทั้งตัวใหญ่และตัวพิมพ์เล็ก) และช่องว่างที่มีบรรทัดใหม่ต่อท้ายเป็นตัวเลือกเป็นอินพุตเขียนโปรแกรมที่ทำงานดังต่อไปนี้:
"word" แต่ละคำประกอบด้วยตัวเลขและตัวอักษร หากตัวอักษรนำหน้าด้วยตัวเลข (อาจมีมากกว่าหนึ่งหลักในตัวเลขหรือตัวเลขเป็นศูนย์) ให้ทำซ้ำตัวอักษรนั้นตามเวลาที่กำหนด ตัวอย่างเช่น:
a2bc -> abbc 3xx1yz -> xxxxyz 10ab0c0d0e -> aaaaaaaaaab # No 'cde' because there's a zero 2A2a2A2a -> AAaaAAaaคำถูกคั่นด้วยช่องว่าง มีช่องว่างสูงสุดระหว่างคำสองคำที่อยู่ติดกันทุกช่อง
ง่ายใช่มั้ย นี่คือสิ่งเพิ่มเติม:
หากมีตัวเลขอยู่ข้างหน้าเว้นวรรคให้ทำซ้ำคำถัดไปตามเวลาที่กำหนด หมายเลขจะถูกแนบกับส่วนท้ายของคำก่อนหน้านี้เสมอหรือเมื่อเริ่มต้นของสตริง ตัวอย่าง:
a2bc3 2d -> abbc dd dd dd 3 3a -> aaa aaa aaa 33a -> aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 0 abcd0 efgh3 2x -> xx xx xx a3 0xc b -> a c c c bหากคำว่างเปล่าควรจะทำซ้ำอย่าส่งหลายช่องว่างในแถว สควอชพวกเขา:
a3 0x2 b -> a b b # NOT 'a b b'กล่าวอีกนัยหนึ่งโปรแกรมของคุณไม่ควรเว้นช่องว่างสองช่องด้วยกัน
อินพุตไม่เคยว่างเปล่า แต่ไม่จำเป็นว่าเอาต์พุตจะไม่ว่างเปล่า:
0 3x -> (empty)
อินพุตและเอาต์พุตสามารถทำได้ในรูปแบบที่ต้องการ ฟังก์ชั่นที่รับอินพุตจากอาร์กิวเมนต์และให้เอาต์พุตผ่านค่าส่งคืนเป็นที่ยอมรับเช่นกัน
หากเป็นโปรแกรมจะต้องไม่ออกโดยมีข้อผิดพลาด (เช่นค่าส่งคืนเป็นศูนย์)
ตัวเลขเป็นทศนิยมเสมอและไม่เคยเริ่มต้นด้วยศูนย์เว้นแต่ตัวเลขจะเป็นศูนย์ในกรณีนี้มีเพียงศูนย์เดียว คือคุณไม่จำเป็นต้องพิจารณา
077aหรือ000aให้เป็นอินพุตตัวเลขทั้งหมดต่ำกว่า 2 ^ 31 (2,147,483,648) ความยาวเอาต์พุตสูงสุดต่ำกว่า 2 ^ 32 (4,294,967,296) ไบต์
โปรแกรมอาจเลือกที่จะออกหนึ่งพื้นที่ต่อท้ายและ / หรือหนึ่งบรรทัดขึ้นบรรทัดใหม่ ช่องว่างและการขึ้นบรรทัดใหม่เหล่านั้นไม่มีผลต่อความถูกต้องของเอาต์พุต แม้ว่าเอาต์พุตที่ถูกต้องควรว่างเปล่า แต่เอาต์พุตของช่องว่างตามด้วยบรรทัดใหม่จะมีคุณสมบัติ
กล่าวสั้น ๆ อินพุตที่ถูกต้องตรงกับนิพจน์ทั่วไปนี้:
([0-9]+ )?([0-9A-Za-z]*[A-Za-z])([0-9]* [0-9A-Za-z]*[A-Za-z])*( ?\n?)
และสำหรับผลลัพธ์ที่ถูกต้อง:
([A-Za-z]+)( [A-Za-z]+)*( ?\n?)
กรณีทดสอบตัวอย่าง:
abcdefg -> abcdefg
a3bcd -> abbbcd
a3bbbc -> abbbbbc
3a0b -> aaa
abc 3d -> abc ddd
abc3 d -> abc d d d
5 1x5 1y0 z -> x x x x x y y y y y
a999 0x b -> a b
999 0s -> (empty)
0 999s -> (empty)
0 999s4 t -> t t t t
a3 0xc b -> a c c c b
ABC3 abc -> ABC abc abc abc
นี่คือรหัสกอล์ฟดังนั้นโปรแกรมที่สั้นที่สุดเป็นไบต์ในแต่ละภาษาจะชนะ!
a3 0xc b-> a c c c bเนื่องจากเดิมฉันมีรหัสที่ใช้กับกรณีทดสอบทั้งหมดข้างต้น แต่ไม่สามารถทำงานได้อย่างถูกต้อง