ルーカレーのカレー屋さんなのですが、カレーパンも売られているので、
テイクアウトしました。
1個250円なのですが、3個で700円、5個で1200円です。
写真には写ってませんが、中にじゃがいもが入ってますね。
今回買ったのはカレーパンですが、カレールーもテイクアウトできます。
タッパーを持参すればさらに50円引きになるみたいです。
今度ルーカレーも買ってみよう。
残ったカレーパンは明日の朝ご飯にします。
以前、紹介した、このマッサージ器。
これを使いまくった結果、ある事に気がついたんですよ。
オイラは以前から、あくびが止まらない、と言うことをスゴイ気にしていました。
夜になると、ホントにあくびが止まらなくて、顎が痛くなるぐらい。
しかし、そのあくびが出なくなった。
ここである事に気がついたんですよ。
首が凝る
↓
頭に巡る血流が悪くなる
↓
脳に酸素が行かなくなる
↓
脳は酸素を欲しがって、あくびをするようになる
このメカニズムが成り立つんじゃないかと。
そう考えたら、
首の凝りが解消される
↓
頭に血液が流れるようになる
↓
脳に酸素が渡るようになる
↓
あくびが止まる
いやいや、脳に酸素が行かなくなった時点でヤバイから。
でも、このマッサージ器で血流が良くなったら1万円の投資なんて安い物よ。
整体1回行ったらウン千円取られるのよ。
どちらがより経費がかからないか、なんて一目瞭然。
でも調子悪いときは一度見てもらった方が良いかもしれないけど。
いや、でもここまで激変するとは思わんかった。
これはマジで、買って良かった物ですわ。
前回までの状況はこちら。
最新ソースはこちら。(gitHub)
https://github.com/takishita2nd/Picross
さて、今回はここを攻めていきます。
ここはマスクされたマスのすぐ隣に塗られたマスがあるので、当てはめる数字が分かればここも確実に塗ることができます。
ただ、前から塗る場合と後ろから塗る場合で、一緒に考えるとハマってしまうので、今回は前から塗るケースを考えました。
つまり、今回の対象はここになります。
解き方はこんな風に考えました。
空いているマスを抽出し、その端っこ(今回は先頭)が塗られているならば、数字に従って塗る。
そして、その次のマスは必ずマスクされますので、マスクする。
これでいきます。
// 解析パターンその5
// 端っこ(先頭)が塗られていたら塗る。
private void pattern5()
{
// Row
pattern5Row();
// Col
pattern5Col();
}
private void pattern5Row()
{
int row = 0;
foreach (var rowlist in rowNumbers)
{
if (rowlist.IsAnalyzed())
{
row++;
continue;
}
rowlist.AnalyzeDatas.Reverse();
// 塗った場所が端っこならそこを塗る
// マスクされていない部分をリスト化して取得する
List<List<BitmapData>> data = new List<List<BitmapData>>();
{
List<BitmapData> dataList = new List<BitmapData>();
for (int col = 0; col < colNumbers.Count; col++)
{
if (_bitmapData[row, col].IsMasked() == false)
{
dataList.Add(_bitmapData[row, col]);
}
else
{
if (dataList.Count != 0)
{
data.Add(dataList);
dataList = new List<BitmapData>();
}
}
}
if (dataList.Count != 0)
{
data.Add(dataList);
}
if (data.Count == 0)
{
row++;
continue;
}
}
int rowNumberIndex = 0;
foreach (var dataList in data)
{
// 端っこが塗られているか?
if (dataList[0].IsPainted())
{
// すでに処理済みか?
if (rowlist.AnalyzeDatas[rowNumberIndex].IsAnalyzed())
{
rowNumberIndex++;
continue;
}
// 数字に従ってマスを塗る
int count = 0;
foreach (var s in dataList)
{
if (count < rowlist.AnalyzeDatas[rowNumberIndex].Value)
{
s.Paint();
count++;
}
else
{
if (s.IsMasked() == false)
{
s.Mask();
}
rowlist.AnalyzeDatas[rowNumberIndex].Analyzed();
rowlist.CheckAnalyze();
break;
}
}
}
}
row++;
}
}
private void pattern5Col()
{
int col = 0;
foreach (var collist in colNumbers)
{
if (collist.IsAnalyzed())
{
col++;
continue;
}
collist.AnalyzeDatas.Reverse();
// 塗った場所が端っこならそこを塗る
// マスクされていない部分をリスト化して取得する
List<List<BitmapData>> data = new List<List<BitmapData>>();
{
List<BitmapData> dataList = new List<BitmapData>();
for (int row = 0; row < rowNumbers.Count; row++)
{
if (_bitmapData[row, col].IsMasked() == false)
{
dataList.Add(_bitmapData[row, col]);
}
else
{
if (dataList.Count != 0)
{
data.Add(dataList);
dataList = new List<BitmapData>();
}
}
}
if (dataList.Count != 0)
{
data.Add(dataList);
}
if (data.Count == 0)
{
col++;
continue;
}
}
int colNumberIndex = 0;
foreach (var dataList in data)
{
// 端っこが塗られているか?
if (dataList[0].IsPainted())
{
// すでに処理済みか?
if (collist.AnalyzeDatas[colNumberIndex].IsAnalyzed())
{
colNumberIndex++;
continue;
}
// 数字に従ってマスを塗る
int count = 0;
foreach (var s in dataList)
{
if (count < collist.AnalyzeDatas[colNumberIndex].Value)
{
s.Paint();
count++;
}
else
{
if (s.IsMasked() == false)
{
s.Mask();
}
collist.AnalyzeDatas[colNumberIndex].Analyzed();
collist.CheckAnalyze();
break;
}
}
}
}
col++;
}
}
考え方は簡単に思えますが、実際に実装して見ると結構複雑になったりします。
このコーディングが正しく動かすまでに何度もデバッグを繰り返しました。
プログラミングとはそういうもんです。
基本的にトライエラーで正しく動くまで修正するのです。
実行結果はこうなりました。
小さな一歩ですが、確実に行きましょう。