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つ)

所感

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

5月KPT

なんか毎日を漫然と過ごしてる気がして、後から色々やったよねとかいやこれあかんでしょとか洗い出すためにもセルフKPTやってみてもいいんじゃないかなって1回目。続くかなぁ。これ自身がKeep案件。区切りとしては月1だけど、それって忘れるし、週1は一人でやるには早すぎるし、月2ペースで進められるといいね。

Keep

AppleDeveloper更新した

5月末くらいで切れるはずだったのを更新。まだまだFighTimer開発頑張る。

TestCoverageを意識するようになった。

FighTimerのグラフ用のレコード抽出処理がゴミってるのでテスト書きつつパーセンテージが上がるのが楽しい。
TDDには至らない感じ。

Fightimer利用ユーザー増えてきた

ありがたいことにレビュー増えてる。本当にありがたい。
実際に使ってくれてる人も増えてきてて嬉しい。語彙力。

books

in

読了

challenge

セルフKPT

まさに今。

DDDへの興味

DDD本が良かったので実践DDD本も買った。

英文勉強に英字新聞契約した

ダラダラ本で文法とか読んでたけど頭に入らないのでThe Japan Times Alphaを契約した。
理解できなかった単語とかスラッシュリーディングとか、本だと気が引けるけど新聞なら書き込んでもいいよねの精神。
想定外だったのが毎週届いてること。月刊誌だと思ってた。
まだ週1だと読みきれてないけど、徐々にスピード上げられればいいかな。
最終的なゴールを考えられてない。TOIECでも受ける?

ABC参加した

2019/06に1回だけやって以来放置してたABCを5月分は全部出れそう(4回やった)。
根深いアルゴリズムわかってない案件多すぎるけどこれの勉強に時間割くと目的見失いそうなので挑戦できた問題を理解していくのを繰り返して伸びることにご期待ください。

趣味枠

昨今のコロナ禍でサブスクしてたチョコとか、コーヒー豆買ってゴリゴリ挽いて飲んでる。
ちゃんとしたコーヒー豆だから近所も開拓して美味しいケーキの店見つけたりした。
パンとかケーキとか、ちゃんと冷蔵庫にしまわないとカビるので猛省してください。

games

  • ディスガイアRPG
    割とプレイしてたつもりだけどシスティナ降臨倒せなくてモチベめっちゃ下がった。
  • 勇者の飯
    キャラとか世界観が好み。
    画面がびかびかしないので眠れない夜になんとなくやっちゃうし、
    放置バトル系ではないのでちゃんと遊んだ満足感がある。
    広告でないし広告風船もなくて世界観めちゃめちゃ大切にされててすき。
    稼げてる?大丈夫?
  • Helltaker
    話題のアレ。無料で配布して話題性かっさらってアートブック課金で稼ぐスタイルがかっこいい。
    キャラもBGMも和訳も全部好き。ラスボス戦だけ嫌い。
  • リングフィットアドベンチャー
    月10日分くらいがんばれてる気がする。残業があるとがんばれない。
    DL販売だけしてくれないですか。ソフト入れ替え面倒なんです。
  • ファイアーエムブレム風花雪月
    ちょっと再開したけどリングくんの圧でまたやらなくなってしまった。
  • Mindustry
    ダラダラやっちゃう。これはいけない。
  • Factorio
    Mindustryにドハマリしたのでより話題なこっち…と思ったけどこっちは肌に合わない。
    敵がグロかったり、操作性がMindustryの方が良い。

Problem

リリース回数減ってる

当初2週間に1回はリリースする予定だったけど、GWがあった5月でさえ1回しか出せてない。

  • 普通に開発テンションが上がってない
    • Atcoderとかゲームで遊んだりダラダラしてて、そっちに時間と気力が食われてる感。
  • リファクタのやりすぎ
    • テストが探り探りの実装で時間がかかる
    • 対象とした範囲が大きい
    • テストを書くことが目的になってしまってる
  • ニーズに合ってない機能で時間かかりすぎた
    • カテゴリグループ作れるようにしたけど全然使われてないね。なんなら自分もあんまり使ってないのでは。

Try

前半:機能追加・後半:前半の残り+リファクタが理想の2リリースではある。
わかっちゃいる…。欲張らない管理を目指す。

稼働時間が減ってる

リモートワークで出社退勤の時間が減ってなにかできる…と思いきや生活時間がアホになる。
多分これ解決出来たら世界平和になるんじゃないかな。

Try

平日は何らかの作業時間を3時間やることを目標としてるけど…。
なんで1日がこんなに少ないのかわからない。寝るからか。体力足りてないからか。

利用ユーザー増えない

Keepとの矛盾。
正直、なんで増えたかわからないというのと、1ヶ月のユーザー推移でひと月前と1日の利用者数があんまり変わらない=離脱して定着してない。
そのへんのモチベを保てるようななんかを実装したいね。

Try

そんな感じの機能を追加していく。

【書籍】CleanCode

書籍情報

Clean Code アジャイルソフトウェア達人の技

メモ

CleanArchitectureが既読棚に積んであるくせに読んだ記憶がない疑惑の判定で読みだしたところ、こっちの本の参照を見かけて作者同じやん!って軽く目を通してただけのはずがいつの間にか読み切ってた。
ソースコードきれいに書きたいブームのときに買ってちまちま読みつつ忘れかけてた本。
学生時代に買うとしたら気が引けるけど、業務経験出てきたり、会社に置いてあると嬉しい1冊(所感)。

クリーンコードな心がけ

第1~13章(P25~254)は1章ずつが独立しつつも1章ずつが大切なテーマについて語ってるので初心を忘れてしまったら読み返したい。
名前の付け方(2章)、コメント(4章)の即効性のある内容からエラーの書き方(7章)、システム(11章)、スレッドの並行性の話(13章)の重い話まで色々。1章あたり10~20ページくらい割いて説明されてる。
スレッド関係はよくわかってないので読み飛ばしてる。
なんかもうちょっと専門の本とか、自分の仕事に関わるようになってから読み返すと違うものが見えそうだ。

実践編

第14~16章(P255~370)はリファクタやってみました話。
つまり割とピンとこない話なので読み飛ばし。
リファクタ対象とした内容自体が読み解くのにエネルギー使うので、テスト駆動開発の方が読みやすくてTDDチャレンジもしてみたくなる。(そういえばそちらは読んだ本履歴に書いてないや)

標語

第17章「においと経験則」はたった30Pでこの本から学ぶべき問題あるソースの注意点をまとめてくれてる。全部覚えるまで毎日仕事前に1回眺める習慣付けてもいいんじゃないってくらいには大切なことが小さくまとまってる。

ABC168に挑んだ回

今回はDまで突破出来てパフォーマンス890。
ついにRateも茶色に到達しました。やったね。
今回の問題のタイトルがなんだかおしゃれで素敵。

数式が書けるプラグイン入れて記事書いてる最中は数式で表示されるけど本番だと表示されなくて悲しんでる。
そのへんは心折れてしまったのでそのままです。
WordPressでKaTex記法(≒Latex記法)で入力して数式をレンダリングする 【WP Githuber MD】

C : (Colon)

愚直なので座標計算して長針・短針の間の距離を計算してました。
でも余弦定理で計算できたそうな。なるほど。
こういう計算式についてはすっぱり忘れてるので良くない。

余弦定理

$$(三角形の面積)=\frac{(底辺)\times(高さ)}{2}$$

時針・分針=bとc、θは2つのなす角度で求まる。
角度は時針が{(H/12)+(M/60/12)} *2π、分針が{M/60}*2π
時針-分針で求まる。

引っかかりポイント

  • いつもの癖で浮動小数点の値を12.fとかFloat型にして死んだ(精度が下がる)
  • 普通にcoutすると出力桁数が足りなかったのでfixed << setprecision(20)で出力調整が必要

愚か者の解法

本戦中は座標計算してた。まぁ間違っちゃいないよ。通ったんだもん。

座標回転の計算式

D - .. (Double Dots)

BFS(幅優先探索)問題だそうな。
BFS (幅優先探索) 超入門! 〜 キューを鮮やかに使いこなす 〜

再帰で解いたけど、キューを使って解いたほうが頭良さそう。
再帰が619ms、キュー版(下)が331msだったので実行時間も優秀。

引っかかりポイント

  • 解答を入れてた配列がunordered_mapで、実行環境とABC環境で出力順が違う原因に気づかず死にまくった。

E - ∙ (Bullet)

残り10分くらいだったので諦めた。
イワシの問題。解きたかったですね、閣下。
Ai+AjとBi+Bjが~なときは~みたいな問題は先にそのケースとか計算を列挙しとけ的な知見を得たけど、肝心のその問題、何だったっけなぁ…。

いつもお世話になってる解説を参考に後でお勉強する。
(ここまで書くのに1時間かかって疲れた
(Bullet) [AtCoder Beginner Contest 168 E]

ABC167に挑んだ回

AtCoder初心者なのでまだ参加回数6回のCかD問題で死ぬ人。
その上で新しいアルゴリズム勉強して、忘れないようにメモってるだけです。

C - Skill Up

N<12だから全探索でいいよね?でやって正解できた。
買わなかったケース・買ったケースで再帰組んでます。

回答例もググってみた。
この手の重複なしの組み合わせ探索にはbit探索が使えたらしい
bit全探索について簡単にまとめる
値を1ずつ増やしてbit単位で値を見ると、確かに全パターン列挙できるね。

D - Teleporter

駄目だった。(ループをゴリ押し計算したりした)

ので、回答例をググってみて再挑戦。

ダブリングについて初めて知った。
今回みたいに同じ要素を重複して回るときには使うことになるようだ。

【書籍】ノンデザイナーズ・デザインブック

書籍情報

ノンデザイナーズ・デザインブック

メモ

伝わるデザインの基本に続いて、この手の資料作りとかで読んどくといいとお勧めされた1冊。

伝わる〜は資料作りに特価した本だけど、こちらはもっと基礎的な文章の見せ方に対するルールを定義付けた本。

大前提として翻訳本で英語に対するデザインを説明した本なので、後半のフォントの話が完全に英文向けの説明。
とはいえ、デザイン原則とか、フォントの組み合わせルールとか、日本語に対しても転じて適応できる部分はある。

デザインの原則

本の前半(10-162P)がデザインの原則→文章の見せ方の話で、この本で読んでおくべきことの大部分。

以下の話に終始している。

  • コントラスト
    要素の違う内容はくっきり違いを感じ取れるようにする
  • 反復
    類似するデザインは繰り返す

  • 整列
    データの位置は合わせる
    無闇に中央揃えしない(先頭がずれる)

  • 近接
    類似する要素は近づけてグループ化する
    関係ない要素は離す

上の文章はこの4つの要素を意識的に取り入れて書いた。
説明すると、

  • コントラスト:表題が太字になっている
  • 反復:4つの項目を同じフォーマットで提示した
  • 整列:表題の下の文字列の開始位置が全て同一である
  • 近接:要素の間に1行分の改行があり、グループが見て取れる

…みたいな。

まぁブログの描き散らかし用には面倒なのでこれ以上はやらないけれども…。

あとは色の選び方の話が少々。
でもこの辺は趣味なら自分の直感で選ぶか、配色パターン本なんてのもあるし、こういうところから選んだ方が良さそう。

この本は次に色についてしっかり考えたくなったら買おうかなって思ってる。本屋でパラ見して良さそうだったシリーズ。

FighTimer(ios/android)が緑・オレンジベースなのは趣味。オレンジって活動的でいいよねってところから一番のテーマカラーが決定。
そこから、

  • 何もしてない時間→緑
  • アクティビティのある(タイマー記録中)時間→オレンジ
  • アクティビティ期間限定の要素(リマインダー)→水色

というチョイスで、
緑×オレンジはトライアド、オレンジ×水色は補色。
考えて選んだ記憶はあるので、そう間違ってはいないはず。
 (最も、カテゴリーとかユーザーが好き放題に色を選べるのであまり意味はない。

活字

後半(163-236P)がフォントに対する話。
セリフありなしとか、大文字小文字の話とか、完全に英文の話なので結構駆け足で読んでしまった。

フォントのカテゴリー(線の強弱・セリフ・筆記体…)を覚えて、同一ページで2種類以上のフォントを利用したい場合はカテゴリーが異なるものから選ぶとコントラストが出るので良い、というルールはわかりやすい。

「英文が全部大文字だと読みにくい」は感覚的には理解してたけど、「大文字だとシルエットが全て同じだから読みにくい」の説明がとても腑に落ちた。
「FighTimer」は「g」とか「i」とか上下の形に凹凸ができるけど、
「FIGHTIMER」は上下が一直線になるから遠目に読みにくいって話。

【書籍】ドメイン駆動設計入門

書籍情報

ドメイン駆動設計入門

メモ

最近DDD勉強会#1とかをよく見るので、ちゃんと1から勉強してみようかなと買った本。
すごく大当たりな本で、最初に本家のエリック・エヴァンス本とか駆動設計本読んでたら心が折れてたんじゃないかと思う(未読)

説明はC#をベースにしてはいるけど難なく読める。
(そもそもこの手の本のソースコードをまともに読まないのだけど…

まずはDDDのなんたるかの簡単な説明があった上で、
値オブジェクト:パラメータを管理する構造体
エンティティ:内部パラメータが可変かつ同一性を持つ構造体
リポジトリ:値オブジェクト・エンティティを管理する
ドメインサービス:ふるまいを管理する
アプリケーションサービス:ユーザーに向けたユースケースを組み立てる
…の構造を丁寧に説明してる。
 (もしかしたら表現ミスとかあるかもだから、ちゃんと本読んで。

FighTimerのアーキテクチャもこれを読んだあとではあぁああしておけばよかったなぁという後悔ばかり。設計に向き直るには良い機会なのである。

「境界づけられたコンテキスト」がよく理解出来てなかったけど、「同じものを指しつつ違う役割を持った存在である」(サークルに所属するUser情報・ログインに所属するUser情報)の概念を理解出来たのは嬉しい。

とにもかくにもおすすめできる。
この調子で次は実践ドメイン駆動設計に挑戦してみたいところ。

【書籍】伝わるデザインの基本

書籍情報

伝わるデザインの基本 よい資料を作るためのレイアウトのルール

メモ

もともとは資料作るのにググった伝わるデザインのページの情報がよかったので、書籍でなにか得られないかな、と買った一冊。
正直そのページを端から端まで読み込めば書籍はなくともいいような気はするけど、資料を作った後にこの本をパラパラめくって読みにくい要素がないか確認するためには良い。

書体・文章・図・レイアウトの4章とその最後にまとめのチェックリストがあるのでさらっと読むのにも適してる。

ただこの本読んでも未だに箇条書きの表現については悩む。単純に項目挙げたいときもあるんだよね。どうしよ。

【書籍】ゲーマーズブレイン

書籍情報

ゲーマーズブレイン

メモ

「脳を理解する」から始まる科学的に人の認識を説明するPart1(全体の2/5)と「ゲームのためのUXフレームワークを説明」するPart2(残り)の二部構成。

Part1

大雑把には以下のような内容。

  • 右脳派・左脳派は根拠なし…等のよく聞く話に根拠はありませんよ、の紹介
  • わかりにくいUIと修正案の提示
  • 人の記憶の定着度の流れとそれに沿ったレベルデザインの提示
  • ゲームの動機付けの提示方法

どの章も前半に科学的に解明されている現象の説明と、後半にそれをゲームに転用するなら…の話が続く。
例えば吊り橋効果。吊り橋の上にいる緊張感を目の前にいる異性に大して緊張→恋をしていると勘違いするという話はよく聞くけれど、ロード画面が長くてイライラするのをゲームに負けてイライラしている感情と混同する、というように、別例を挙げてくれるのがわかりやすい。

Part2

ここからは実際にゲームを作る時に考える事項が挙げられる。

  • ユーザビリティについて考える
  • エンゲージアビリティ(ゲームを通して得られる経験)について考える
  • ユーザー調査の提案
  • ゲームアナリティクス

制作しているゲームがαを通過して、ある程度形になってきた頃に、そのゲームを頭に浮かべながらPart2を読むと発見があると思う。

直近ではゲームの難易度は直線ではなく、鋸の歯のようにギザギザにつけるべき、という話が刺さった。
一直線だと滑らかにユーザーが強くなってしまい、達成感が足りないが、難易度が波のように訪れると乗り越えるべき壁を感じたり、それを超えた時に強くなった達成感が得られる。(無論、難しすぎない範疇の調整で)

【書籍】ソフトウェア・テストの技法

書籍情報

ソフトウェア・テストの技法第2版

メモ

JSTQBの本が既読だったりして、余り目新しい内容はなかったのと、なんだか目が滑る…翻訳かなぁ。

多分テストを書くためのモチベーションとかを求めてるので、読みたい内容ってテストとはなにか?の基本的な部分を説明してるこれじゃない気がする。
JSTQBの方が丁寧&分厚いので、そこまで読む元気がないならこっちを読むべきなのかな。