빔에서 숫자로 이전하여 명령을 반복 할 수 있습니다와 같은 3dd동일합니다 dd dd dd. 이 반복 패턴은 Vim 명령에만 국한되지 않습니다. 이런 식으로 문자열도 복제 할 수 있습니다.
사양:
숫자, 알파벳 문자 (대문자 및 소문자) 및 공백으로 구성되고 선택적으로 후행 줄 바꿈이 입력으로 제공되면 다음 작업을 수행하는 프로그램을 작성하십시오.
각 "단어"는 숫자와 알파벳으로 구성됩니다. 문자 앞에 숫자가 있으면 (숫자에 두 자리 이상의 숫자가 있거나 숫자가 0 인 경우) 주어진 시간 동안 해당 문자를 반복하십시오. 예를 들면 다음과 같습니다.
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)
입력 및 출력은 원하는 방식으로 수행 할 수 있습니다. 인수에서 입력을 받고 리턴 값을 통해 출력하는 함수도 허용됩니다.
프로그램 인 경우 오류로 종료되어서는 안됩니다 (예 : 리턴 값이 0 임).
숫자는 항상 10 진수이며 숫자 자체가 0이 아닌 경우 0으로 시작하지 않는 한 0으로 시작하지 않습니다. 즉 , 입력 으로 고려
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
이것은 code-golf 이므로 각 언어에서 가장 짧은 바이트 단위의 프로그램이 승리합니다!
a3 0xc b-> 와 같은 테스트를 a c c c b추가해야 한다고 생각 합니다.