Vimのでは、あなたが番号を前置することにより、コマンドを繰り返すことができ、同様3dd
に相当しますdd dd dd
。さて、この繰り返しパターンはVimコマンドに限定されません。文字列もこの方法で複製できます。
仕様:
入力として、数字、アルファベット文字(大文字と小文字の両方)、およびスペースのみで構成される文字列を指定し、オプションで末尾の改行を使用して、次のジョブを実行するプログラムを作成します。
各「単語」は数字とアルファベットで構成されます。文字の前に数字が付いている場合(数字に複数の数字があるか、数字がゼロの場合)、その文字を指定された回数だけ繰り返します。例えば:
a2bc -> abbc 3xx1yz -> xxxxyz 10ab0c0d0e -> aaaaaaaaaab # No 'cde' because there's a zero 2A2a2A2a -> AAaaAAaa
単語はスペースで区切られます。隣接する2つの単語ごとに最大1つのスペースがあります。
簡単ですね。追加のものは次のとおりです。
スペースの前に数字がある場合は、指定された時間だけ次の単語を繰り返します。番号は常に前の単語の末尾、または文字列の先頭に添付されます。例:
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'
つまり、プログラムで2つのスペースを一緒に出力しないでください。
入力が空になることはありませんが、出力が空でない必要はありません。
0 3x -> (empty)
入力および出力は、任意の方法で取得できます。引数から入力を受け取り、戻り値を介して出力を与える関数も受け入れられます。
プログラムの場合、エラーで終了してはなりません(つまり、戻り値はゼロです)。
数値は常に10進数であり、数値自体がゼロでない限りゼロで始まることはありません。その場合、ゼロは1つだけです。すなわち、あなたは考慮する必要はありません
077a
つまり000a
、入力として、入力。すべての数値は2 ^ 31(2,147,483,648)未満です。最大出力長は2 ^ 32(4,294,967,296)バイト未満です。
プログラムは、オプションで1つの末尾スペースおよび/または1つの末尾改行を出力できます。これらのスペースと改行は、出力の有効性に影響しません。正しい出力が空であっても、スペースに続いて改行が出力されると、修飾されます。
つまり、有効な入力は次の正規表現に一致します。
([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
追加する必要があると思います。元々、上記のすべてのテストケースで機能するコードがありましたが、それでは正しく機能しませんでした。