Level 8 とりあえず <area>
タグの coords
属性を描いてみました。Ruby と 苦労してインストールした cairo を使用。
require 'cairo'
nums = [179 ,284 ,214 ,311 ,255 ,320 ,281 ,226 ,319 ,224 ,363 ,309 ,339 ,222 ,371 ,225 ,411 ,229 ,404 ,242 ,415 ,252 ,428 ,233 ,428 ,214 ,394 ,207 ,383 ,205 ,390 ,195 ,423 ,192 ,439 ,193 ,442 ,209 ,440 ,215 ,450 ,221 ,457 ,226 ,469 ,202 ,475 ,187 ,494 ,188 ,494 ,169 ,498 ,147 ,491 ,121 ,477 ,136 ,481 ,96 ,471 ,94 ,458 ,98 ,444 ,91 ,420 ,87 ,405 ,92 ,391 ,88 ,376 ,82 ,350 ,79 ,330 ,82 ,314 ,85 ,305 ,90 ,299 ,96 ,290 ,103 ,276 ,110 ,262 ,114 ,225 ,123 ,212 ,125 ,185 ,133 ,138 ,144 ,118 ,160 ,97 ,168 ,87 ,176 ,110 ,180 ,145 ,176 ,153 ,176 ,150 ,182 ,137 ,190 ,126 ,194 ,121 ,198 ,126 ,203 ,151 ,205 ,160 ,195 ,168 ,217 ,169 ,234 ,170 ,260 ,174 ,282 ]
points = []
while nums.size > 0 do
points.push nums.slice!(0 , 2 )
end
def draw_points (points, width, height, filename )
format = Cairo : :FORMAT_ARGB32
surface = Cairo::ImageSurface .new(format, width, height)
context = Cairo::Context .new(surface)
context.set_source_rgb(1 , 1 , 1 )
context.rectangle(0 , 0 , width, height)
context.fill
context.set_source_rgb(0 , 0 , 0 )
context.move_to(points[0 ][0 ], points[0 ][1 ])
points.each do |p |
context.line_to p[0 ], p[1 ]
end
context.stroke
surface.write_to_png(filename)
end
draw_points(points, 640 , 480 , "fly.png" )
しかし、ただの蠅の輪郭です。リンク部分の形ですね。で、今度は un 文字列を座標に見立てて線を引いてみたりしたのですが・・・。
un = "BZh91AY&SYA\xaf\x82\r\x00\x00\x01\x01\x80\x02\xc0\x02\x00 \x00!\x9ah3M\x07<]\xc9\x14\xe1BA\x06\xbe\x084"
un_points = []
0 .step(un.size - 1 , 2 ) do |i |
un_points.push([un[i], un[i + 1 ]])
end
draw_points(points, 640 , 480 , "un.png" )
全然違うようです・・・。こりゃあかんということで、フォーラムにヒントを見に行くと、Python のモジュールを探せ、un と pw の形式をよく見ろとのこと。共通する「BZh91AY&S」でググってみたところ、bzip2 のヘッダ部分だとか。知らんがな。ということで、Python の bz2 モジュールで解凍して答えを得ました。
>>> import bz2
>>> un = "BZh91AY&SYA\xaf\x82\r\x00\x00\x01\x01\x80\x02\xc0\x02\x00 \x00!\x9ah3M\x07<]\xc9\x14\xe1BA\x06\xbe\x084"
>>> pw = "BZh91AY&SY\x94$|\x0e\x00\x00\x00\x81\x00\x03$ \x00!\x9ah3M\x13<]\xc9\x14\xe1BBP\x91\xf08"
>>> bz2.decompress(pw)
'file'
>>> bz2.decompress(un)
'huge'
Level 9 Level 7 でやってみたのは、こっちの解法だったようです。 ということで、以下。
require 'cairo'
first = [略]
second = [略]
first_points = []
while first.size > 0 do
first_points.push first.slice!(0 , 2 )
end
second_points = []
while second.size > 0 do
second_points.push second.slice!(0 , 2 )
end
draw_points(first_points, 495 , 495 , "first.png" )
draw_points(second_points, 495 , 495 , "second.png" )
ということで、出てきた動物の名前をいくつか適当に入れると正解に。しかし、まだまだ四分の一。先は長いです・・・。