ユニファ開発者ブログスマートフォン用の表示で見るユニファ開発者ブログユニファ株式会社システム開発部メンバーによるブログです。その1新年明けましておめでとうございます。今年もよろしくお願いいたします。先週、新年早々ハトにフンを落とされました。ウン(運)のついている柿本です。※フンはきちんと拭き取って洗濯したのでご安心を!2018年最後のエントリーで赤沼が発表している通りこの開発ブログでは年末にアクセスランキングが発表されるようです!つまり、年始のこのエントリーはかなり有利なはず!もうランキングにノミネートされた気分でおりますが、冒頭にくだらないことを書いていると離反されてしまうので、本題に入ります。今回のエントリーではJavaScriptを使って、数独のヒントを教えてもらうことにしました。タイトルに「その1」とあることから察していただきたいのですが、今回のエントリーでは完成まで行き着いていないので悪しからず。「その2」以後があるかもわからないので悪しからず。昨年の終わりにひょんなことから私の妻が数独にはまりました。私はもともと数独が好きで、週末の新聞に載っているものを必ず解いているのですが(それ以外で私が新聞を開くことはない)、文系人間の妻が好きになるとは意外でした。いえ、妻はそれほどスラスラ解けないので、少し詰まると「ヒントちょうだい」と言ってきます。スタンスでいたいので、代わりにJavaScriptにヒントを教えてもらうことにしました。今こことりあえず今時点のものをこちらに上げました。https://unifa-inc.github.io/sudoku_solver/「ヒントちょうだい」ボタンを押すと、数字が特定できるマスをピンクにして教えてくれます。難しくてヒントが思いつかないと、開き直って5歳児になります。実際に動かしたGIF。途中一度だけ叱られます。数独ってそもそも何?という方はWikipediaあたりをご覧ください。ja.wikipedia.org簡単に説明すると、3×3のブロックで区切られた9×9のマス目に、それぞれの行・列・ブロックに1〜9が1つずつ入るように数字を埋めていくゲームです。数独にはいくつかの解き方がありますが、一般的に大きく以下のステップに分かれます。1ルールをそのまま適用する22国同盟(n国同盟)3仮定法(背理法)それぞれの説明はgoogle先生にお願いするとして、私は1でさらに以下の2つの解き方で進めます。1-1:1つのブロックの1つの数字に注目して、以下を全ブロック×全数字(1〜9)に対して繰り返し行います。行と列が交差しているマスにはその数字が入る例(1-1)左上のブロックに注目した時に、赤枠と青枠が交差している黄枠のマスに1が入ることがわかる1ー2:1つの行(もしくは列)の空マスに注目して、以下を全行(列)に対して繰り返し行います。どちらかの場合、そのマスにはその数字が入る例(1-2)赤枠の行に注目した時、青枠と紫枠には1を入れられないため、黄枠のマスに1が入ることがわかる完成形は3の解法まで適用されたヒントを出すことなのですが、このエントリーでは1ー1で解ける範囲内でヒントを出すことをゴールとします。処理の流れ左上のブロックから順番に1から9までの各数字について、以下の検証を行うことにします。)ロジックソースコードをGitHubで公開しておりますのでそちらをご覧ください。『処理の流れ』で書いている「制約」をどうデータとして保持するか、に少し悩みました。結果、3×3のブロックのマスを表す2次元配列に0と1を保持し(0:制約あり/1:制約なし)、最終的に「1」が1つだけの場合はnがそのマスに入ると断定できる、と判断する方法をとりました。公然の多重ループパズル系に関わらず、ゲーム要素のあるものを作ろうと思うと必ず多重ループや多重分岐の罠にハマる気がします。世にある多くのゲームたちもやはり多重ループが量産されているのだろうか?と疑問に思いました。知見のある方、ぜひ教えてください。終わりにサーバーサイドエンジニアの仕事は、DBのデータを出したり入れたり、の繰り返しです。実際には検証したりくっつけてみたり離してみたりもあるのですが、意外とロジカルなロジックを書くことは少ないです。いうロジックロジックしたものを書くとなんだか心が温まりますので、皆様もぜひ!それではみなさま、良い2019年をお過ごしください!保育をハックするエンジニア募集中ユニファでは一緒に働く仲間を募集中です。その1Tweet関連記事2019-09-06コンテキストスイッチをいかにして減らしたか?スクラムマスターの渡部です。以前、とあるイベントに参加した...2019-08-08赤ちゃん1人とルーター2つこんにちは。サーバーサイドエンジニアの柿本です。2019年初ブロ...2018-10-11練習問題こんにちは、ヘルスケア事業部のちょうです。Detection月別アーカイブスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。