今日は大晦日。2014 年もあと 1 日を残すのみとなりました。
年越しまで特にやることもないし、「年越しexpandafter」にもイマイチ興味が持てない(あるいは既にツイートを済ませた)、という暇な人は、次の問題をやってみれば如何でしょうか。
【スーパーNabeAzz問題】
以下の動作を行うマクロ
\SuperNabeAzz
を作れ。
\SuperNabeAzz{<整数n>}
は 1 から n までの整数の 10 進表記を順に空白区切りで出力する。ただし、整数の性質に応じて以下に示すように出力する数字に装飾を適用する。
- 整数が「3 の倍数である」または「(その 10 進表記に)数字 3 を含む」場合は、“アホなフォントで”出力する。すなわち、フォントを「Computer Modern Funny Italic」にし、サイズを
\Large
にする。
- 「Computer Modern Funny Italic」の NFSS での指定は“OT1/cmfr/m/it”であり、TFM 名は cmfi10 である。NFSS でこのシェープのサイズを変えるためには type1cm パッケージを読み込む必要がある。
- 整数が「5 の倍数である」場合は、文字の色を赤色にする。
- 整数が「素数である」場合は、文字を“大きく”する。すなわち、フォントサイズを
\Large
にする。((元のサイズが\Large
より大きい場合は“大きく”ならないがそれで構わない。))- 整数が「完全数である」場合は、文字を点滅させる。
- 整数が「グロタンディーク素数(※)である」場合は、文字を回転させる。
- もし整数が上記の複数の条件を満たす場合は、指定の全ての装飾を適用する。“アホなフォントで”と“大きく”が重なった場合はフォントサイズを
\huge
にする。- ただし整数が「9 の倍数である」場合は“正気に戻る”。すなわち、上記のどの装飾も適用しない。
※グロタンディーク素数: 簡単にいうと、57 のこと。詳しく言うと、「グロタンディークによって素数として参照された整数のうち、通常の素数の条件を満たさないもの」のことである。57 以外にグロタンディーク素数が存在するか否かは長い間未解決であったが、今年(2014年)の 11 月に至って「存在しない」という形で決着した。
細則:
- 整数 n は 1〜99999 の範囲にあると仮定してよい。ただし必ずしも 10 進数字で与えられるとは限らない。規定外の引数が与えられた場合の動作は規定しない。
- 数字を区切る空白の大きさは(伸縮を込めて)現在の欧文フォントの単語間空白 1 個分とする。
- 最初の数字の前および最後の数字の後には、空白や改行や改段落を入れない。
- フォーマットは LaTeX に限定する(無論 TeX の機能を使ってよい)。エンジン/DVI ウェアの種類は任意とする。
- 「shell escape(
\write18
)の使用」と「LuaTeX で Lua エンジンを呼び出す」のは禁止。その他のエンジンの拡張機能や LaTeX パッケージは全て使用可能。
\SuperNabeAzz
が実装できたとして、以下のような文書ソースをコンパイルする。
\documentclass[a4paper]{article} \makeatletter %%%%%%%%%%%%%%%%%%%%%%%%%% BEGIN TeX CODE %....\SuperNabeAzz の実装のコード \makeatother %%%%%%%%%%%%%%%%%%%%%%%%%% END TeX CODE \begin{document} \noindent\begin{minipage}{15em} $\rightarrow$\SuperNabeAzz{40}$\leftarrow$ \end{minipage} \par\smallskip \SuperNabeAzz{100} \end{document}
すると以下のような出力が得られるはずである。
* * *
*「えっ何これ……? 単に『グロタンディーク素数』って言ってみたかっただけのネタじゃん」
ZR「というわけで、皆さん、来年も当ブログをよろしくお願いします!」