世の中には10種類の人間が居る
それは,2進数を知る者とそうでない者だ.
この言葉ウィットに富んでて良いですよね,今日ゲームやってたらロード画面で登場しました.そのゲームはこちら
CodeCombat - Learn how to code by playing a game
ゲームで遊びながらJavaScriptが学べるという触れ込みのCodeCombat.
とりあえずやってみた感じでは,JavaScriptを学ぶというよりはプログラミング的思考を学ぶって感じかなと思った.勿論コードはJavaScriptで書いてるけども,与えられたメソッドを使ってゲームをクリアってのが多くてアルゴリズム面が強く,書いてるコードの中でどの部分がJavaScriptかと言われてもあまり分からない,しいて言えば var かなぁ(?)って感じ.初心者向けモード・上級者向けモード・マルチプレイモードがあって,とりあえず初心者は一通りクリアした.上級者向けモードはサイトが出してる問題とプレイヤーが投稿した問題があって,サイトの方だけ済まして他に移ろうかなぁと思ったら最後の問題(?)でドはまりしてしまいました.
GRIDMANCERって問題で,要約するとマップをなるべく少ない長方形で埋め尽くすっていう問題.基本的にメソッドはブラックボックスが多くて,printf や echo の様な使い方ができる say() が処理時間必要なせいで,欲しい情報がどこに入ってるのかってのが分かりにくくて苦労する.とりあえず方針として,
- 横方向に伸ばせる時は伸ばした形で埋めていく
- 全部埋めたら,縦方向で隣接して幅が等しいのがあったら連結する
- 連結が済んだら,すべての長方形に対し一旦消す→もっかい足すを行ってラベル番号をリフレッシュ
っていうのでやってみて,
この段階までは持ってこれたんだけど,ゲームクリアにならないからまだ何か必要っぽい.もしかしたら単純にもっと少ない数で埋められるのかもしれない.ただこれにずっと躓いてるわけにも行かないので,明日は環境構築をしたいと思います.
※追記
図の21,11,28,23,20は縦長の長方形を優先することで5つ→4つに減らせそう.ただそのためにどのようなアルゴリズムを組み込むのかちょっと浮かばないなぁ.長方形を配置する際に縦に伸ばすと,長方形2,5のあたりでエライことになっちゃうんだよね.
この時点までのコード貼っときます
https://codecombat.com/play/level/gridmancer (in ...