library-rs icon indicating copy to clipboard operation
library-rs copied to clipboard

入出力について

Open rsk0315 opened this issue 5 years ago • 10 comments

どうしたい?

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>) とかにしたくなりそう

rsk0315 avatar Sep 30 '20 17:09 rsk0315

ぱぱーっとできないの?

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
  ],
}

ほんとか?

rsk0315 avatar Sep 30 '20 17:09 rsk0315

テストが大変そうだよね stdin か String か

rsk0315 avatar Sep 30 '20 17:09 rsk0315

さっきの 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 には限らないかもだけど

rsk0315 avatar Sep 30 '20 18:09 rsk0315

query とかはそれっぽい trait を作っちゃうべきなのかも

rsk0315 avatar Sep 30 '20 18:09 rsk0315

(i32, i32)

みたいなのはできてほしいとして、

(
  k: usize,
  i32,
  [i32; k]
)

みたいなのは大変そう

(
  a: i32,
  b: i32,
)

みたいなのが非文ぽいからあれだけど

rsk0315 avatar Oct 01 '20 18:10 rsk0315

trait をよしなに derive できるのなら、QTy0 とかの後の括弧は自分では書かなくてよさそうになるかも? DRY 的なあれ

rsk0315 avatar Oct 01 '20 18:10 rsk0315

R/W は適当に抽象化したいけど、&str でやるなら、split はしたくなくて、token で型に応じて skip_while したい

一行まるまるほしいみたいなの、あれだと無理な気がするし

rsk0315 avatar Oct 01 '20 20:10 rsk0315

https://doc.rust-lang.org/std/string/struct.String.html#method.trim_matches

rsk0315 avatar Oct 01 '20 21:10 rsk0315

https://sinkuu.github.io/api-guidelines/interoperability.html#c-rw-value

rsk0315 avatar Oct 02 '20 20:10 rsk0315

マクロは使わない感じのを書いてみた

空白でないところを strparse に投げてるけど、適当なトレイトを作って「読みたいところまで読んで、結果と読んだ長さを返す」みたいなのを作る方がいいかも? 必要があるかというと...

rsk0315 avatar Oct 18 '20 21:10 rsk0315