2008年12月12日金曜日

いわゆるぬか喜び

一緒にプログラムをしているネットで知り合ったMIDさん(以下MIDさん)にプログラムの宿題をもらいました。
C言語でどこで出されたのかはわかりませんが、
制限時間は一時間

私は取りかかりました。

ですが、私のマシンはふっとんだあとさらにふっとんで環境すら構築しておりません。
X codeも入ってません。 インストールしながらのtime attackです。
実際のところ私はC言語勉強は進んでませんで、きつかったです。 ですが、こういう壁みたいなのは越えるために有るんであって、挑戦しないのはもったいないことです。

やりました。

vimが、、、、だめぽです。

問題は16進数で渡されたファイルff ff ffという形式をバイナリファイルにそのまんま直せこの野郎って言う問題です。
ようはどうにかしてスペース取り除いてそのままバイナリに直せばいいっていうことです。
さて、このスペースどうしよう。 てか、キャラクターで入ったものを数字に直す方法は知ってましたが、16進数の変換方法が思い浮かびませんでした。

「まぁ、なんとかなるでしょう」と思いながら、(実際このときにはto_hexみたいなライブラリあるんじゃね?とか思ってました)カタカタしていると、vimでみるとファイルが別の形で見えました。

vim -b binary.bin
:%!xddだっけか?
そしたら、ff ffのところがcf3bとかになっていて正直いってわけわかめ。 これはわざと変換しているのか、それとも変換ミスなのかどっちなんだよ!おいって聞いてみると
「えっ?それffになっているはずだよ?」

うーん。おかしいffだったらffって表示されるはず。。。。

まさかと思い、hexdump -C file.binでみてみると。。。。
あら不思議 ff でちゃんと表示されているじゃ有りませんか。

結論:俺のvimの使い方がおかしい or vimの設定が間違っている or コマンドの使い方がおかしい

でも、ほかの行はちゃんと表示されていたところをみるとほかに原因が有るのかもしれません。

とりあえず、時間は始まっていますので、どんどん書いていきました。

思いついたのは2つ、全部取り込んであとからスペースを削る方法、1文字ずつ読んでスペースかそうじゃないかを判定して一つのプレーンテキストにして一気に変換

最終的には1文字ずつ読んでバイナリーとして書き込みました。

なんやかんやで時間を食ってしまって一時間経過したときには「とりあえず、つくってみたよ。」的なところまででバグどころかロジック自体間違っているかもしれないという状態でのタイムアップでした。
time up

結果はだめぽでした。 だって16進に変換してないんだもん。 そりゃ無理だ

とりあえずこういう感じでした。