2023-03-01 bouzuya/nostr-keyconv 0.1.0 をつくった / ABC152 の A, B, C, D を解いた
bouzuya/nostr-keyconv 0.1.0 をつくった。
nostr-keyconv は nostr で使う public key / private key / event id の bech32 表記 (NIP-19) と hex を相互変換するためのコマンドラインツール。使用例は以下。
$ nostr-keyconv npub10elfcs4fr0l0r8af98jlmgdh9c8tcxjvz9qkw038js35mp4dma8qzvjptg
7e7e9c42a91bfef19fa929e5fda1b72e0ebc1a4c1141673e2794234d86addf4e
$ nostr-keyconv nsec1vl029mgpspedva04g90vltkh6fvh240zqtv9k0t9af8935ke9laqsnlfe5
67dea2ed018072d675f5415ecfaed7d2597555e202d85b3d65ea4e58d2d92ffa
$ nostr-keyconv note1paq6fdap00vkkxch74hxkkhjldvjtkwa6u23as2cpc92h5ghxnmqf7eyg4
0f41a4b7a17bd96b1b17f56e6b5af2fb5925d9ddd7151ec1580e0aabd11734f6
$ nostr-keyconv --prefix=npub 3bf0c63fcb93463407af97a5e5ee64fa883d107ef9e558472c4eb9aaaefa459d
npub180cvv07tjdrrgpa0j7j7tmnyl2yr6yr7l8j4s3evf6u64th6gkwsyjh6w6
$ nostr-keyconv --prefix=nsec 67dea2ed018072d675f5415ecfaed7d2597555e202d85b3d65ea4e58d2d92ffa
nsec1vl029mgpspedva04g90vltkh6fvh240zqtv9k0t9af8935ke9laqsnlfe5
$ nostr-keyconv --prefix=note 0f41a4b7a17bd96b1b17f56e6b5af2fb5925d9ddd7151ec1580e0aabd11734f6
note1paq6fdap00vkkxch74hxkkhjldvjtkwa6u23as2cpc92h5ghxnmqf7eyg4
既存のツールは多々あると思う。けど NIP-05 の設定時に npub -> hex が欲しくなったときに、さっとつくれたので手直してして公開することにした。
プログラミング言語は Rust で、ライブラリに crates:nostr を使っている。あとは定番の crates:clap, crates:anyhow を使っている。
NIP-19 の bech32 から hex は何のヒントもなく変換できるが、 hex から NIP逆変換のときにどう指定すべきかすこし迷った。
Web アプリケーション版も用意しておいても良さそう (既にあると思うけど) 。
このアプリケーションの話ではないけど、今回は bouzuya/rust-sandbox の外に出してみた。手軽ではあるのだけど、リポジトリをひとつにまとめるのも良くない気がしてきたので。このことについてはまた別で書くかもしれない。
ABC152 : AtCoder Beginner Contest 152 の A, B, C, D を解いた。
- A - AC or WA https://atcoder.jp/contests/abc152/tasks/abc152_a
- B - Comparing Strings
https://atcoder.jp/contests/abc152/tasks/abc152_b
- 提出: https://atcoder.jp/contests/abc152/submissions/39339216
a, b <= 9
と小さいのでa.to_string().repeat(b)
のように文字列をつくって比較すれば良い
- C - Low Elements
https://atcoder.jp/contests/abc152/tasks/abc152_c
- 提出: https://atcoder.jp/contests/abc152/submissions/39339325
- 要するに
P_i
がそこまでの最小値なら良いので先頭から順に最小値を保持しながら走査して更新されたタイミングで +1 すれば答えになる
- D - Handstand 2
https://atcoder.jp/contests/abc152/tasks/abc152_d
- 提出: https://atcoder.jp/contests/abc152/submissions/39339659
- 先頭と末尾の組み合わせごとの個数を求めておけば後は掛け算で求められる
use proconio::input;
fn main() {
input! {
n: usize,
};
let mut count = vec![vec![0_usize; 10]; 10];
for i in 1..=n {
let chars = i.to_string().chars().collect::<Vec<char>>();
let first = (*chars.first().unwrap() as u8 - b'0') as usize;
let last = (*chars.last().unwrap() as u8 - b'0') as usize;
count[first][last] += 1;
}
let mut ans = 0_usize;
for i in 0..=9 {
for j in 0..=9 {
ans += count[i][j] * count[j][i];
}
}
println!("{}", ans);
}
今日のコミット。