マクロツイーター

はてダから移行した記事の表示が崩れてますが、そのうちに直せればいいのに(えっ)

TeX芸人実力判定問題

これが解けたら TeX 芸人二段相当!*1

plain TeX または LaTeX(ToL)で、以下の条件を満たすマクロ \length を実装せよ。
  • \length{<引数>} を完全展開すると引数のトークン列に含まれるトークン(制御綴も文字トークンも全て)の個数だけ *(カテゴリコード 12 の文字トークン)が並んだトークン列になる。
  • 引数のトークン列は、6 以外のあらゆるカテゴリコードの文字トークンを含みうる。*2
  • しかし、カテゴリコードが 1、2、10 である文字トークンの文字はそれぞれ 1 種類しかなく、順に {}、ASCII 空白(ASCII コード 32)であるとする。
  • また、カテゴリコード 1/2 の {} は対応が取れているものとする。

要するに、次のようになればよい。

\edef\result{\length{ \a {b\cd ef{g} }\h }}% トークン13個
\show\result %==>「*************」であればOK
\edef\result{\length{{ }{ {}} {}}}% トークン11個
\show\result %==>「***********」であればOK

↓補足。

*1:ただし例によって「二段」の定義も全く不明なので結局言った者勝ち。

*2:「文字トークンの」カテゴリコードとして可能なのは(6 以外に)1、2、3、4、7、8、10、11、12、13。