library-rs
library-rs copied to clipboard
入出力について
どうしたい?
n q
k_1 c_1
a_{1, 1} ... a_{1, k_1}
:
k_n c_n
a_{n, 1} ... a_{n, k_n}
t_1 query_1
:
t_q query_q
みたいなのを楽に読みたい? 無理か? あとは日付とかね
verify 用のやつだと、上記のは
(Vec<(i32, Vec<i32>)>, Vec<Query>)
とかにしたくなりそう
ぱぱーっとできないの?
scan! {
n: usize,
q: usize,
[
k: usize,
c: i32,
a: [i32; k],
]; n,
}
いやでも形式が違うクエリとかだとね
scan! {
qs: [
match t as i32 {
0 => QTy0(usize, i32),
1 => QTy1(usize),
_ => unreachable!(),
}; q
],
}
ほんとか?
テストが大変そうだよね stdin か String か
さっきの k, c, a は、返り値どうしたいのかな
Vec<(usize, i32, Vec<i32>)>?
a がなきゃ
scan! {
kc: [
(usize, i32); n
],
}
で楽だよね
これがないなら、
let kca: Vec<_> = (0..n)
.map(|_| {
scan! {
k: usize,
c: i32,
a: [i32; k],
}
(k, c, a)
}).collect();
とかで、内側の変数名をよしなにやるのが大変かもだけど、
scan! {
n: usize,
q: usize,
kca: [
(
k: usize,
i32,
[i32; k],
); n
],
qs: [
match t as u32 {
0 => QTy0(usize, usize),
1 => QTy1(usize, i32),
_ => !,
}; q
],
}
とかしたいかも
Vec<(,)> の中で型名があったりなかったりするのを扱うのが大変そう
本質的には Vec には限らないかもだけど
query とかはそれっぽい trait を作っちゃうべきなのかも
(i32, i32)
みたいなのはできてほしいとして、
(
k: usize,
i32,
[i32; k]
)
みたいなのは大変そう
(
a: i32,
b: i32,
)
みたいなのが非文ぽいからあれだけど
trait をよしなに derive できるのなら、QTy0 とかの後の括弧は自分では書かなくてよさそうになるかも?
DRY 的なあれ
R/W は適当に抽象化したいけど、&str でやるなら、split はしたくなくて、token で型に応じて skip_while したい
一行まるまるほしいみたいなの、あれだと無理な気がするし
https://doc.rust-lang.org/std/string/struct.String.html#method.trim_matches
https://sinkuu.github.io/api-guidelines/interoperability.html#c-rw-value
マクロは使わない感じのを書いてみた
空白でないところを str の parse に投げてるけど、適当なトレイトを作って「読みたいところまで読んで、結果と読んだ長さを返す」みたいなのを作る方がいいかも? 必要があるかというと...