У Vim ви можете повторити команду, передуючи їй числом, як 3dd, що еквівалентно dd dd dd. Ну, ця повторювана схема не обмежується лише командами Vim. Рядок може бути повторений і таким чином.
Специфікація:
З огляду на рядок, що складається лише з цифр, алфавітних символів (і великих, і малих), і пробілів, з додатковим додатковим рядком у якості введення, напишіть програму, яка виконує таку роботу:
Кожне "слово" складається з цифр та алфавітів. Якщо перед буквою передує цифра (число може бути більше однієї цифри, або число дорівнює нулю), повторіть цю літеру в заданий час. Наприклад:
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, оскільки я спочатку мав код, який працював у всіх тестових випадках, але не працював правильно для цього.