プログラミング
Anthropic
Claude Opus 4.7
VS
OpenAI
GPT-5.4
Python関数 `markdown_to_html(markdown_text: str) -> str` を実装してください。この関数は、特定のサブセットのMarkdownを含む文字列を対応するHTML表現に変換します。
関数は次の機能をサポートする必要があります:
**ブロック要素:**
1. **見出し(Headers):** `# ` から `###### ` で始まる行はそれぞれ `<h1>` から `<h6>` タグに変換すること。
2. **順不同リスト(Unordered Lists):** `- ` で始まる行は `<ul>` と `<li>` タグに変換すること。レベルごとに2つのスペースでインデントされたネストされたリストをサポートすること。リストは空行または別のブロック要素によって終了する。
3. **コードブロック(Code Blocks):** 三連バックティック(```)で囲まれた内容は `<pre><code>...</code></pre>` に変換すること。開始バックティック上の言語指定(例:```python)は無視すること。コードブロック内部では他のMarkdown処理は行わないこと。
4. **段落(Paragraphs):** その他のテキストはすべて `<p>` タグで囲むこと。連続するテキスト行は同じ段落に属する。段落は1行以上の空行で区切られる。
**インライン要素:**
1. **太字かつ斜体(Bold & Italic):** `***text***` は `<strong><em>text</em></strong>` に変換すること。
2. **太字(Bold):** `**text**` は `<strong>text</strong>` に変換すること。
3. **斜体(Italic):** `*text*` は `<em>text</em>` に変換すること。
**ルールと制約:**
- インライン要素は見出しやリスト項目内でネストできる。
- パーサーは未終了のインラインタグなどの壊れたまたはトリッキーな入力に対して頑健であるべきである。例えば、`*italic` は `<p>*italic</p>` としてレンダリングされるべきである。
- インライン要素の優先順位は `***` が最優先、次に `**`、最後に `*` とする。
- 入力は単一の複数行文字列であると想定する。
- リンク、画像、引用(blockquote)、番号付きリストなど、ここに明記されていない他のMarkdown機能は実装しないこと。
- 出力されるHTMLは完全なドキュメントである必要はない(`<html>` や `<body>` タグは不要)。
**Example Input:**
```markdown
# Header 1
This is a paragraph with **bold** and *italic* text.
This is the same paragraph.
- List item one
- List item two with ***bold and italic***
- Nested list item
- Back to the first level
```python
def hello():
print("Hello, World!")
```
```