diff options
author | Vincent Ambo <mail@tazj.in> | 2022-07-26T20·19+0300 |
---|---|---|
committer | tazjin <tazjin@tvl.su> | 2022-07-27T21·54+0000 |
commit | 7bfc859bfce91d8a33b829e439141269ea6647d4 (patch) | |
tree | f7997a83bc2c4836df3858b906a410caad479079 /users/tazjin/predlozhnik/src/main.rs | |
parent | 282ad0015b85df11a686d4fe3f8da9975210206b (diff) |
feat(tazjin/predlozhnik): check in initial list of предлоги r/4323
Change-Id: I3bc4f46964e50c8748306e579126be0192a89284 Reviewed-on: https://cl.tvl.fyi/c/depot/+/5978 Tested-by: BuildkiteCI Reviewed-by: tazjin <tazjin@tvl.su>
Diffstat (limited to 'users/tazjin/predlozhnik/src/main.rs')
-rw-r--r-- | users/tazjin/predlozhnik/src/main.rs | 105 |
1 files changed, 105 insertions, 0 deletions
diff --git a/users/tazjin/predlozhnik/src/main.rs b/users/tazjin/predlozhnik/src/main.rs new file mode 100644 index 000000000000..73b19201fbb4 --- /dev/null +++ b/users/tazjin/predlozhnik/src/main.rs @@ -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{}", п); + } + } +} |