bouzuya.hatenablog.com

ぼうずやのにっき

ABC037 / 映画の予約をした

ABC037 考察

abc037 A - 饅頭

C / MIN(A, B) (/ は切り捨て) で求められる。

https://atcoder.jp/contests/abc037/submissions/16766617

abc037 B - 編集

N, Q <= 100 なので 2 重ループ (O(NQ)) で間に合う。

https://atcoder.jp/contests/abc037/submissions/16766710

abc037 C - 総和

K, N <= 10^5 なので 2 重ループ (O(KN)) では間に合わない。区間が 1 つ右にずれるごとに K 個の和は - A_i + A_{i + k} ずつ変化する。最初に先頭から K 個の和を求めておき変化した和を合計すれば O(N) となり間に合う。

https://atcoder.jp/contests/abc037/submissions/16766899

abc037 D - 経路

値の大きいマスから小さいマスへと順に移動経路の個数を求める。理由は問題文の通りの移動で小さいマスから計算すると何度も途中の経路の計算が必要だからだ。各マスの移動経路の個数を合算すれば答えになる。

各マスについて入る辺と出る辺を調べる。出る辺がないものを順に走査する。それぞれ自身で止まる一回と自身までの移動回数を入る辺をたどった頂点に足していく。辿った辺は消していく。走査済みのものに印をつけておく。

大きいマスから小さいマスへと順に走査済みでないものがあればたどる。

最初は一番大きいところからたどれば良いかと思ったのだけど途中で途切れてしまう可能性があったので途切れるところまで辿って未走査ならそこから再開を繰り返している。

計算量が怪しいけど間に合った。

想定解はメモ化再帰のようだ。それが思いつかないから ABC178 の D を解けなかった。

https://atcoder.jp/contests/abc037/submissions/16768460


リングフィットアドベンチャーを続けている。


週末に映画 TENET を観ることにした。子どもを預けて妻とふたり結婚記念日に映画と食事でも……と考えたからだ。さっそく予約をしようと映画館のサイトを見たところ新型コロナウイルス対策で席がひとつ飛ばしになっていた。ベタベタくっつきたいわけではないのだけどふたりで行ってひとつ空けて座るというのも趣旨にてらしてもなんだかなあと思った。

ABC001 A, B, C

ABC001 A, B, C 考察

abc001 A - 積雪深差

H_1 - H_2

https://atcoder.jp/contests/abc001/submissions/16739191

abc001 B - 視程の通報

分岐して計算し整形して出力。

https://atcoder.jp/contests/abc001/submissions/16739269

abc001 C - 風力観測

愚直に分岐して計算して出力。誤差が怖いので計算順序を変えて掛け算を先にして大きくしてから割っている。

https://atcoder.jp/contests/abc001/submissions/16748305


リングフィットアドベンチャーを続けている。


涼しくなったせいか体がだるい。

2020-W37 ふりかえり

2020-W37 をふりかえる。

2020-W37 の目標 とその記事

目標。

  • ☑ 『ユースケース駆動開発実践ガイド』を読み進める
  • ☑ Corne Chocolate をつくる
  • ☑ rust-memo v0.3.0 の Issue をつくる

記事。

つくったもの

なし。

よんだもの

なし。

みたもの

その他

勉強会。なし。

おでかけ。なし。

ゲーム。リングフィットアドベンチャーを続けている。 88 日目 レベル 150 ワールド 15 。

買い物。ルンバ e5 。

体調。なんだか眠い。

育児。 Googleスマートスピーカーのウェイクワード OK Google を真似て言おうとする。おさるのジョージへの執着がひどくなってきたので禁止している。嫌なことを嫌と主張する。先週も書いたけど氷を欲しがる。写真・動画を整理していると数ヶ月で歩くときの安定感など動きの精度が上がっているのが分かった。


つらい方の週。

Corne Chocolate を組み立てた (2020-09-12) 。土曜日の半日以上をかけているので割合的に大きい。来週は実際に試していく。

ルンバ e5 を買った (2020-09-12) 。試している。特に大きな変化はないと予想している。

仕事を通じて細かい知識・経験が増えている。 Spring と MyBatis を連携させるときのあれこれ (2020-09-07) や Kotlin の infix fun (2020-09-09) など。あとは SQL UPDATE 禁止でのテーブル設計を試している。

AtCoder 。 ABC178 で惨敗。ぬるい緑 diff の問題と解き続けたからだろうか……。基本的なことができていないような……。出直しだ。来週ないし再来週から何かはじめようか……。

やりたいことがたくさんある。だけどいろいろやらずにまずは途中になっている『ユースケース駆動開発実践ガイド』を片付けよう。 rust-memo は issue を反映する週にする。

2020-W38 の目標

  • ユースケース駆動開発実践ガイド』を 9 章まで読む
  • rust-memo v0.3.0 をつくる
  • Corne Chocolate を試す

Corne Chocolate をつくった / ルンバ e5 を開封した / ARC008 A, B

Corne Chocolate をつくった (組み立てた) 。

Corne Chocolate は Corne Keyboard (https://github.com/foostan/crkbd) のひとつだ。遊舎工房の商品ページ によると ↓ らしい。

横 6 x 縦 3 キーの column staggered 配列(列方向にずらした配列) + 親指 3 キーの左右分離型キーボードです。 キー数は左右合わせて 42 個のみで非常にコンパクトな設計となっています。40%分離型キーボードの代表格である Let’s Split よりも小型であり、Iris から数字列を外したような配置になっています。 PCB は Helix をベースとしていて、ProMicro を端に実装することによる薄型化、OLED、フルカラー LED による装飾が特徴的です。 Kailh PCB ソケットに対応しており、Kailh Choc ロープロファイルスイッチの付け替えが容易に可能になっています。

今回のキーボード作成の目的は ↓ の 3 つだ。

結果: https://twitter.com/bouzuya/status/1304731862980468737

バックアップ。 Corne Cherry Light を 2020-04-02 に組み立てている。そのときは素朴に組み立てたのだけど 42 キーは使わないので小さくしたかった。使い心地は良くて毎日仕事で使っている。そこでバックアップが欲しくなった。

ロープロファイルキーキャップ。 Twitter で見かけたキーキャップ MBK Choc Low-Profile Keycaps が良さそうな形状なので試したくなった。

36 キー化。以前買った (2020-03-22) ミニルーター・ダイアモンドカッター・ホットナイフで PCB ・アクリルプレートを切断した。ボトムプレートがアクリルプレートだったのだけどきれいに切れなかった。自分で図を書いてカットを依頼するほうが良かったと思う。

気になった点。作業中のツイート https://twitter.com/bouzuya/status/1304691674698805248 。Corne Chocolate の buildguide の Kailh PCB ソケットの実装タイミングをダイオードの次にしたほうが良さそう。ぐっと押さえつけたときに表面実装が進んでいるとグラグラしてやりづらかった。

遊びが小さくぴったりとはまる感じになっていてキースイッチをはめるときに壊れそうで怖かった。

また明日以降でファームウェアも設定して使っていこうと思う。


ルンバ e5 を開封・設定した。初任給で買い (2020-09-09) 昨日届いた (2020-09-11) ものだ。

動かしたところいろいろ巻き込んで停止したりホームに戻れなかったりした。巻き込むのは床が散らかっているからだ。ルンバがない期間で戻ってしまった悪い習慣だろう。わりとかんたんにルンバが停止してしまうのは以前と同じではある。

以前と違うのはスマホアプリがあってそこに通知が来る点。ただルンバは「自分で掃除したほうが早いけど勝手にしてくれると楽」くらいの軽い気持ちで使っていくつもりなので通知に対応するつもりはない。

ベッドの下の掃除とスケジュール機能に期待している。しばらく様子を見る。


ARC008 A, B 考察

arc008 A - たこ焼き買えるかな?

10 個まとめて買うと単価が 100 円になるので少なくとも 10 個以上はまとめ買いすると良い。 10 個未満でも 7 個以上だと 15 * 7 = 105 でまとめ買いよりも高くなってしまう。まとめ買いで足りなかった個数が 7 個以上ならもう 10 個をまとめ買いすると良い。

ぼくは「すべてまとめ買いする」と「最後のまとめ買いをせずバラで買う」の安い側という求め方をした。

https://atcoder.jp/contests/arc008/submissions/16652478

arc008 B - 謎のたこ焼きおじさん

name からブロックごとの必要数を調べる。 kit からキットごとのブロックの提供数を調べる。どちらもマップや配列で保持すれば良い。次に name から得た必要なブロックごとにキットを調べる。キットにそのブロックが含まれていなければその name はつくれないため -1 を出力して抜ける。キットにそのブロックが含まれていればキットの必要数 (必要数を提供数で割って切り上げたもの) を求める。キットの必要数の最大値が答えになる。

https://atcoder.jp/contests/arc008/submissions/16652539

ルンバ e5 が届いた / AGC036 A

ルンバ e5 が届いた。明日から使おう。


イミュータブルデータモデル(入門編) を読んだ。

https://www.slideshare.net/kawasima/ss-40471672


AGC036 A 考察

agc036 A - Triangle

解説 AC 。

https://atcoder.jp/contests/agc036/submissions/16626526

三井住友信託銀行プログラミングコンテスト 2019 A, B, C, D, E / ラバーダック・デバッグ

三井住友信託銀行プログラミングコンテスト 2019 A, B, C, D, E 考察

sumitrust2019 A - November 30

翌日が 1 日なら月末日なので D_21 なら 1 そうでなければ 0 を出力すると良い。

https://atcoder.jp/contests/sumitrust2019/submissions/16603744

sumitrust2019 B - Tax Rate

最初は計算して求めようとしたものの端数の処理がわからなかった。途中まで計算して誤差の出そうな +-1 を探索した。

制約 (N <= 5 * 10^4) 的にに全探索 O(N) でも解ける。

https://atcoder.jp/contests/sumitrust2019/submissions/16603778

sumitrust2019 C - 100 to 105

X と品物の数からひとつの商品だけを買っても X を超えることはできる。おにぎりが 100 円なのでこれを買い続けることで 100 円以上の金額は帳尻合わせができる。 100 円未満の部分 A については 105 円を B 個と必要なら 101 〜 104 円のいずれか 1 個で埋められる。この B or B + 1 は最低限必要な個数 C になる。この C * 100 + A > X のときは買うことができない。

https://atcoder.jp/contests/sumitrust2019/submissions/16603808

sumitrust2019 D - Lucky PIN

N <= 3 * 10^4 なので O(N^3) で 3 桁を探索すると間に合わない。

暗証番号 X は 3 桁なので 000 <= X <= 999 の 1000 通りしかない。 1000 通りに対して O(N) で設定可能なものかを確認できる。これは 10^7 程度なので間に合う。

https://atcoder.jp/contests/sumitrust2019/submissions/16603840

sumitrust2019 E - Colorful Hats 2

解説 AC 。知識的には解けるはずだが解けなかった。

前から順に数えてそこまでのある色の帽子の数を把握しておいたほうが良さそうなのは想像できた。そこから先でどうすべきかが出てこなかった。

前から順に各帽子をかぶっている人数を保持しておく。改めて前から走査して A_i とその位置のかぶっている人数からそこでの選択肢の数を得る。 mod を考慮しつつそれらの積を取ると求められる。

https://atcoder.jp/contests/sumitrust2019/submissions/16606731


リングフィットアドベンチャーを続けている。


バーダックデバッグ (rubber duck debugging) 。テディベア効果。蒼き鋼のアルペジオ ヨタロウ キリシマ キリクマ ほぼ等身大ぬいぐるみ。

https://ja.wikipedia.org/wiki/%E3%83%A9%E3%83%90%E3%83%BC%E3%83%80%E3%83%83%E3%82%AF%E3%83%BB%E3%83%87%E3%83%90%E3%83%83%E3%82%B0 https://en.wikipedia.org/wiki/Rubber_duck_debugging

AGC018 A / ルンバ e5 / Kotlin の infix fun

AGC018 A 考察

agc018 A - Getting Difference

未証明 AC 。箱にはもともとある数字より大きい数字は入らないので A_i の最大値を M とすると K > M なら IMPOSSIBLEA_iK なら POSSIBLE 。そうでないときは A_i の最大公約数をとってそれが K を割り切れるなら POSSIBLE

最大公約数で良いと思った理由はなんとなく。 9 - 4 = 5 5 - 4 = 1 のように差が新しい数字として増えていく。増えた数字に対してさらに増やしていける。あとは 5 - 4 = 1 のように 1 が出てくれば事前に K < M を確かめれば M から引いていくだけなので POSSIBLE になる。どうしていいのかよくわからないけどどことなくユークリッドの互除法的な動きをしている。すべての数字に対して最大公約数を取れば一番細かい差 (?) が見つかるはず。それが K とあっている (割り切れる) なら OK だろうと予想した。あとは 入力例で確かめて適当に投げたら AC した。

https://atcoder.jp/contests/agc018/submissions/16586615

ひどい解き方だなあ。


ルンバ e5 を買った。壊れてから買い直さなかったのでベッドの下がホコリだらけだ。ぼくの代わりに掃除してくれる何かが必要だ。発売から 2 年以上経っているっぽいのですぐに新製品がないか心配だ。

「初任給で買った」ということにしている。転職後の最初の給与を「初任給」と呼ぶのかは知らない。


銀河英雄伝説 本伝 シーズン 4 』を観た。ひとまず終わった。いろいろな人が死んでいった。盛り上がりとしてはシーズン 2 の最後で終わると良かったのかもしれない。


Kotlin に infix fun があることをいまさら知る。

https://kotlinlang.org/docs/reference/functions.html#infix-notation


リングフィットアドベンチャーを続けている。


涼しい。冷房が要らなくなっている。