2023-03-07 bouzuya/nostr-user-discovery 0.1.0 をつくった / PAST#11 の J を解いた
bouzuya/nostr-user-discovery 0.1.0 をつくった。
NIP-05 に従って internet-identifier を nostr key (public key) に解決するコマンド。 https://github.com/nostr-protocol/nips/blob/master/05.md
使用例は↓。
$ nostr-user-discovery b@bouzuya.net
npub16ysnnfr4lge38jrp0ptt762wmjvr5zyupvvqyaa3xl8aahjhrxtqa3uadg
インストールは cargo
を使うか docker
を使う。詳細はリポジトリの README を参照。
Rust で書いている。定番のクレートを使っている。 crates:anyhow, crates:clap, crates:regex, crates:reqwest, crates:serde, crates:tokio 。固有なものとしては crates:bech32 と crates:secp256k1 。それぞれ npub...
な形式への変換や鍵の扱いのために使っている。 crates:nostr を使う手もあったけど大げさな気がしたので削ってみた。
他のクライアントで検索欄にでも実装されている 1 機能だと思うので、わざわざインストールして使うほどのものではなさそうだけど、切り出しておくのも良いかと思ってつくってみた。
今後の展開などは特にない。類似機能を単機能の Web アプリケーションとするかもしれない。その場合でも別リポジトリ・派生プロジェクトになりそう。
PAST #11 第11回 アルゴリズム実技検定 過去問 の J を解いた。
- J - 完全週休二日制
https://atcoder.jp/contests/past202206-open/tasks/past202206_j
- 提出: https://atcoder.jp/contests/past202206-open/submissions/39518098
- 2022-01-01/9999-12-31 は雑に数えても
365 * 8000 = 2_920_000
程度 - すべての日付を走査して条件を満たしているものを数えても間に合う
use proconio::{input, marker::Chars};
fn main() {
input! {
s: Chars,
t: Chars,
};
let s_y = s[0..4].iter().collect::<String>().parse::<usize>().unwrap();
let s_m = s[5..7].iter().collect::<String>().parse::<usize>().unwrap();
let s_d = s[8..10]
.iter()
.collect::<String>()
.parse::<usize>()
.unwrap();
let t_y = t[0..4].iter().collect::<String>().parse::<usize>().unwrap();
let t_m = t[5..7].iter().collect::<String>().parse::<usize>().unwrap();
let t_d = t[8..10]
.iter()
.collect::<String>()
.parse::<usize>()
.unwrap();
let mut count = 0_usize;
let mut weekday = 5;
let mut is_in = false;
for y in 2022..=9999 {
let is_leap_year = (y % 400 == 0) || (y % 4 == 0 && y % 100 != 0);
for m in 1..=12 {
let days_of_month = vec![
0,
31,
if is_leap_year { 29 } else { 28 },
31,
30,
31,
30,
31,
31,
30,
31,
30,
31,
];
for d in 1..=days_of_month[m] {
if y == s_y && m == s_m && d == s_d {
is_in = true;
}
if is_in && (weekday == 5 || weekday == 6) {
count += 1;
}
if y == t_y && m == t_m && d == t_d {
is_in = false;
}
weekday += 1;
weekday %= 7;
}
}
}
println!("{}", count);
}
2023-03-05 に AtCoder の Submission をしていないことに気づいた。手元でテストして満足して送信していなかった模様……。悲しい。
昼休みに『そーだいさんと並河さんに聞くエンジニアキャリア論〜30歳からの非連続的な成長を考える〜』 https://findy.connpass.com/event/274644/ に参加した。
今日のコミット。