引用元: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) { ... }
のようなコードがあるが、これはまともに実行する方法がないし、中にあるコードも意味があるようにみえなかったので、ただのパディングか。