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:
parent
282ad0015b
commit
7bfc859bfc
4 changed files with 138 additions and 0 deletions
2
users/tazjin/predlozhnik/.gitignore
vendored
Normal file
2
users/tazjin/predlozhnik/.gitignore
vendored
Normal file
|
@ -0,0 +1,2 @@
|
|||
/target/
|
||||
**/*.rs.bk
|
23
users/tazjin/predlozhnik/Cargo.lock
generated
Normal file
23
users/tazjin/predlozhnik/Cargo.lock
generated
Normal 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",
|
||||
]
|
8
users/tazjin/predlozhnik/Cargo.toml
Normal file
8
users/tazjin/predlozhnik/Cargo.toml
Normal file
|
@ -0,0 +1,8 @@
|
|||
[package]
|
||||
name = "predlozhnik"
|
||||
version = "0.1.0"
|
||||
edition = "2021"
|
||||
|
||||
[dependencies]
|
||||
maplit = "1.0"
|
||||
lazy_static = "1.4"
|
105
users/tazjin/predlozhnik/src/main.rs
Normal file
105
users/tazjin/predlozhnik/src/main.rs
Normal 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{}", п);
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue