2011ちとから☆あんどろいど実験室AndroidアプリからHTML5/CSS3/JavaScript。その他技術的な事について書いてます。2011年9月21日水曜日DevQuiz挑戦した!いや~、落ちました。スライドパズルは17.4点取ったんだけどねぇ。嘘じゃないよ!ほら!まさかのウォーミングアップ失敗だったのかな...?だとしたら恥ずかしいことなのか...?というわけで、ブログの更新もずっと止まってたし、せっかくだからDevQuizのスライドパズルで何考えたかをつらつらと書いておこうと思います。自分の場合、しょっぱなに致命的なミスをしてしまいまして、1問0.01点のところを0.1点だと勘違いしてしまったんですね~。なんでこの先はそういうつもりで見ていってください。スライドパズルって実は自分ほとんど遊んだことすらなかったので、まずはちょっと調べてみました。すると、偶奇性の問題から解けないパターンが有るということが分かりました。問題を飛ばすことが可能で全問とかなくても満点になる(←間違い)という事なので、解けない問題と難しい問題を飛ばしてやれば良いってことか!と判断しました。この時点でphpベースで問題・状態を画面に表示するプログラムと偶奇性のチェックを行うプログラムをちゃちゃっと書いてすべての問題がとけることと、難しそうな問題が存在することがわかりました。簡単なところから、という事で「壁のない問題」をチョイスしてみたところ、軽く1000問を超えていたのでこれだけ解いちゃえば良いか!と完全に間違った大方針が決定しました(笑)2.【考察・実装】で、ロジックの設計に入りました。どんなもんか知らないとダメなんで、ノート切って作りましたスライドパズル(笑)鼻息で吹き飛んで大変だったんだな、これが。超強力アイテムでした、マジで。これ使ってゴニョゴニョしてるうちにだんだんとコツが分かり、こんな感じで考えました。・最後は右下にスペースを持ってくるので左上から揃えるといい。・1行揃えるためには最後の2マスを同時に揃えるようにせねばならぬ。・一番右端を最後に残すとして、一番右端に置くべきものを先に右端から二番目に、そのすぐ下に右端から二番目に置くべきものを置いておくと1行が完成する。・2つのものを入れ替えるのに6マス必要。・なので最後は下から2段使って左上下2マスづつ揃えるようにする。こんなんで壁なしは解けるかなーと思ってコーディング開始。今仕事が忙しくてなかなか時間が取れず、最初に流せる状態になるまで3日くらいかかったかな?それはバグがあって途中で止まったけど、それまでのはちゃんと解けてた。おーいけそうじゃん!って思って仕事の忙しさもあって最後の金曜まで放置してたのが運の尽きでしたねぇ。金曜の仕事が終わって夜の12時くらいから作業を再開したんです。バグ潰し終わったのが2時くらいだったかな。これで1100問くらい解けてた。ゆーじゃーん!やったーと喜び勇んで回答ファイルを提出。...?じゅってん?ば、バカな!1000×0.1だぞ!?100は取れるだろ!?そんなに間違ったのか!?と思って問題文をもう一回読んで顔面蒼白(泣)何が一番焦ったかって、同じく挑戦してた人に全部挑戦しなくても満点取れるから壁なしだけ挑戦でもいいじゃん♪とのたまってしまっていたこと!!!超焦って夜中にもかかわらずメール送信。夜分失礼に始まり返信不要で終わる、あれなメール。落ち着いたところで状況を整理。いえ、ボーダーラインは100点ちょいみたい。圏内だけど、確実に最後に照準合わせて点取ってくる人がいるはず。ここはちょっとでも点数が上がるように努力すべきだろう。いう事で壁ありパターンの設計を急遽開始しました。SIやってると良くありますよね!みんなおうちに帰れなくなるあれです。実質あと1日しか使えない状況。(日曜は1日用事があったのです)土曜は死に物狂いでしたね~。生活は完全に1日ニート。こんな感じで考えました。・壁の置き方が難しくない問題を優先的に解きたい。・右から2列目や下から2段目に壁があると難しくなる。・6ブロックの中に壁があったときに複数のマスを同時に揃えなければならなくなる。・6マスの中の特定の位置に壁があった時の揃え方のパターンを増やしていけば解けるはず。・空白を目的地まで移動させる時に、壁を回避するロジックを入れる(右手付き、左手付き)。・横×縦=2×3の6マスで、右の真ん中に壁があった場合は壁の左に右上に置くべきものを置いたら左上に置くべきものを下に持ってくる。両方一つ上に移動させたら壁の左に置くべきものを左上に置くべきものの下に持ってくる。・まずは壁一個のパターンをこんな感じで実装する。・たぶん壁2個のパターンで片付くはず(3個になると条件が揃ってないと難しい)全部じゃないけど、大まかにはこの方針で始めました。結局無理やりの仕様変更な上、焦ってコーディングしてたのもあって、壁回避ロジックのバグ改修にかなり苦戦してしまいました。壁に左手つきながら、もしくは右手をつきながらのロジックが無限ループしちゃったんですよね~。何とか壁1個のパターンを1つだけ実装してギブアップ。日曜も夜中はやってたんですけど、2時くらいに実装は諦めて無限ループする問題のブラックリスト作ってたら朝の4時(何気にこれが一番泣きそうでした)。...しかし、しかし落第(泣)こ、この努力は報われないのかぁ~~~来年は無理だろうなぁ。仕事でこんな時間取れなくなってるだろうから。それが解ってたから有終の美を飾りたかったんですが、かなわずでした。ま、DevQuiz、ひいてはGoogle様をなめてかかった自分が悪いんですけどね。いろんな意味でいい勉強になりました。公開CacooからのHTMLメールで、メタタグに間違ったcharsetが指定されていたので、メタタグのcharsetの優先順位をメールパートより下げました。人気の投稿さくらレンタルサーバーにnode.jsをインストールしてみたスタンダードさくらインターネットレンタルサーバーにnode.jsをインストールしました。こだわりゆえに死ぬほど大変でしたが、まとめておきます。・メール送信中、プログレスが出ている間に「バックキー」を押すと意図的にエラーを発生させ、処理を強制終了するようにした。・メールボックスを開いたときに現在ボックスにあるメール数を表示するようにした。・未送信のメールがメールボックスにあるときに送信...EmobileのGS01※この機種のレビューですが、SoftBankの101DLとほとんど同じなのでレビューは割愛します。仕事ってなんだろうねーシンプルに考えると社会貢献が基本。社会っつーのは自然の脅威から人間が生き残るための要塞で、寄り集まったわがままな人間ができるだけ快適に過ごすためにルール・法律が生まれた。入力イベントを拾いたい最近少々苦労したのでまとめておきます。何がしたかったかというと、候補の表示。入力しながら候補を絞ってリストを表示し、クリックできるようにするあれ。リリースしました今回はバグの改修が1件です。1件ですが、この条件に当てはまると非常に不便なので早いうちにリリースしました。プロセス管理ってどうなっているのかという話。UI描画の処理と自分の書い...さっきの続き。やった事を詳しく書きますもう夜も遅いですが、何を変更したのか公開しておきます。絵文字対応(出来る限り頑張りました!多分全部やった。メールを削除した際に、添付ファイル等がゴミとして残っていた問題を解決。二つですが苦労してます。ついて解った事を書いておきます。機能をつけたくなったのでもう少し遅くします。マイナーバージョンアップという事になる予定です。投稿Atom投稿すべてのコメントAtomすべてのコメント自己紹介のり1978年生まれ。仕事に没頭したITエンジニア時代を経て、もっと包括的に自分が何をすべきか、したいのかを考えて独立したフリーのエンジニア。