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