最新ソースはこちら(gitHub)
https://github.com/takishita2nd/diet-mng
とりあえずダッシュボードの画面を作成してみました。
最近のVSCodeは非常に便利でして、
この画面でnpm run watchコマンドを動かしてくれるんです。
わざわざコマンドを入力する必要がないので、便利です。
この画面はVue.jsで書かれています。
久しぶりのhtml,cssだったので、ちょっと時間がかかりましたが、イメージとしては良いのではないでしょうか。

最新ソースはこちら(gitHub)
https://github.com/takishita2nd/diet-mng
とりあえずダッシュボードの画面を作成してみました。

最近のVSCodeは非常に便利でして、

この画面でnpm run watchコマンドを動かしてくれるんです。
わざわざコマンドを入力する必要がないので、便利です。
この画面はVue.jsで書かれています。
久しぶりのhtml,cssだったので、ちょっと時間がかかりましたが、イメージとしては良いのではないでしょうか。

前回までの状況はこちら。
最新ソースはこちら。(gitHub)
https://github.com/takishita2nd/Picross
今回注目したのはここです。

ここはどのように塗っていくかというと、
空いているマスが4マスに対して、数字は3なので、
真ん中の2マスは確実に塗れることが分かります。
なので、これを実装します。
処理を単純化させるため、解析対象となる数字が行、列で1つの場合のみを、このロジックの対象とします。
また、このロジックを適用するマスを抽出するのですが、
マスクとマスクの間が全て塗られていた場合は処理済みと判断してスキップさせます。
その結果、対象のマスが1つの場合のみ、このロジックの対象とします。
この様な説明で分かってもらえるかどうか分からないけど、そういうことをやっています。
// 解析パターンその8
// 数字が大きい場合、真ん中の方を塗る
private void pattern8()
{
// Row
pattern8Row();
// Col
pattern8Col();
}
private void pattern8Row()
{
int row = 0;
foreach (var rowlist in rowNumbers)
{
if (rowlist.IsAnalyzed())
{
row++;
continue;
}
// 有効な数字を取り出す
List<int> values = new List<int>();
foreach(var data in rowlist.AnalyzeDatas)
{
if (data.IsAnalyzed())
{
continue;
}
values.Add(data.Value);
}
if(values.Count != 1)
{
row++;
continue;
}
// 対象となるマスを抽出する
List<List<BitmapData>> bitmapLists = new List<List<BitmapData>>();
List<BitmapData> bitmaplist = new List<BitmapData>();
for (int col = 0; col < colNumbers.Count; col++)
{
// マスクとマスクの間が全て塗られていたら、そこは対象としない
if (_bitmapData[row, col].IsMasked())
{
if(bitmaplist.Count != 0)
{
bool done = true;
foreach(var bitmap in bitmaplist)
{
if(bitmap.IsPainted() == false)
{
done = false;
}
}
if(done == false)
{
bitmapLists.Add(bitmaplist);
}
bitmaplist = new List<BitmapData>();
}
continue;
}
bitmaplist.Add(_bitmapData[row, col]);
}
if (bitmaplist.Count != 0)
{
bitmapLists.Add(bitmaplist);
}
if(bitmapLists.Count != 1)
{
row++;
continue;
}
int value = values[0];
List<BitmapData> bitmaps = bitmapLists[0];
if(value < bitmaps.Count && value * 2 > bitmaps.Count)
{
int paintNum = value * 2 - bitmaps.Count;
int countMax = 0;
if(paintNum % 2 == 1)
{
countMax = paintNum / 2 + 1;
}
else
{
countMax = paintNum / 2;
}
for (int count = -paintNum / 2; count < countMax; count++)
{
bitmaps[bitmaps.Count / 2 + count].Paint();
}
}
row++;
}
}
private void pattern8Col()
{
int col = 0;
foreach (var collist in colNumbers)
{
if (collist.IsAnalyzed())
{
col++;
continue;
}
// 有効な数字を取り出す
List<int> values = new List<int>();
foreach (var data in collist.AnalyzeDatas)
{
if (data.IsAnalyzed())
{
continue;
}
values.Add(data.Value);
}
if (values.Count != 1)
{
col++;
continue;
}
// 対象となるマスを抽出する
List<List<BitmapData>> bitmapLists = new List<List<BitmapData>>();
List<BitmapData> bitmaplist = new List<BitmapData>();
for (int row = 0; row < rowNumbers.Count; row++)
{
// マスクとマスクの間が全て塗られていたら、そこは対象としない
if (_bitmapData[row, col].IsMasked())
{
if (bitmaplist.Count != 0)
{
bool done = true;
foreach (var bitmap in bitmaplist)
{
if (bitmap.IsPainted() == false)
{
done = false;
}
}
if (done == false)
{
bitmapLists.Add(bitmaplist);
}
bitmaplist = new List<BitmapData>();
}
continue;
}
bitmaplist.Add(_bitmapData[row, col]);
}
if (bitmaplist.Count != 0)
{
bitmapLists.Add(bitmaplist);
}
if (bitmapLists.Count != 1)
{
col++;
continue;
}
int value = values[0];
List<BitmapData> bitmaps = bitmapLists[0];
if (value < bitmaps.Count && value * 2 > bitmaps.Count)
{
int paintNum = value * 2 - bitmaps.Count;
int countMax = 0;
if (paintNum % 2 == 1)
{
countMax = paintNum / 2 + 1;
}
else
{
countMax = paintNum / 2;
}
for (int count = -paintNum / 2; count < countMax; count++)
{
bitmaps[bitmaps.Count / 2 + count].Paint();
}
}
col++;
}
}
public BitmapData[,] Run()
{
pattern1();
while (checkPainedCount())
{
pattern2();
pattern3();
pattern4();
pattern5();
pattern6();
pattern7();
pattern8();
doMask();
}
return _bitmapData;
}
実行結果はこうなりました。

全て埋まりましたね。

解けたようです。
やったぁ。

とりあえず、環境を初期設定しました。

Auth機能を設定。
詳細はあとで作成する。
ログインするとこんな感じ。

とりあえず、体重などを記録して表示させたいと思っているので、画面はこんな感じかな。
ダッシュボードにはこんな感じで画面を作る。

クイック入力をクリックすると、ダイアログを表示する。

パパっと入力できるように。
詳細をクリックするとこんな感じの画面に遷移する。

こんな感じでリスト表示。
ここでデータ入力、編集、削除ができる。
操作はダイアログかなぁ。
ページャーもいるよね。
あとはグラフ表示を行うのにどのライブラリを使うかだな。
今後の予定としては、
こんな感じかなぁ。
ぼちぼちとりかかりますか。

前回までの状況はこちら。
最新ソースはこちら。(gitHub)
https://github.com/takishita2nd/Picross
あれからがっつり修正しました。
具体的には、解析パターン5と6。
一度にたくさん処理していたのを、
一番最初のもの、一番最後のものの2パターンに分け、1回の処理では1つだけしか処理しない、という風にしました。
最初のループでは処理できない箇所でも次以降のループで処理できるでしょ、という考え。
詳しくはgitHubのソースコードを見て欲しい。
最終的には、こんな感じになりました。

解析完了までもう少しだが、まだ解析手法はあるはず。
これから考えます。

前回までの状況はこちら。
最新ソースはこちら。(gitHub)
https://github.com/takishita2nd/Picross
今回はここを狙います。

ここは、数値が一つなのに対して、塗るで確定しているマスが二つありますので、この間が塗れることが分かります。
これを実装します。
// 解析パターンその7
// 数字が1個で2マス塗られている場合はその間を塗る
private void pattern7()
{
// Row
pattern7Row();
// Col
pattern7Col();
}
private void pattern7Row()
{
int row = 0;
foreach (var rowlist in rowNumbers)
{
if (rowlist.IsAnalyzed())
{
row++;
continue;
}
if(rowlist.AnalyzeDatas.Count == 1)
{
int value = rowlist.AnalyzeDatas[0].Value;
int startCol = 0;
int endCol = 0;
for (int col = 0; col < colNumbers.Count; col++)
{
if(_bitmapData[row, col].IsPainted() && startCol == 0)
{
startCol = col;
}
else if(_bitmapData[row, col].IsMasked() && startCol != 0)
{
break;
}
else if(_bitmapData[row, col].IsPainted() && startCol != 0)
{
endCol = col;
}
}
if(startCol== 0 || endCol == 0)
{
row++;
continue;
}
for(int col = startCol; col < endCol; col++)
{
_bitmapData[row, col].Paint();
}
}
row++;
}
}
private void pattern7Col()
{
int col = 0;
foreach (var collist in colNumbers)
{
if (collist.IsAnalyzed())
{
col++;
continue;
}
if (collist.AnalyzeDatas.Count == 1)
{
int value = collist.AnalyzeDatas[0].Value;
int startRow = 0;
int endRow = 0;
for (int row = 0; row < rowNumbers.Count; row++)
{
if (_bitmapData[row, col].IsPainted() && startRow == 0)
{
startRow = row;
}
else if (_bitmapData[row, col].IsMasked() && startRow != 0)
{
break;
}
else if (_bitmapData[row, col].IsPainted() && startRow != 0)
{
endRow = row;
}
}
if (startRow == 0 || endRow == 0)
{
col++;
continue;
}
for (int row = startRow; row < endRow; row++)
{
_bitmapData[row, col].Paint();
}
}
col++;
}
}
やっていることは簡単で、最初に塗られているマスと後に塗られているマスを探し、その間を塗る、というロジックです。
まずは1周実行してみます。

想定通りに塗られていますね。
では2周目

3周目

おや?

ここをマスクされると、縦11の数字の処理に矛盾が発生しますので、この動きはおかしいですね。
いろいろ調査してみましたが、解析パターン5でマスクを行っている用です。
なので、今の解析パターン5に問題があるようです。
なので、次回なおしましょうか。(今なおしたらハマりそう)

次はこの問題を解いてみようと思います。

これまで作成したアルゴリズムを適用してみました。

まぁ、そうだろうねぇ。
でもこれならまだ頭の中に解法はある。
次回からそれを実装していきましょう。
あ、ロード処理を少し修正しました。
最新ソースはこちら。(gitHub)
https://github.com/takishita2nd/Picross


びっくりしたわ。
こういうのが届いたら、正しい物なのか調べるクセを付けておいた方がいいで。
厚生労働省のサイトを調べるとこれが見つかりました。
https://www.mhlw.go.jp/stf/newpage_03463.html
ざっくり説明すると、
過去に受け取った雇用保険料の算出方法に不正が見つかりました。
これを受け取った人は、誤って支払われた可能性があるので、内容を確認、必要事項を記入して返信してください。
少なく支払われていた場合は、その差額が口座に振り込まれます。
と、いうことなので、これは必ず返信しなければならないヤツです。
(お金がもらえる可能性があります。)

対象期間がかなりむかしなのですが、まぁ、被保険者番号が分かれば問題無いかと思います。
被保険者番号は雇用保険受給者証に記載されていますが、持っていなくても、現在所属している会社に問い合わせれば分かるみたいです。
明日投函します。

新しい遊び道具を購入しました。

LCDディスプレイです。
実際に使用するときはバックライトが白く光り、ドット単位で黒くする事ができる、らしいです。
これをラズパイで使って遊ぼうか、と。
なので、ラズパイのHATを取り外す。

そして、これとLCDディスプレイをつなぐためのケーブルを用意する。

あかんやん、オスーオスやん。
なので、これを使用する。

よく見るブレッドボードにヘッダーを取り付けました。
これを使うと、どのGPIOのピンがどこと対応しているかがすぐに分かります。
そして、本体とつなぐにはこれ。

接続。

そして、LCDディスプレイもオスが刺さるようにメスのヘッダを取り付ける。

あれ?これって、はんだづけが必要???
仕方が無い。ポチるか。


結構苦戦したので、攻略メモを残しておく。
※期間限定なので、こういうネタは寿命が短いのよね。
※そもそも、こういうネタはどれだけ需要があるか分からないし。
こちらのwikiに的の特徴が書かれていますが、
https://wikiwiki.jp/img-kirafan/極クエスト-お姉ちゃんズ11
左の赤いイノシシは魔法攻撃に弱いので、強い水のまほうつかいで簡単に倒せると思う。
問題は右の紫のイノシシで、
こちらは魔法に強いので、せんしで攻撃する必要がありますが、それでもなかなかしぶといので、アルケミストのデバフを利用するのが良いと思います。
オススメはステラの魔法の藤川歌夜(アルケミスト・水)で、

防御ダウンと行動速度低下のスキルを持っています。
あと、ナイトをパーティに含めていると、特殊攻撃を仕掛けてくるので、ナイトはパーティに含めてはならない。
デバフの後、陽属性のせんしでタコ殴りにしてスタンさせられれば勝てる。
スタンは無理でも、少ないコンテニューで勝てると思う。
ちなみにオイラは1回コンテニューで勝ちました。
攻略の参考にしてください。

