fix: 重构代码目录结构
This commit is contained in:
parent
3bdadeb81e
commit
dc5a7e3c26
|
|
@ -42,6 +42,13 @@ dependencies = [
|
||||||
"scopeguard",
|
"scopeguard",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "lottery"
|
||||||
|
version = "1.0.0"
|
||||||
|
dependencies = [
|
||||||
|
"pyo3",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "memoffset"
|
name = "memoffset"
|
||||||
version = "0.9.0"
|
version = "0.9.0"
|
||||||
|
|
@ -80,13 +87,6 @@ dependencies = [
|
||||||
"windows-targets",
|
"windows-targets",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "pls"
|
|
||||||
version = "0.1.0"
|
|
||||||
dependencies = [
|
|
||||||
"pyo3",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "proc-macro2"
|
name = "proc-macro2"
|
||||||
version = "1.0.78"
|
version = "1.0.78"
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,11 @@
|
||||||
[package]
|
[package]
|
||||||
name = "pls"
|
name = "lottery"
|
||||||
version = "0.1.0"
|
version = "1.0.0"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
|
|
||||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
[lib]
|
[lib]
|
||||||
name = "pls"
|
name = "lottery"
|
||||||
crate-type = ["cdylib"]
|
crate-type = ["cdylib"]
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
|
|
||||||
135
src/lib.rs
135
src/lib.rs
|
|
@ -1,139 +1,10 @@
|
||||||
use std::collections::{HashMap, HashSet};
|
mod pls;
|
||||||
|
|
||||||
use pyo3::prelude::*;
|
use pyo3::prelude::*;
|
||||||
|
|
||||||
/// Formats the sum of two numbers as string.
|
|
||||||
#[pyfunction]
|
|
||||||
fn get_numbers_by_sum(sum : u32, group_type: Option<u32>) -> PyResult<Vec<String>> {
|
|
||||||
let mut list: Vec<String> = Vec::new();
|
|
||||||
for i in 0..1000 {
|
|
||||||
let s = format!("{:03}", i);
|
|
||||||
match group_type {
|
|
||||||
Some(g) => {
|
|
||||||
let set :HashSet<char> = HashSet::from_iter(s.chars().into_iter());
|
|
||||||
if g == 1 && set.len() == 1 {
|
|
||||||
list.push(s);
|
|
||||||
}else if g == 3 && set.len() == 2 {
|
|
||||||
list.push(s);
|
|
||||||
} else if g == 6 && set.len() == 3 {
|
|
||||||
list.push(s);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
None => {
|
|
||||||
list.push(s);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
let mut m : HashMap<u32, HashSet<String>> = HashMap::new();
|
|
||||||
for i in &list {
|
|
||||||
let nums: Vec<u32> = i.chars().map(|c| c.to_digit(10).unwrap()).collect();
|
|
||||||
let total: u32 = nums.iter().sum();
|
|
||||||
// println!("{:?}", total);
|
|
||||||
let mut chars = i.chars().collect::<Vec<_>>();
|
|
||||||
chars.sort_by(|a, b| a.cmp(b));
|
|
||||||
|
|
||||||
let s: String = chars.into_iter().collect();
|
|
||||||
// println!("{}", s);
|
|
||||||
let v = m.get(&total);
|
|
||||||
match v {
|
|
||||||
Some(v) => {
|
|
||||||
let mut v = v.clone();
|
|
||||||
v.insert(s);
|
|
||||||
m.insert(total, v);
|
|
||||||
},
|
|
||||||
None => {
|
|
||||||
let mut v = HashSet::new();
|
|
||||||
v.insert(s);
|
|
||||||
m.insert(total, v);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// println!("{:?}", m);
|
|
||||||
let mut result = Vec::new();
|
|
||||||
let values = m.get(&sum);
|
|
||||||
match values {
|
|
||||||
Some(values) => {
|
|
||||||
for i in values.into_iter() {
|
|
||||||
result.push(i.clone());
|
|
||||||
}
|
|
||||||
},
|
|
||||||
None => (),
|
|
||||||
}
|
|
||||||
|
|
||||||
result.sort_by(|x, y| x.cmp(y));
|
|
||||||
|
|
||||||
Ok(result)
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
#[pyfunction]
|
|
||||||
fn get_numbers_by_span(span: u32, group_type: Option<u32>) -> PyResult<Vec<String>> {
|
|
||||||
let mut list: Vec<String> = Vec::new();
|
|
||||||
for i in 0..1000 {
|
|
||||||
let s = format!("{:03}", i);
|
|
||||||
match group_type {
|
|
||||||
Some(g) => {
|
|
||||||
let set :HashSet<char> = HashSet::from_iter(s.chars().into_iter());
|
|
||||||
if g == 1 && set.len() == 1 {
|
|
||||||
list.push(s);
|
|
||||||
}else if g == 3 && set.len() == 2 {
|
|
||||||
list.push(s);
|
|
||||||
} else if g == 6 && set.len() == 3 {
|
|
||||||
list.push(s);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
None => {
|
|
||||||
list.push(s);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
let mut m : HashMap<u32, HashSet<String>> = HashMap::new();
|
|
||||||
for i in &list {
|
|
||||||
let nums: Vec<u32> = i.chars().map(|c| c.to_digit(10).unwrap()).collect();
|
|
||||||
let diff = nums.iter().max().unwrap() - nums.iter().min().unwrap();
|
|
||||||
|
|
||||||
let mut chars = i.chars().collect::<Vec<_>>();
|
|
||||||
chars.sort_by(|a, b| a.cmp(b));
|
|
||||||
|
|
||||||
let s: String = chars.into_iter().collect();
|
|
||||||
|
|
||||||
|
|
||||||
let v = m.get(&diff);
|
|
||||||
match v {
|
|
||||||
Some(v) => {
|
|
||||||
let mut v = v.clone();
|
|
||||||
v.insert(s);
|
|
||||||
m.insert(diff, v);
|
|
||||||
},
|
|
||||||
None => {
|
|
||||||
let mut v = HashSet::new();
|
|
||||||
v.insert(s);
|
|
||||||
m.insert(diff, v);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
let mut result: Vec<String> = Vec::new();
|
|
||||||
let values = m.get(&span);
|
|
||||||
match values {
|
|
||||||
Some(values) => {
|
|
||||||
for i in values.into_iter() {
|
|
||||||
result.push(i.clone());
|
|
||||||
}
|
|
||||||
},
|
|
||||||
None => (),
|
|
||||||
}
|
|
||||||
|
|
||||||
result.sort_by(|x, y| x.cmp(y));
|
|
||||||
|
|
||||||
Ok(result)
|
|
||||||
}
|
|
||||||
|
|
||||||
/// A Python module implemented in Rust.
|
/// A Python module implemented in Rust.
|
||||||
#[pymodule]
|
#[pymodule]
|
||||||
fn pls(_py: Python, m: &PyModule) -> PyResult<()> {
|
fn lottery(py: Python, m: &PyModule) -> PyResult<()> {
|
||||||
m.add_function(wrap_pyfunction!(get_numbers_by_sum, m)?)?;
|
pls::register_pls_mod(py, m)?;
|
||||||
m.add_function(wrap_pyfunction!(get_numbers_by_span, m)?)?;
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,140 @@
|
||||||
|
use std::collections::{HashMap, HashSet};
|
||||||
|
|
||||||
|
use pyo3::prelude::*;
|
||||||
|
|
||||||
|
/// Formats the sum of two numbers as string.
|
||||||
|
#[pyfunction]
|
||||||
|
pub fn get_numbers_by_sum(sum : u32, group_type: Option<u32>) -> PyResult<Vec<String>> {
|
||||||
|
let mut list: Vec<String> = Vec::new();
|
||||||
|
for i in 0..1000 {
|
||||||
|
let s = format!("{:03}", i);
|
||||||
|
match group_type {
|
||||||
|
Some(g) => {
|
||||||
|
let set :HashSet<char> = HashSet::from_iter(s.chars().into_iter());
|
||||||
|
if g == 1 && set.len() == 1 {
|
||||||
|
list.push(s);
|
||||||
|
}else if g == 3 && set.len() == 2 {
|
||||||
|
list.push(s);
|
||||||
|
} else if g == 6 && set.len() == 3 {
|
||||||
|
list.push(s);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
None => {
|
||||||
|
list.push(s);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
let mut m : HashMap<u32, HashSet<String>> = HashMap::new();
|
||||||
|
for i in &list {
|
||||||
|
let nums: Vec<u32> = i.chars().map(|c| c.to_digit(10).unwrap()).collect();
|
||||||
|
let total: u32 = nums.iter().sum();
|
||||||
|
// println!("{:?}", total);
|
||||||
|
let mut chars = i.chars().collect::<Vec<_>>();
|
||||||
|
chars.sort_by(|a, b| a.cmp(b));
|
||||||
|
|
||||||
|
let s: String = chars.into_iter().collect();
|
||||||
|
// println!("{}", s);
|
||||||
|
let v = m.get(&total);
|
||||||
|
match v {
|
||||||
|
Some(v) => {
|
||||||
|
let mut v = v.clone();
|
||||||
|
v.insert(s);
|
||||||
|
m.insert(total, v);
|
||||||
|
},
|
||||||
|
None => {
|
||||||
|
let mut v = HashSet::new();
|
||||||
|
v.insert(s);
|
||||||
|
m.insert(total, v);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// println!("{:?}", m);
|
||||||
|
let mut result = Vec::new();
|
||||||
|
let values = m.get(&sum);
|
||||||
|
match values {
|
||||||
|
Some(values) => {
|
||||||
|
for i in values.into_iter() {
|
||||||
|
result.push(i.clone());
|
||||||
|
}
|
||||||
|
},
|
||||||
|
None => (),
|
||||||
|
}
|
||||||
|
|
||||||
|
result.sort_by(|x, y| x.cmp(y));
|
||||||
|
|
||||||
|
Ok(result)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#[pyfunction]
|
||||||
|
pub fn get_numbers_by_span(span: u32, group_type: Option<u32>) -> PyResult<Vec<String>> {
|
||||||
|
let mut list: Vec<String> = Vec::new();
|
||||||
|
for i in 0..1000 {
|
||||||
|
let s = format!("{:03}", i);
|
||||||
|
match group_type {
|
||||||
|
Some(g) => {
|
||||||
|
let set :HashSet<char> = HashSet::from_iter(s.chars().into_iter());
|
||||||
|
if g == 1 && set.len() == 1 {
|
||||||
|
list.push(s);
|
||||||
|
}else if g == 3 && set.len() == 2 {
|
||||||
|
list.push(s);
|
||||||
|
} else if g == 6 && set.len() == 3 {
|
||||||
|
list.push(s);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
None => {
|
||||||
|
list.push(s);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
let mut m : HashMap<u32, HashSet<String>> = HashMap::new();
|
||||||
|
for i in &list {
|
||||||
|
let nums: Vec<u32> = i.chars().map(|c| c.to_digit(10).unwrap()).collect();
|
||||||
|
let diff = nums.iter().max().unwrap() - nums.iter().min().unwrap();
|
||||||
|
|
||||||
|
let mut chars = i.chars().collect::<Vec<_>>();
|
||||||
|
chars.sort_by(|a, b| a.cmp(b));
|
||||||
|
|
||||||
|
let s: String = chars.into_iter().collect();
|
||||||
|
|
||||||
|
|
||||||
|
let v = m.get(&diff);
|
||||||
|
match v {
|
||||||
|
Some(v) => {
|
||||||
|
let mut v = v.clone();
|
||||||
|
v.insert(s);
|
||||||
|
m.insert(diff, v);
|
||||||
|
},
|
||||||
|
None => {
|
||||||
|
let mut v = HashSet::new();
|
||||||
|
v.insert(s);
|
||||||
|
m.insert(diff, v);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
let mut result: Vec<String> = Vec::new();
|
||||||
|
let values = m.get(&span);
|
||||||
|
match values {
|
||||||
|
Some(values) => {
|
||||||
|
for i in values.into_iter() {
|
||||||
|
result.push(i.clone());
|
||||||
|
}
|
||||||
|
},
|
||||||
|
None => (),
|
||||||
|
}
|
||||||
|
|
||||||
|
result.sort_by(|x, y| x.cmp(y));
|
||||||
|
|
||||||
|
Ok(result)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn register_pls_mod(py: Python <'_>, parent_mod: &PyModule) -> PyResult<()> {
|
||||||
|
let child_mod = PyModule::new(py, "pls")?;
|
||||||
|
child_mod.add_function(wrap_pyfunction!(get_numbers_by_span, child_mod)?)?;
|
||||||
|
child_mod.add_function(wrap_pyfunction!(get_numbers_by_sum, child_mod)?)?;
|
||||||
|
parent_mod.add_submodule(child_mod)?;
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue