このStackOverflowの質問に触発されました。
入力:
3つの入力を使用します。
D
分割する区切り文字- 文字
I
両者の間には、その我々は(その音は漠然と、私は知っているが、私は以下のことを説明します)区切り文字を無視します - 文字列
S
出力:
分割後の部分文字列を含むリスト/配列。
例:
Input:
D = ','
I = '"'
S = '11020199,"Abc ",aduz,,444,bieb,dc,2 ,2222.00,whatever 5dc,222.22,22.00,"98,00","12,000,000",21-09-2018, 06:00,",-,"'
Output:
['11020199', 'Abc ', 'aduz', '', '444', 'bieb', 'dc', '2 ', '2222.00', 'whatever 5dc', '222.22', '22.00', '98,00', '12,000,000', '21-09-2018', ' 06:00', ',-,']
どうして?カンマで分割も通常分割う98,00
、12,000,000
と,-,
2/3枚インチ しかし、それらはI
入力文字内にあるため、ここでの分割は無視します。
チャレンジルール:
I
input-string には常に偶数の文字があると想定できます。- 文字
I
は常にD
適切に分割できる(入力の最初または最後の文字である場合を除き)常に隣にあると想定できます。ですから、あなたはD = ','; I = '"'; S = 'a,b"c,d"e,f'
このようなものもこのようなものも持っていませんD=','; I='"'; S='a",b,"c'
。 - input-stringに
S
は、D
またはのいずれも含めることはできませんI
。noが含まれている場合D
、入力文字列全体を唯一の項目として含むリストを出力します。 - 出力リストには、文字が含まれていなくても、文字は含ま
I
れませんD
(上記の例のように"Abc "
なり'Abc '
ます)。 - 内の部分文字列
I
がのみを含む可能性がありますD
。たとえば、次のD = ','; I = '"'; S = 'a,",",b,"c","d,e,,",f'
ようになり['a', ',', 'b', 'c', 'd,e,,', 'f']
ます。 - が
D
の開始または終了にならないことを前提とすることができS
ます。そのため、末尾の空の項目を処理する必要はありません。 - 入力に2つの隣接する
D
要素がある場合、空のアイテムが作成されます。すなわちD = ','; I = '"'; S = 'a,"b,c",d,,e,"",f'
、結果になり['a', 'b,c', 'd', '', 'e', '', 'f']
ます。 - 入力と出力には、範囲内の印刷可能なASCIIのみが含まれると想定できます
[32, 126]
(したがって、タブと改行は除外されます)。 - また、リスト/配列を返す/出力する代わりに、改行で区切られたすべてのアイテムを出力することもできます(特にリスト/配列を持たない言語、つまりRetina)。
- バイトを節約する場合は、リストを逆順で出力できます。ただし、ソートまたは「シャッフル」順序で出力することはできません。だから、
D = ','; I = 'n'; S = 'a,2,b,3,c'
として出力することができる[a,2,b,3,c]
か[c,3,b,2,a]
、ではないとして、[2,3,a,b,c,]
または[a,3,b,c,2]
例えば。
一般的なルール:
- これはcode-golfであるため、バイト単位の最短回答が優先されます。
コードゴルフ言語では、非コードゴルフ言語で回答を投稿することを妨げないでください。「任意の」プログラミング言語の可能な限り短い答えを考えてみてください。 - 回答には標準的な規則が適用されるため、STDIN / STDOUT、適切なパラメーターと戻り値型、完全なプログラムを持つ関数/メソッドを使用できます。あなたの電話。
- デフォルトの抜け穴は禁止されています。
- 可能であれば、コードのテストへのリンク(TIOなど)を追加してください。
- また、回答の説明を追加することを強くお勧めします。
テストケース:
Input:
D = ','; I = '"'; S = 'a,"b,c",d,,e,"",f'
Output:
['a', 'b,c', 'd', '', 'e', '', 'f']
Input:
D = ','; I = '"'; S = '11020199,"Abc ",aduz,,444,bieb,dc,2 ,2222.00,whatever 5dc,222.22,22.00,"98,00","12,000,000",21-09-2018, 06:00,",-,"'
Output:
['11020199', 'Abc ', 'aduz', '', '444', 'bieb', 'dc', '2 ', '2222.00', 'whatever 5dc', '222.22', '22.00', '98,00', '12,000,000', '21-09-2018', ' 06:00', ',-,']
Input:
D = ' '; I = ','; S = 'this is a test , to see if you understand it, or not , hmmm, I think I have too many commas , or not , perhaps..'
Output:
['this', 'is', 'a', 'test', ' to see if you understand it', 'or', 'not', ' hmmm', 'I', 'think', 'I', 'have', 'too', 'many', 'commas', ' or not ', 'perhaps..']
Input:
D = 'x'; I = 'y'; S = 'contains no lowercase X nor Y'
Output:
['contains no lowercase X nor Y']
Input:
D = '1'; I = '3'; S = '3589841973169139975105820974944592078316406286208948254211370679314'
Output: ['58984197', '69', '9975105820974944592078', '64062862089482542', '', '70679', '4']
Input:
D = ' '; I = 'S'; S = 'regular split on spaces'
Output:
['regular', 'split', 'on', 'spaces']
D = ','; I = '"'; S = ',"a,b",c,,d,""'
気付いたばかりなので、ほとんどすべての答えも失敗します。チャレンジを少し変更して、開始時または終了時に空のアイテムが使用できないようにします。過去のJavaと05AB1Eの両方の経験に基づいて、言語がデフォルトで正しく処理しない場合に、分割後の空の項目が手動で修正されるとどれだけイライラするかを知っています。このようなテストケースは引き続きサポートされる必要があります。D = ','; I = '"'; S = 'a,"b,c",d,,e
→ ['a', 'b,c', 'd', '', 'e']
間に空の項目があります。
'1,"2,3"' -> ['2,3','1']
[a,b,c]
と[c,b,a]
しかし、出力許可されている[a,c,b]
か[b,a,c]
いない例えば。
D=','; I='"'; S='a",b,"c'
ですか、それとも有効な入力ですか?
"", "'ll remove all ", ""
)