作ってみた昨日は杏ちゃんに水着を着てもらいましたが今日はめがねをプレゼントして様子を見たいと思います。Paizaのイベントpaiza.jp水着回takachan.hatenablog.comサンタコス回takachan.hatenablog.comショートカットに「めがね」きっと似合うと思います。めがねにはランキングがあるらしいどうやら昨今、新進気鋭の言語として巷を席巻しているSwift言語限定で「めがね」の獲得に情熱をたぎらせる紳士の方々の信仰心と技術力が試されるランキングがあるようです。23:35分現在の様子はこんな感じです。・・・・これは!!?、、、、ただのへっぽこSEが張り合う世界じゃないみたいです。この世界のことはいったん忘れて、普段使っているc#で杏ちゃんに「めがね」をプレゼントしたいと思います。0.4秒かかるみたいです。考え方コーディングの順に自分がどうやったのか紹介したいと思います。(前回と同じく杏ちゃんにプレゼントを贈ることだけを考えているので数学的に云々や効率は置いておきます。)仕様の確認まずは仕様を確認したいと思います。グリッド上のデータ処理っぽいですね。これはボードゲームとかテトリスを作った時の経験が役に立ちそうです。データの扱い方まずは、グリッド状のデータ扱うためのデータ構造を決めます。グリッドデータをプログラム扱う方法は大きく分けて2通りあります。1次元配列で扱う2次元配列で扱う人間が直観的に理解しやすいのが2次元、よりコンピューターのメモリイメージに近いのは1次元かと思います。今回は「左上から右下にシーケンシャルにアクセスする」プログラムになりそうなので(大して差はないですが)1次元配列で行こうと思います。グリッド比較方法まず、左上から配列のインデックスをイメージした番号を振ります。例題にあやかって検索対象の大きさを「4」、比較対象の大きさを「3」とした場合こんな感じに比較対象と比較するので検索回数は最大4回になります。(今回は必ず1つ一致するものが含まれているそうなので途中で見つかったら計算を打ちるので「最大で4回」です)そしてその1回のパターンの中をそれぞれ左上から順番に比較していきます。それぞれのグリッドの値が途中で不一致になった場合検索を打ち切ります。M)回ループをすれば良さそうです。1次元配列を2次元のように扱うデータ定義を1次元にしているため(4)の様なオフセットがある開始位置を特定するため式は求めたいXの座標を"px"、Yの座標を"py"とした場合以下の通りです。今回は比較回数が最悪値となってもそんなに計算量が多くならなそうなので、特に計算回数を減少させる特別な仕組みは必要なさそうです。力技で全件検索を行いたいと思います。コーディングだいたいの仕様と考え方を把握したのでコーディングに移ります。以下完全にネタバレなんで自分でコード書きたい人はご注意を・・・あ、すいません。先に言っておきますが、1次元配列を採用しておきながら、2重のforループを使って計算がめんどくさくなっただけでした。これじゃあ2次元配列でも大して変わらないですね。おまけ上記コードでは外していましたがテスト効率向上のため以下のような仕組みを利用しました。入力データを毎回手入力すると効率が悪すぎますからね...IEnumerableが取れればListでもよかったのですが、フィールドイニシャライザで宣言するとデータを用意したときに加工に手間がかかるのでyield構文を使って1行分のデータを返しています。1";}まとめ当然ですが、0.1秒の世界はこれとは異なるアプローチが必要ですね。あと400%高速化ですw今回はVisualStudioが使えたのでコーディングが前回より「かなり」楽でした。Paiza.ioと違いインテリセンスが効いてるのが大きかったです。»Profile受託ソフト会社員でWin系業務屋。趣味でCocos2d-x/C++を触っています。etc...主に受託・開発ネタ、Windowsの事、Srellaris、ゲーム制作の進捗の事を喋ります。Core3.xとUnityでAES暗号化を利用するC#の標準機能でデータを圧縮・展開するC#で属性を利用して処理に制約の説明を追加するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。