feat(tazjin/predlozhnik): check in initial list of предлоги

Change-Id: I3bc4f46964e50c8748306e579126be0192a89284
Reviewed-on: https://cl.tvl.fyi/c/depot/+/5978
Tested-by: BuildkiteCI
Reviewed-by: tazjin <tazjin@tvl.su>
This commit is contained in:
Vincent Ambo 2022-07-26 23:19:29 +03:00 committed by tazjin
parent 282ad0015b
commit 7bfc859bfc
4 changed files with 138 additions and 0 deletions

2
users/tazjin/predlozhnik/.gitignore vendored Normal file
View file

@ -0,0 +1,2 @@
/target/
**/*.rs.bk

23
users/tazjin/predlozhnik/Cargo.lock generated Normal file
View file

@ -0,0 +1,23 @@
# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
version = 3
[[package]]
name = "lazy_static"
version = "1.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
[[package]]
name = "maplit"
version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d"
[[package]]
name = "predlozhnik"
version = "0.1.0"
dependencies = [
"lazy_static",
"maplit",
]

View file

@ -0,0 +1,8 @@
[package]
name = "predlozhnik"
version = "0.1.0"
edition = "2021"
[dependencies]
maplit = "1.0"
lazy_static = "1.4"

View file

@ -0,0 +1,105 @@
use lazy_static::lazy_static;
use maplit::hashmap;
use std::collections::HashMap;
#[derive(Debug, Hash, PartialEq, Eq)]
enum Падеж {
Именительный,
Родительный,
Дательный,
Винительный,
Творительный,
Предложный,
}
impl Падеж {
const ВСЕ: [Self; 6] = [
Self::Именительный,
Self::Родительный,
Self::Дательный,
Self::Винительный,
Self::Творительный,
Self::Предложный,
];
fn вопрос(&self) -> &str {
use Падеж::*;
match self {
Именительный => "Кто? Что?",
Родительный => "Кого? Чего?",
Дательный => "Кому? Чему?",
Винительный => "Кого? Что?",
Творительный => "Кем? Чем?",
Предложный => "О ком? О чём?",
}
}
}
lazy_static! {
static ref ПОРЕДЛОГУ: HashMap<&'static str, Vec<Падеж>> = {
use Падеж::*;
hashmap! {
"без" => vec![Родительный],
"близ" => vec![Родительный],
"в" => vec![Винительный, Предложный],
"вместо" => vec![Родительный],
"вне" => vec![Родительный],
"возле" => vec![Родительный],
"вокруг" => vec![Родительный],
"вроде" => vec![Родительный],
"для" => vec![Родительный],
"до" => vec![Родительный],
"за" => vec![Винительный, Творительный],
"из" => vec![Родительный],
"из-за" => vec![Родительный],
"из-под" => vec![Родительный],
"к" => vec![Дательный],
"кроме" => vec![Родительный],
"между" => vec![Творительный, Родительный],
"на" => vec![Винительный, Предложный],
"над" => vec![Творительный],
"нет" => vec![Именительный],
"о" => vec![Винительный],
"обо" => vec![Винительный],
"около" => vec![Родительный],
"от" => vec![Родительный],
"перед" => vec![Творительный],
"по" => vec![Винительный, Дательный, Предложный],
"под" => vec![Винительный, Творительный],
"при" => vec![Предложный],
"про" => vec![Винительный],
"ради" => vec![Родительный],
"с" => vec![Родительный, Винительный, Творительный],
"сквозь" => vec![Винительный],
"среди" => vec![Родительный],
"у" => vec![Родительный],
"через" => vec![Винительный],
}
};
static ref ПОАДЕЖУ: HashMap<Падеж, Vec<&'static str>> = {
let mut m = hashmap!();
for c in Падеж::ВСЕ {
let mut предлоги: Vec<&'static str> = vec![];
for (k, v) in &*ПОРЕДЛОГУ {
if v.contains(&c) {
предлоги.push(k);
}
}
m.insert(c, предлоги);
}
m
};
}
fn main() {
for (пд, пги) in &*ПОАДЕЖУ {
println!("Падеж: {:?}", пд);
for п in пги {
println!("\t{}", п);
}
}
}