Best Font Engine

最高のフォントエンジン

受賞者:Jeff Newbern

引用元:https://www.ioccc.org/2004/newbern.c

審査員・作者による説明:https://github.com/ioccc-src/winner/blob/main/2004/newbern.hint

動作

newbern.datのフォントをレンダリングする。

第1引数にフォントファイル、第2引数にレンダリングしたい文字列を指定する。

$ gcc -o newbern newbern.c

$ ./newbern newbern.dat "Hi!"
                   ##                                                  ###
                   ##                                                  ###
                   ##                                                  ###
                   #######################################################
                   #######################################################
                   #######################################################
                   #######################################################
                   #######################################################
                   ##                            ##                    ###
                   ##                            ##                    ###
                   ##                            ##                    ###
                                                 ##
                                                 ##
                                                 ##
                                                 ##
                                                 ##
                                                 ##
                                                 ##
                   ##                            ##                    ###
                   ##                            ##                    ###
                   #######################################################
                   #######################################################
                   #######################################################
                   #######################################################
                   #######################################################
                   #######################################################
                   ##                                                  ###
                   ##                                                  ###


                   ##                            ##
                   ##                            ##          ####
                   ################################        ########
                   ################################        ########
                   ################################        ########
                   ################################         ######
                   ################################          ####
                   ##

                     ####                              ############
                    ######                   #########################
                   ########      ########################################
                   ########      ########################################
                   ########            ################################
                     ####                              ############

newbern.datを作るための機能もある。 第1引数だけ指定すると、標準入力からフォントデータを作る。

$ ./newbern newbern.dat A | ./newbern A
A+++1
A+++1
A+++1
A+++9
A+++i.
A+++Qj
A+++1i2
A+++1+j,
A+++++[j
A++++++j.
A++++++.j,
A++++++.[j
A++++++.+j.
A++++++.+Kj,
A++++++.++[J
A++++++.++Kj.
A++++++.++jjj,
A++++++.+gjjj,
A++++++.Kjjj:
A++++++.ijjJ
A++++++jjjj
A++++++jjj:
A+++1+ijjj
A+++1[jjj2
A+++1jjjJ
A+++ijjj
A+++ijj:
A+++ijJ
A+++ij,
A+++i:
A+++i
A+++1
A+++1
A+++1

おまけとして、引数を与えないときはモールス信号符号化する。

$ echo SOS | ./newbern
# # #

### ### ###

# # #

解説

設定可能なバナー。

コード形状は”IOCCC”のバナー。ただしnewbern.datのフォントとは違う。

newbern.hintに作者コメントとして「さらなる暗号化が隠されている」とある。 第3引数に何かを指定すると、1文字表示するごとにフォントテーブルを1つずらす(ヴィジュネル暗号)。 次のように実行すると”AAA”ではなく”BCD”がバナーとして出てくる。

$ ./newbern newbern.dat AAA 1

さらに最後の方に、while(argc++ < 1) { ... }のようなコードがあるが、これはまともに実行する方法がないし、中にあるコードも意味があるようにみえなかったので、ただのパディングか。