(重要な概念を支援してくれた以下の greg0ire に感謝します)
課題: すべての部分文字列を検索し、色属性で「タグ付け」するプログラムを作成します (XML で効果的に強調表示します)。
ルール:
- これは、長さが 2 以上の部分文字列に対してのみ行う必要があります。
- 部分文字列は、アルファベット以外の文字を含む可能性のある、連続した文字の単なる文字列です。スペースやその他の句読点は部分文字列を区切らないことに注意してください。
- 文字の大文字と小文字は無視できません。
- 「ハイライト」は、XML で部分文字列にタグを付けることによって行う必要があります。タグ付けは、その部分文字列と同一の部分文字列に固有の正の数
<TAG#>theSubstring</TAG#>
であるという形式にする必要があります。#
- アルゴリズムの優先度は、テキスト内で一致する回数ではなく、最も長い部分文字列を見つけることです。
注: 以下の例に示されているタグ付けの順序は重要ではありません。明確にするためにOPによって使用されています。
入力例:
LoremIpsumissimplydummytextoftheprintingandtypesettingindustry.LoremIpsumhasbeentheindustry'sstandarddummytexteversincethe1500s,whenanunknownprintertookagalleyoftypeandscrambledittomakeatypespecimenbook.
部分的に正しい出力 (この例では、OP が完全に置き換えられていない可能性があります)
<TAG1>LoremIpsum</TAG1>issimply<TAG2>dummytext</TAG2>of<TAG5>the</TAG5><TAG3>print</TAG3>ingand<TAG4>type</TAG4>setting<TAG6>industry</TAG6>.<TAG1>LoremIpsum</TAG1>hasbeen<TAG5>the</TAG5><TAG6>industry</TAG6>'sstandard<TAG2>dummytext</TAG2>eversince<TAG5>the</TAG5>1500s,whenanunknown<TAG3>print</TAG3>ertookagalleyof<TAG4>type</TAG4>andscrambledittomakea<TAG4>type</TAG4>specimenbook.
コードは、次のようなエッジ ケースを処理できる必要があります。
入力例 2:
hello!TAG!</hello.TAG.</
出力例 2:
<TAG1>hello</TAG1>!<TAG2>TAG</TAG2>!<TAG3></</TAG3><TAG1>hello</TAG1>.<TAG2>TAG</TAG2>.<TAG3></</TAG3>
勝者:
- 最もエレガントなソリューションが勝ちます (他のコメント、賛成票によって判断されます)
- シェルスクリプトを利用したソリューションのボーナスポイント/考慮事項
軽微な説明:
- 入力はハードコーディングするか、ファイルから読み取ることができます
- 基準は「エレガンス」のままで、確かに少しあいまいですが、単純な文字/行数もカプセル化しています。他の人によるコメントや賛成票も、SO コミュニティが課題をどのように見ているかを示しています