ヤマト運輸ロゴマークAAコードのメイキング

TODO:提出が公開されたらここにURLを貼る

上のような見た目のコードを書きました。この記事はそれのメイキングです。

1.Rubyコードを用意する

残念ながら今回はご用意することができませんでした……。

f:id:kotatsugame:20190826190052p:plain
死屍累々

仕方がないので、Rubyからbashを呼び出してC++コードをコンパイルすることにしました。

2.RubyコードをAA化するために調整する

下のスライドの12ページ目に書いてあるような理由で、空白・バックスラッシュを除いたコードをeval(%w()*"")で挟むことでその間に自由に空白や改行を入れることができるようになります。

Ruby を用いた超絶技巧プログラミング(夏のプログラミングシンポジウム 2012)

今回のコードでは先頭と末尾に十分な長さの連続したコードを書けるので、そこに付け加えたコードが壊れることはありませんでした。ここに空白や改行が入ると、その場所によってはうまく動きません。

空白とバックスラッシュを除くため、それぞれ#{32.chr}#{92.chr*2}に置き換えています。

ここで、出来上がったコードの文字数をカウントします。1208文字でした。

3.ロゴマークの縦横比を調整する

個人利用、と念じながらロゴマークの画像を拾ってきます。ペイントツールで縦横比をいじりながらAA化して(4番参照)、AtCoderのコードテストに貼り付けて、見え方を確認します。これを怠ると下のツイートのようになります(1敗)。

4.白黒のAAにする

まず一般の文字を使用したAAを作成するツールにぶん投げて下地を作ります。

tool-taro.com

こうなります:

f:id:kotatsugame:20190826185148p:plain
第一段階

次に、白っぽい文字を空白に、黒っぽい文字をシャープに置換します。末尾に生まれる空白は削除しておきます。

tr -c 'MNHg7#F@\n"' ' '|sed 's/[^ ]/#/g;s/ *$//'

f:id:kotatsugame:20190826185526p:plain
第二段階

ここで、シャープの文字数をカウントします。シャープの部分に用意したRubyコードを1文字ずつ埋め込んでいくので、上でカウントした1208文字とぴったり一致する必要があります(本当はコードを無意味に伸ばすことで調整は効きます)。

手直しするときに数十文字増えるので、それを見越していい感じの文字数になるようにツールで作るAAのサイズを調整します。載せた画像はそれぞれ調整した後のものです。

最後に手作業で整形します。できるだけ左右対称になるようにしました。1208文字ぴったりにすることもできました。

f:id:kotatsugame:20190826193605p:plain
第三段階

5.RubyコードをAA化する

プログラムを書いて楽をします。

s=%q(Rubyコード).chars
gets(p).chars{|c|$>.<<c==?# ? s.shift : c}

6.提出

完成!