Formatメソッドを反転します。
Format
Stringクラスのメソッド(またはのような同等のメソッドsprintf
)は、ほとんどの言語で使用できます。基本的には、いくつかの追加の書式設定を持つプレースホルダーと、それらのプレースホルダーの代わりに0個以上の値が挿入される「Format」文字列を取ります。
あなたの仕事は、選択した言語で逆関数を実装することです。
API
メソッド名のいずれかでなければなりませんformat1
かdeformat
。
入力:1番目のパラメーターは、元のformatメソッドと同様に、「Format」文字列になります。2番目のパラメーターは、解析された文字列になります(以下の例を参照)。他のパラメーターは不要であり、許可されていません。
出力:形式のプレースホルダーに対応して抽出された値の配列(または選択した言語に相当するもの)。
プレースホルダーです{0}
、{1}
、{2}
、など
不正な形式の場合、エラーをスローしたり、好きなものを返したりすることがあります。
無効な入力の場合、エラーをスローするか、好きなものを返します。無効な入力は、同じフォーマット文字列を使用してString.Formatで生成できないようなものです'{0}{0}', 'AAB'
。例:。
例
deformat('{0} {1}', 'hello world') => ['hello', 'world']
deformat('http{0}://', 'https://') => ['s']
deformat('http{0}://', 'http://') => [''] // array of one item which is an empty string
deformat('{0}{1}{0}', 'ABBA') => ['A', 'BB']
あいまいさ
あいまいな場合は、適切な回答を返すことができます。例えば:
deformat('{0} {1}', 'Edsger W. Dijkstra')
// both ['Edsger', 'W. Dijkstra'] and ['Edsger W.', 'Dijkstra'] are applicable.
いくつかのルール
- 簡単にするために、実際にフォーマットをサポートする必要はありません。先行ゼロ、小数点、または丸めの問題をすべて忘れることができます。値を文字列として生成するだけです。
- それを非自明にするために、正規表現は許可されていません。
- 入力中の中括弧に注意する必要はありません(つまり、2番目の入力パラメーターには
{
sまたは}
s は含まれません)。
勝ち
これはコードゴルフです!(「これはスパルタです!」と読む必要があります)最短の長さを持つ正しい関数が勝ちます。標準的な抜け穴は禁止されています。
['', 'AAAA']
、['A', 'AA']
、['AA', '']
deformat('{0}{1}{0}', 'ABBA') => ['', 'ABBA']
か?その場合、すべての文字列が少なくとも2回表示されない限り、安価なソリューションがあります。
deformat('{0}_{1}_{0}', 'A_BB_A')
か?
deformat('{0}{1}{0}', 'ABBA') => ['A', 'BB']
、代わりに与えられた場合はどうなりdeformat('{0}{1}{0}', 'AAAA')
ますか?