2024-01-30 bouzuya/firestore-structured-query 0.1.0, 0.2.0 をつくった / ABC218 D
bouzuya/firestore-structured-query 0.1.0, 0.2.0 をつくった。
firestore-structured-query は Rust から Firestore の RunQueryRequest のパラメーターに使用する StructuredQuery を構築するための helper を提供する crate 。
現状は README にあるとおり、 where
と order_by
のためのものしか生成できない。
#[test]
fn test_simple_example() -> firestore_structured_query::Result<()> {
use firestore_structured_query::{
FieldPath, FieldPathFilterExt as _, FieldPathOrderExt as _, Filter,
};
use google_api_proto::google::firestore::v1::StructuredQuery;
let _ = StructuredQuery {
select: None,
from: vec![],
r#where: Some(
Filter::and([
FieldPath::raw("field1").less_than(&1)?,
FieldPath::raw("field2").less_than_or_equal(&2)?,
FieldPath::raw("field3").greater_than(&3)?,
FieldPath::raw("field4").greater_than_or_equal(&4)?,
FieldPath::raw("field5").equal(&5)?,
FieldPath::raw("field6").not_equal(&6)?,
FieldPath::raw("field7").array_contains(&7)?,
FieldPath::raw("field8").r#in(&[8])?,
FieldPath::raw("field9").array_contains_any(&[9])?,
FieldPath::raw("field10").not_in(&[10])?,
Filter::or([
FieldPath::raw("f").equal(&"a")?,
FieldPath::raw("f").equal(&"b")?,
]),
])
.into(),
),
order_by: vec![
FieldPath::raw("field1").ascending(),
FieldPath::raw("field2").descending(),
],
start_at: None,
end_at: None,
offset: 0_i32,
limit: None,
};
Ok(())
}
最終的には StructuredQuery を生成するものにしようかと思っている。
ドキュメントコメントもついていないのでそちらも書かないといけない。
ABC218 : AtCoder Beginner Contest 218
- D - Rectangles
https://atcoder.jp/contests/abc218/tasks/abc218_d
- 提出: https://atcoder.jp/contests/abc218/submissions/49818436
- 2 点を選べば x / y 軸に並行な辺をもつ長方形は決まるので
O(N^2)
で間に合う
use std::collections::HashSet;
use proconio::input;
fn main() {
input! {
n: usize,
xy: [(i64, i64); n],
};
let mut ans = HashSet::new();
let set = xy.iter().collect::<std::collections::HashSet<_>>();
for i in 0..n {
let (x_i, y_i) = xy[i];
for j in i + 1..n {
let (x_j, y_j) = xy[j];
if x_i == x_j || y_i == y_j {
continue;
}
if set.contains(&(x_i, y_j)) && set.contains(&(x_j, y_i)) {
ans.insert((x_i.min(x_j), y_i.min(y_j), x_i.max(x_j), y_i.max(y_j)));
}
}
}
println!("{}", ans.len());
}
今日のコミット。