【テイクアウト】コクドウカレーのカレーパン

ルーカレーのカレー屋さんなのですが、カレーパンも売られているので、

テイクアウトしました。

1個250円なのですが、3個で700円、5個で1200円です。

写真には写ってませんが、中にじゃがいもが入ってますね。

今回買ったのはカレーパンですが、カレールーもテイクアウトできます。

タッパーを持参すればさらに50円引きになるみたいです。

今度ルーカレーも買ってみよう。

残ったカレーパンは明日の朝ご飯にします。

首の筋肉をマッサージした結果。

以前、紹介した、このマッサージ器。

これを使いまくった結果、ある事に気がついたんですよ。

オイラは以前から、あくびが止まらない、と言うことをスゴイ気にしていました。

夜になると、ホントにあくびが止まらなくて、顎が痛くなるぐらい。

しかし、そのあくびが出なくなった。

ここである事に気がついたんですよ。

首が凝る
↓
頭に巡る血流が悪くなる
↓
脳に酸素が行かなくなる
↓
脳は酸素を欲しがって、あくびをするようになる

このメカニズムが成り立つんじゃないかと。

そう考えたら、

首の凝りが解消される
↓
頭に血液が流れるようになる
↓
脳に酸素が渡るようになる
↓
あくびが止まる

いやいや、脳に酸素が行かなくなった時点でヤバイから。

でも、このマッサージ器で血流が良くなったら1万円の投資なんて安い物よ。

整体1回行ったらウン千円取られるのよ。

どちらがより経費がかからないか、なんて一目瞭然。

でも調子悪いときは一度見てもらった方が良いかもしれないけど。

いや、でもここまで激変するとは思わんかった。

これはマジで、買って良かった物ですわ。

【C#】【ピクロス】【ALTSEED】解析パターンその5

前回までの状況はこちら。

最新ソースはこちら。(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++;
            }
        }

考え方は簡単に思えますが、実際に実装して見ると結構複雑になったりします。

このコーディングが正しく動かすまでに何度もデバッグを繰り返しました。

プログラミングとはそういうもんです。

基本的にトライエラーで正しく動くまで修正するのです。

実行結果はこうなりました。

小さな一歩ですが、確実に行きましょう。