太鼓さん次郎EDIT by GONZUXの曲を人力でソートする
2016/02/17こんにちは。生きてます。
ソートするには
初めに、ソート対象を選択します。LEVEL別に選択することが出来ます。
次に、与えられた二択問題に答えていきます。例えば、曲の難しさでソートしたい場合は、より難しい曲を選択していきます。簡単な順にソートしたい場合は、より簡単な曲を選択していきます。
結果が順次確定し、表示されていきます。欲しい曲数を満足するまで二択問題に答えていきます。
プログレスバーについて
ソートアルゴリズムに、HeapSortを採用しています。HeapSortは、大きく2つのステップに分けることが出来ます。Heapの構成と、結果の取り出しです。プログレスバーには、これら2つのステップがどの程度進行しているかが、おおよそ表示されます。
HeapView
ソートアルゴリズムに、HeapSortを採用しています。HeapViewには、そのHeapの内容がリアルタイムに表示されます。HeapViewの文字をクリックすると、表示と非表示を切り替える事ができます。非表示になっているHeapViewは、表示のための処理を行わないので、全体の処理が軽くなります。見た目の変化が伴ったほうが、ユーザーに潤いを与えるのではないかという粋なはからいです。
内部の挙動について
前述のとおり、ソートアルゴリズムにはHeapSortを採用しています。理由は、上位から順番に結果がわかることで、ユーザーがソートを打ち切ることが出来ることと、そこそこ効率が良いことです。
言ってしまいますが、二択問題は、非常に長いです。22要素を並べるために、70問くらいの比較問題に答えました。自分なりのしっかりとした基準(どちらがハード抜けしにくいか等)を持って、直感的に挑むことをおすすめします。
ユーザーの選択は、内部に記録されています。一度回答した二択問題は出題されません。
制作後記
今回の制作での、一番の収穫は、なんといってもジェネレータの扱いの習得でしょう。簡単に言えば、関数の動作を一時停止して、また再開することが出来るようになったのです。まず、普通にHeapSortを実装しますよね。そして、その比較部分でユーザーに処理を任せたいわけですが、ここでHeapSortを一時停止して、ユーザーの入力を待たなければならないわけです。こんなことは、ジェネレーター無しでは難しいですよね。alert関数みたいなものを自作する際の助けになりそうです。
実行例
最後に、管理人が ★×10以上の曲をハード抜けしにくい順にソートした結果を貼っておきます。誰かが、TOP20に入るくらいの譜面を書きたいと言っていました。ふざけんな。
★×10以上の曲をハード抜けしにくい順にソートした結果(2016/02/17)
★×10以上の曲をハード抜けしにくい順にソートした結果(2016/05/29)
それでは、また。