トラック
/
Tcl
Tcl
/
演習
/
マイクロブログ
マイクロブログ

マイクロブログ

初級

説明

ソーシャルメディア市場には、ごくごく短い投稿のための隙間があることに気づきました。 Twitterが280文字の投稿を許可するようになった今、手軽にソーシャルメディアを更新したい人のニーズは満たされていません。 そこで、自分だけのソーシャルメディアネットワークを作ることにします。

製品を際立たせるために、極端な仕様にして、5文字以下の投稿だけを許可します。 5文字を超える投稿は、5文字に切り詰めます。

ユーザーが自分を十分に表現できるように、絵文字やその他のUnicodeを許可します。

課題は、入力された文字列を5文字に切り詰めることです。

テキストエンコーディング

デジタルで保存されるテキストは、バイトの並びに変換する必要があります。 文字をバイトに対応付ける方法には、よく使われるものが3つあります。

  • ASCIIは英語の文字をエンコードできます。 すべての文字はちょうど1バイトです。
  • UTF-8はUnicodeのテキストエンコーディングです。 文字は1〜4バイトになります。
  • UTF-16はUnicodeのテキストエンコーディングです。 文字は2バイトか4バイトになります。

UTF-8とUTF-16はどちらもUnicodeのエンコーディングなので、次のような幅広い文字を表現できます。

  • 世界のほとんどの言語と文字体系のテキスト
  • 歴史的なテキスト
  • 絵文字

UTF-8とUTF-16はどちらも可変長エンコーディングで、文字によって必要な領域の大きさが異なります。

「a」という文字と「😛」という絵文字を考えてみましょう。 UTF-16では、この文字は2バイトですが、絵文字は4バイトです。

この演習のポイントは、Unicodeのコードユニットではなく、Unicodeの文字(コードポイント)を前提に設計されたAPIを使うことです。

Unicodeに関するTclの注意点

バージョン8.1では、Tclの文字列はUnicode文字をシームレスに扱うことができました。 当時、それはかなり画期的なことでした。 しかし、Unicode文字が次々と作られるにつれて、Tclがそれらを扱う能力は後れを取るようになりました。

Tclの内部実装は16ビットのUnicode文字しか扱えず、これは最初の65,526文字しかカバーしていません。 理由については、このTcl wikiページ、特に「AndroWish」言語に関する議論で説明されています。

Tcl 9.0は、Unicode文字セット全体を扱える最初のバージョンです。 そのため、この演習はTcl 9.0を使わないと(簡単には)解けません。

GitHubで編集する リンクは新しいウィンドウまたはタブで開きます
Tcl Exercism

マイクロブログを始める準備はできましたか?

Exercismに登録すれば、135個の演習、そして本物の人間によるメンタリングとともに、Tclを学んでマスターできます。すべて無料です。