rsk0315 / library-rs

えびちゃんのライブラリです。
https://rsk0315.github.io/library-rs/nekolib/
MIT License
20 stars 0 forks source link

入出力について #7

Open rsk0315 opened 3 years ago

rsk0315 commented 3 years ago

どうしたい?

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

ほんとか?

rsk0315 commented 3 years ago

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

rsk0315 commented 3 years ago

さっきの 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 commented 3 years ago

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

rsk0315 commented 3 years ago
(i32, i32)

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

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

みたいなのは大変そう

(
  a: i32,
  b: i32,
)

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

rsk0315 commented 3 years ago

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

rsk0315 commented 3 years ago

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

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

rsk0315 commented 3 years ago

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

rsk0315 commented 3 years ago

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

rsk0315 commented 3 years ago

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

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