6月後半KPT

3回め。

前Try

月2リリース目指す。@2005後半

+2
つまりこのKPT書くペースと同じくリリースできるのが目標。
今回は1.5.3リリースした。
といっても、予定してた全部ではなく、ちょうどキリ良かったし、このままだと月末間に合わないなで出した。
まぁ所詮個人開発だし、しかも仕事の合間みたいなもんだし、出せるだけ偉いの考え方でもいいかな。
自分に甘い。

稼働時間@2005後半

+1-1
趣味お風呂になって日に1時間は入ってるせいで、その時間がまるっきり趣味に回ってる。
そんでその分勉強が増えるわけでもないのでよろしくない。
この2週は仕事結構頑張ったと言い張ってもいいけど…。
うーん、まぁ頑張りましょう的な…?

FighTimer利用ユーザー減ってる@2005後半

保留2
確かに減ってはいるんだけど、Admobの収益的にそんなに減ってない。
アプリの性質的に、使ってくれる人は長く使ってくれるし、(本当にありがたい。アプデ頑張ろうね)
合わない人はぱっと抜けてくしって感じなんだろう。
次の次の対応目標としてもチュートリアルとか、初回ユーザに着目したい感じ。

実践ドメイン駆動設計読み切る@2006前半

-1:削除
読めてないですねぇ。
というか、1章分くらい読んだんだけど、翻訳がキツくて読むのが進まない…
心に余裕がないと読めない気がするので、データ指向アプリケーション(今回買ったやつ)読む。

エンジニアとしての稼働時間減ってる@2006前半

-1
普通に稼働時間さえ減ってるよね(笑)
笑えない。

Keep

TOEIC無料検定した

リスニング250-275、リーディング135-155の合計385-430。
400行かない程度の得点ってのは結構ショック…。
この得点帯だとそもそも文法から学び直せってことだったので↓の本買った。
いやこれ本当にわかりやすいし色々目からウロコ。

books

データ指向アプリケーション買った。
買ってみたもののDB系わかんないから失敗だったかな?と思いつつもなんとなくはわかるし日本語なのでこっち優先めで読んでる。

Atcoder続いてる

反省枠も含めて続けてる。
今週分全然解けなかったのが本当に悔しい…。
DPでカエルさん飛ばせるようになったよ。

DDDへの意識

仕事でだけど、リファクタのときにPlantUML使ってクラス図書いて、サービスの範囲を意識してみてる。

challenge

PlantUML書いた

(仕事の話やん)
昔も書いたけど、毎回書くたびにどうやって書くんだっけって右往左往しつつもなんやかんやでまとめる。
新しいサービスのソース出すときもあそこがこうなってってつながりが説明しやすいから助かる。

games

  • 勇者の飯
    あぁまだ続いてる。
    あのあともボスあったんだね?って感じ。
    でも流石に少し飽きてきたくらい。

  • TapTitans2
    2年周期くらいで定期的にハマるクッキークリッカー。
    これにハマったので勇者の飯が落ち着いた。

  • ブリガンダイン ルーナジア戦記
    超待ってた。
    実は1周クリアするまではこのゲームプレイ時間は遊び時間に計上しないとか特別ルール提唱しだした。
    やっぱね、音楽が最高。
    ぶっちゃけ音楽以外期待してなかったんだけど、ゲームシステムも面白いし、大体フルボイスだし。
    これのために1日有給取ったけどまだ1周終わらない。
    えっこれ最低でも6周分するの?人間時間の1年すぐ終わるよ?(嬉しい悲鳴)

Problem

英語の勉強時間取れない

Alpha微妙だわ

もともと週刊誌のAlphaで英語勉強しようと思ったのが、
毎週届くから毎週やらなきゃいけない使命感は出るだろうってのと、
毎週ランダムに英文法とか勉強したかったから。
1週間で読み切るには分量がきついし、英字新聞(ニュース寄り)なのでTOEICとか高得点狙うには向いてない。
TOEICもネットで受けて自分の力量わかったし、まずは基礎固めてその次として読むには良いのかも?
あとは分量も多かったから、定期購読よりはストックが無くなったら本屋に出向いて月刊誌買う方が向いてるかもしれない。
TOEICネット受験が8月まで動画公開してるらしいし、問題ガッツリ読み直したりして、その時もう一度同じ問題に挑戦するのもありかな?

Try

買ってきた英語文法の本を読み切る
8月にもう一度TOEICネット動画挑戦する

稼働時間…

いつもの。
長風呂やめるか、長風呂の中でなんか行動すればいいんだよな。

2週間前のことって意外と覚えてない

”今日”思い出せる、2~3日前の諸々がメインで、2週間前どうだったかなーを覚えてない。
うーん、まぁいいか?いいかなぁ。

ABC172に挑んだ回

ちょっと今回異様に難しくないですか?
B止まりはめちゃくちゃ悔しい。
発想力というか、柔軟さに欠けている。

C - Tsundoku

最初愚直に少ない方を加算してた。
その後問題文見返して、あぁDPか。DP理解できないって逃げた。
そして蓋を開けたらDPじゃない。なにこれ。

解答は解説通り。

D - Sum of Divisors

約数の情報を保存して計算回数減らしたりするかなー。
でも面倒だし、DPの勉強してこよって逃げた。
仮に約数に着目して続けてたとしても、時間的に間に合わないように作られてたらしい。
ある意味逃げてて正解。
そういう部分も計算量からぱっと理解できるようになりたい。

約数うんぬんから目をそらして、普通に計算式としてどうなりそうかに着目すべき?だった問題らしい。
(解説PDF見てもあんま理解できなくて、他の人の答えを見ながら考えて理解した。

例題ケースの[4]の場合、約数の件の詳細は以下のような感じ。
1:1→1個*1
2:1,2→2個*2
3:1,3→2個*3
4,1,2,4→3個*4

1は1,2,3,4…のすべてで登場するし、2は2,4,6…の2の倍数、3は3,6,9…の3の倍数で登場する。
ので、これらの登場回数を配列でカウントして、最後に配列のインデックスで掛け算すれば答えになる。

DP

↓見ながらお勉強中。
蛙は飛ばしたよ。
https://qiita.com/drken/items/dc53c683d6de8aeacf5a

ABC171に挑んだ回

今回で通算10回目。
うち2回は数年前のこと&週1開催だから最近2ヶ月はAtCoderと共にいたことになる。
お前とも長い付き合いになってきたな。

今回はDまで突破。

C - One Quadrillion and One Dalmatians

むしろCの方が細かい計算ミスして時間食った。
テスト書きながらでもやったほうが良いんだろうか…。

26(z)、27(aa)、51(ay)、52(az)、53(ba)近辺の値が怪しかった。
1の位、10の位がaになる計算をとち狂いがち。

D - Replacing

絶対愚直に計算したらTLEだろうなぁ。まぁTLEケースも試そうかなぁと思ったけど面倒で、思いついてた方法を書いたら一発通過。
うれしみをかんじます。

E - Red Scarf

にゃんにゃん。
こうかも!って思ったときに思考ロックしちゃって他の考えに及ばなくなるのはよろしくない。
先にソース見て完全なる間違いを理解した。

A xor Bの結果は、1:奇数回出現 0:偶数回出現 の意味になる。
2進数表示(cout << std::bitset<6>(k) << endl;)しながら考えると、
すべての値をxorしたkは01110
2^4が偶数(0)、2^3が奇数(1)、2^2が奇数(1)、2^1が奇数(1)、2^0が偶数(0)回出現する。
猫②③④をxorした値が10100
①以外の出現回数で、2^4が奇数(1)、2^3が偶数(0)、2^2が奇数(1)、2^1が偶数(0)、2^0が偶数(0)回出現する。

①+②③④で出現回数をkにしたいので、
 偶数(0)と偶数(0)→出現の必要なし(0)
 奇数(1)と奇数(1)→出現の必要なし(0)
 偶数(0)と奇数(1)→出現の必要あり(1)
という変換を噛ませたい。つまりこれ、xorと同じ。
k xor ②③④すれば良し。

上記を踏まえてコメント追加。考えるべきはここだけだった。
これ突破率高かったのに超えられなかったの悔しいなぁ。

ABC170に挑んだ回

今回はD突破ならず!迷走した!

D - Not Divisible

エラトステネスの篩的なことはやってたけど、素直に計算してると時間がかかるそうな。

篩に掛けた済フラグリスト(checked)的なものを用意して、対象の値をひたすら埋めていく方が速いらしい。
数が少ないときは逆に遅いけど、多くなってもそれなりに一定っぽい?

この先早く処理するためには計算しない(フラグを取っておく)みたいな対処も必要そう。
(これに気付けなかったのでエラトステネス自体が間違いかと思って因数分解とか見てた

E - Smart Infants

↑で詰まってたので軽く見たけど面倒そうだったので撤退した。
敗因としてはmultisetとかいう便利なやつを知らなかったので、それ知ってたら存外解けたかも。rbeginで末尾の値も取れるのね。便利。
あとは「1人も園児がいない園は計算対象外」とかを読み忘れてたり、インデックスのズレが怖いなぁとかやってたり。

6月前半KPT

2回め。

前Try

月2リリース目指す。

+1
つまりこのKPT書くペースと同じくリリースできるのが目標。
今回は1.5.2リリースできてるからセーフ。

稼働時間

+1
今週はゲームやってたおかげかそれで稼いでるフシはある。
というか自分で実装したけど月1表示で平日/休日まとまるの見にくいな…。戻そう。

FighTimer利用ユーザー減ってる

保留1
減ってるねぇ。
まず減ることに対する対策も分析も入れられてない(というかそういうタスク積んでない)のでそこから。

Keep

英語の勉強続いてる

The Japan Times Alphaは契約会員ページで音声が聞けるけど、6コンテンツくらいは安定して読めるようになってきた。新聞紙面5ページ分くらい。
6/28にTOIECの無料検定もどきがあるのでそれを目標にしてみよ。

セルフKPT2回め

絶対忘れると思った。

DDDへの意識

単純にFighTimerのフォルダ構成ごちゃごちゃ問題もあったけど、まずはフォルダ整理してドメインサービスを意識してみようとしてる。なう。

books

5末でinした本読んでるけどこれ重いんだよね…。
次までに読み切れる気もしない…。
というか、どっちか読み切るのをTRYにするか。
ドメイン駆動設計読もう。

challenge

アルゴリズム実技検定

第3回アルゴリズム実技検定が無料でやってたので折角だし参加した。
結果は52点初級。
AtCoderの色と同じ区分けらしいし、そう考えると茶、一応最近の実績と妥当。
あぁ、復習しなきゃなぁ。動的計画法だこれって思ったけど、思ったからこそ逃げた問題もあったし。

趣味枠

頭痛がひどかったときにお風呂にじっくり浸かって治った後から風呂ブーム。
Androidが耐水で持ち込めたし壁にスマホ置けるようにしたし入浴剤買っちゃったり。楽しい。

games

  • 勇者の飯
    意外と毎日プレイできたし、本当にさっき一区切りなボスを倒した。

  • グノーシア
    気になってたんだけどVitaOnly…と思ったらSwitchで出るしお安かったのでついにプレイ。
    一時期人狼やってたけど対人だと言葉の強い人が勝利して好きじゃなかった部分が対AIだから後腐れもなく楽しめて良い。
    その上ストーリーも良い。演出に驚かされたり最後までプレイして色々腑に落ちる感じが良い。
    遊びやすいハードに出してくれてありがとう。これで4人開発かぁ。

  • Minecraft Dungeons
    かるーく遊べるハクスラだった。

Problem

レビューコメント消えた

後でコメント返そうと思ったけど消えてた。
コメント返せなかったの申し訳ない…。見つけたらすぐ返そう。

エンジニアとしての稼働時間減ってる

なんかやれる気力は出たけど遊ぶ気力が出ただけであって開発が進んでないよねって話。

Try

まぁ、頑張りましょうね。

ABC169に挑んだ回

今回も幸運にもD突破。
勉強したソースは残しておくもんだぜ。

B - Multiplication 2

確か 10^15 10^15 になった場合の値がおかしくて死んだ。
以下のケースに当たったら途中抜け、そうじゃなければ続行できる。
①数値リストに0がいたら答えは0
②掛け算する値が指定値超えたら-1
③a
b > 指定値 は-1 → 指定値 / a < b は-1

C - Multiplication 3

doubleの丸め誤差に殺された。
偶然double 1.98 →1.9777777…9みたいなことが起きてそのことに気づけた。
小数第2位まで有効とのことだったので、じゃあいっそ文字列で取得して/100したらいいのかとたどり着けて事なきを得た。

0.001の微小値を加算すると回避できたらしい?
https://drken1215.hatenablog.com/entry/2020/05/31/224300

D - Div Game

素因数分解した結果を保存してるmapのソースを残してたのが役立った。
AtCoder 版!マスター・オブ・整数 (素因数分解編)

同じ数字は使えないので、2の累乗だと2=2^1、4=2^2、8=2^3…。
1~nを足し合わせたときの数までが使えるので、8まで使いたいときは2^6が素因数分解に含まれてればOK。
素因数分解して、例えば例にあった24は2^3 * 3^1。x^3だと2回、x^1だと1回で計3回。
ちなみにx^2だと既出の数値を使ってしまうので1回…みたいな丸め込みが必要になる。

1~nまで足し合わせた数式リストを作って、

↑の素因数分解ソース参考にした因数分解mapを取ってきて、
因数分解した数値の乗数の回数を足してくと完成。

100で足りなかったらリスト追加で作ろう…と思ってたら意外と通ってしまった。

E - Count Median

入力例1ケースで4種類で3なのに入力例2ケースが答え9991になるって言われて頭パーンなってしまったので撤退した。
でも冷静に見たら問題を読み違えているね。かわいそう。

問題

数値X1はA1~B1の間になる。(A1=2,B1=4ならX1=2,3,4のいずれか)
数値XxはN個定義されている。
すべての組み合わせを検証して、答えの数を計算する。

理解する

解説してくれてる動画があるけど理屈がまだ理解できない…
https://www.youtube.com/watch?v=JDc-T9j7hZo

理解したかも?

重複しない答えの数を数えるだけなので、中央値の最小値と最大値がわかれば、その差分が答えになる。

例えば、例として↓。奇数個の配列を作りたかったので例題とはちょっと違います。

中央値の最大値は、XxがすべてBの場合の中央値が該当する。2,3,4→3
中央値の最小値は、XxがすべてAの場合の中央値が該当する。1,2,3→2

この例の場合は中央値が取りうる値が2~3なので、取りうる答え=3-2+1=2個。

偶数個の場合は中央値の取得条件が変わるのでそのへん注意。

というわけで、まずminとmaxのソート済み配列を作る

偶数・奇数で解答ケースを分ける。
奇数の場合は中央値は実数だけだから素直な計算になる。
例えば2と3で2個。
偶数の場合は0.5を考慮するので答えが2倍の数になる。
例えば例題ケースは3個。
maxCenter(2+3)-minCenter(1+2)+1 = 5-3+1 = 3(実態は1.5・2・2.5の3つ)

所感

なんとか理解したぞぅ…!解説動画に感謝。
一見愚直に計算しそうに見せかけてそうでもない問題って難しそう。