Open rsk0315 opened 3 years ago
ぱぱーっとできないの?
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 したい
一行まるまるほしいみたいなの、あれだと無理な気がするし
マクロは使わない感じのを書いてみた
空白でないところを str
の parse
に投げてるけど、適当なトレイトを作って「読みたいところまで読んで、結果と読んだ長さを返す」みたいなのを作る方がいいかも? 必要があるかというと...
どうしたい?
みたいなのを楽に読みたい? 無理か? あとは日付とかね
verify 用のやつだと、上記のは
(Vec<(i32, Vec<i32>)>, Vec<Query>)
とかにしたくなりそう