そこそこの計算コストが必要でマルチスレッドにも向いている……と思いナンプレを選んでみましたが、作ってみたら25x25でもサブスレッド1つで2秒で解けちゃいました。
捨てるのも勿体ないので公開します。
サンプルソースは以下。
画面

マス目に数字を入力して「処理開始」ボタンを押すとWorkerスレッドが作成されて、各空欄に入る数字が特定できたらその欄に数字が入力されていきます。
マス目に数字を入力するのが大変な場合は「テキストから読み込み」ボタンをクリックすると、画面下部のテキストエリア内にある情報がマス目に展開されます。

実行結果

軽く見渡してみると、なんとなく正解になっているように見えますが一応Excelでも検証してみました。
※下図では表示されていませんが縦・横・ブロックごとに数字の重複がないかcountifで確認しています。

正解のようです。
当初の目的はWebWorkerの有効活用でしたが、いきなりマルチスレッドな仕組みにするとデバッグが大変そうだったので、とりあえず(マルチスレッドを見据えつつ)サブスレッド1つで作りました。
結果的に1つのサブスレッドでしか計算していないのでWebWorkerを使わずとも2秒程度で解けるようです。
シングルスレッドでは長時間かかる処理がマルチスレッドだと短縮できる、というのを実用的な用途で実測したいのですが・・・なかなか見つかりません。
0 件のコメント:
コメントを投稿