master > master: code-rust - init
This commit is contained in:
		
							parent
							
								
									3338b255a1
								
							
						
					
					
						commit
						b85574cda4
					
				@ -11,15 +11,45 @@ use self::regex::Regex;
 | 
				
			|||||||
// ----------------------------------------------------------------
 | 
					// ----------------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// Constructs RegEx and panics if error.
 | 
					/// Constructs RegEx and panics if error.
 | 
				
			||||||
 | 
					#[allow(dead_code)]
 | 
				
			||||||
pub fn construct_regex(pattern: &str) -> Regex {
 | 
					pub fn construct_regex(pattern: &str) -> Regex {
 | 
				
			||||||
    return Regex::new(pattern)
 | 
					    return Regex::new(pattern)
 | 
				
			||||||
        .expect("Invalid regex construction!");
 | 
					        .expect("Invalid regex construction!");
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// ----------------------------------------------------------------
 | 
					// ----------------------------------------------------------------
 | 
				
			||||||
// METHOD hello world
 | 
					// METHODS values
 | 
				
			||||||
// ----------------------------------------------------------------
 | 
					// ----------------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub fn greet() {
 | 
					pub fn min<T>(x: T, y: T) -> T
 | 
				
			||||||
    println!("Hello world!");
 | 
					    where T: PartialOrd
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    return if y < x { y } else { x };
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// ----------------------------------------------------------------
 | 
				
			||||||
 | 
					// METHODS Vectors
 | 
				
			||||||
 | 
					// ----------------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pub fn restrict<T>(x: &mut Vec<T>, i: usize, j: usize) -> Vec<T>
 | 
				
			||||||
 | 
					    where T: Clone
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    return x[i..j].iter()
 | 
				
			||||||
 | 
					        .cloned()
 | 
				
			||||||
 | 
					        .collect::<Vec<T>>();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pub fn remove_last<T>(x: &mut Vec<T>) -> Vec<T>
 | 
				
			||||||
 | 
					    where T: Clone
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    let n = x.len();
 | 
				
			||||||
 | 
					    return restrict::<T>(x, 0, n-1);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#[allow(dead_code)]
 | 
				
			||||||
 | 
					pub fn remove_first<T>(x: &mut Vec<T>) -> Vec<T>
 | 
				
			||||||
 | 
					    where T: Clone
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    let n = x.len();
 | 
				
			||||||
 | 
					    return restrict::<T>(x, 0, n);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										72
									
								
								code/rust/src/graphs/graph.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										72
									
								
								code/rust/src/graphs/graph.rs
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,72 @@
 | 
				
			|||||||
 | 
					// ----------------------------------------------------------------
 | 
				
			||||||
 | 
					// IMPORTS
 | 
				
			||||||
 | 
					// ----------------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 | 
				
			||||||
 | 
					// CLASS Graph
 | 
				
			||||||
 | 
					// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 A data structure for graphs
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					pub struct Graph<T> {
 | 
				
			||||||
 | 
					    pub nodes: Vec<T>,
 | 
				
			||||||
 | 
					    pub edges: Vec<(T,T)>,
 | 
				
			||||||
 | 
					    #[allow(dead_code)]
 | 
				
			||||||
 | 
					    string: String,
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					impl<T> Graph<T>
 | 
				
			||||||
 | 
					where T: PartialEq + Clone + ToString {
 | 
				
			||||||
 | 
					    /// Creates new typed instance of stack.
 | 
				
			||||||
 | 
					    pub fn new(nodes: Vec<T>, edges: Vec<(T,T)>) -> Graph<T> {
 | 
				
			||||||
 | 
					        return Graph {
 | 
				
			||||||
 | 
					            nodes: nodes,
 | 
				
			||||||
 | 
					            edges: edges,
 | 
				
			||||||
 | 
					            string: String::from(""),
 | 
				
			||||||
 | 
					        };
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /// @returns number of elements in stack.
 | 
				
			||||||
 | 
					    #[allow(dead_code)]
 | 
				
			||||||
 | 
					    pub fn len(self: &Self) -> usize {
 | 
				
			||||||
 | 
					        return self.nodes.len();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /// @returns graph induced by subset of nodes
 | 
				
			||||||
 | 
					    #[allow(dead_code)]
 | 
				
			||||||
 | 
					    pub fn subgraph(self: Self, nodes: Vec<T>) -> Graph<T> {
 | 
				
			||||||
 | 
					        let nodes_ = self.nodes
 | 
				
			||||||
 | 
					            .iter()
 | 
				
			||||||
 | 
					            .filter(|&u| (nodes.contains(u)))
 | 
				
			||||||
 | 
					            .map(|u| u.clone())
 | 
				
			||||||
 | 
					            .collect::<Vec<T>>();
 | 
				
			||||||
 | 
					        let edges_ = self.edges
 | 
				
			||||||
 | 
					            .iter()
 | 
				
			||||||
 | 
					            .filter(|&(u, v)| (nodes.contains(u) && nodes.contains(v)))
 | 
				
			||||||
 | 
					            .map(|(u, v)| (u.clone(), v.clone()))
 | 
				
			||||||
 | 
					            .collect::<Vec<(T,T)>>();
 | 
				
			||||||
 | 
					        return Graph::new(nodes_, edges_);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /// @returns all successor nodes of a particular node
 | 
				
			||||||
 | 
					    pub fn successors(self: &Self, u: &T) -> Vec<T> {
 | 
				
			||||||
 | 
					        return self.edges
 | 
				
			||||||
 | 
					            .iter()
 | 
				
			||||||
 | 
					            .filter(|&(u_, _)| (*u_ == *u))
 | 
				
			||||||
 | 
					            .map(|(_, v)| (v.clone()))
 | 
				
			||||||
 | 
					            .collect::<Vec<T>>();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /// @returns all predecessors nodes of a particular node
 | 
				
			||||||
 | 
					    #[allow(dead_code)]
 | 
				
			||||||
 | 
					    pub fn predecessors(self: &Self, v: &T) -> Vec<T> {
 | 
				
			||||||
 | 
					        return self.edges
 | 
				
			||||||
 | 
					            .iter()
 | 
				
			||||||
 | 
					            .filter(|&(_, v_)| (*v_ == *v))
 | 
				
			||||||
 | 
					            .map(|(u, _)| (u.clone()))
 | 
				
			||||||
 | 
					            .collect::<Vec<T>>();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										2
									
								
								code/rust/src/graphs/mod.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								code/rust/src/graphs/mod.rs
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,2 @@
 | 
				
			|||||||
 | 
					pub mod graph;
 | 
				
			||||||
 | 
					pub mod tarjan;
 | 
				
			||||||
@ -1 +1,3 @@
 | 
				
			|||||||
pub mod core;
 | 
					pub mod core;
 | 
				
			||||||
 | 
					pub mod stacks;
 | 
				
			||||||
 | 
					pub mod graphs;
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										1
									
								
								code/rust/src/stacks/mod.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								code/rust/src/stacks/mod.rs
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					pub mod stack;
 | 
				
			||||||
							
								
								
									
										77
									
								
								code/rust/src/stacks/stack.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										77
									
								
								code/rust/src/stacks/stack.rs
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,77 @@
 | 
				
			|||||||
 | 
					// ----------------------------------------------------------------
 | 
				
			||||||
 | 
					// IMPORTS
 | 
				
			||||||
 | 
					// ----------------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use crate::core::utils;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 | 
				
			||||||
 | 
					// CLASS Stack
 | 
				
			||||||
 | 
					// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 A data structure for stacks
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					#[derive(Clone)]
 | 
				
			||||||
 | 
					pub struct Stack<T> {
 | 
				
			||||||
 | 
					    pub elements: Vec<T>,
 | 
				
			||||||
 | 
					    string: String,
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					impl<T> Stack<T>
 | 
				
			||||||
 | 
					where T: Clone + ToString {
 | 
				
			||||||
 | 
					    /// Creates new typed instance of stack.
 | 
				
			||||||
 | 
					    pub fn new() -> Stack<T> {
 | 
				
			||||||
 | 
					        return Stack {
 | 
				
			||||||
 | 
					            elements: Vec::new(),
 | 
				
			||||||
 | 
					            string: String::from(""),
 | 
				
			||||||
 | 
					        };
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /// @returns number of elements in stack.
 | 
				
			||||||
 | 
					    pub fn len(self: &Self) -> usize {
 | 
				
			||||||
 | 
					        return self.elements.len();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /// adds element to stack
 | 
				
			||||||
 | 
					    pub fn push(self: &mut Self, x: T) {
 | 
				
			||||||
 | 
					        self.elements.push(x.clone());
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /// obtains top element of stack without removing it
 | 
				
			||||||
 | 
					    pub fn top(self: &mut Self) -> T {
 | 
				
			||||||
 | 
					        let n = self.len();
 | 
				
			||||||
 | 
					        match self.elements.get(n-1) {
 | 
				
			||||||
 | 
					            Some(element) => { return element.clone(); },
 | 
				
			||||||
 | 
					            None =>  { panic!("Stack is empty!"); }
 | 
				
			||||||
 | 
					        };
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /// obtains top element of stack and removes it
 | 
				
			||||||
 | 
					    pub fn pop(self: &mut Self) -> T {
 | 
				
			||||||
 | 
					        let element: T = self.top();
 | 
				
			||||||
 | 
					        self.elements = utils::remove_last::<T>(&mut self.elements);
 | 
				
			||||||
 | 
					        return element;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /// convert entries to strings
 | 
				
			||||||
 | 
					    #[allow(dead_code)]
 | 
				
			||||||
 | 
					    fn repr(self: &Self) -> Vec<String> {
 | 
				
			||||||
 | 
					        return self.elements.iter()
 | 
				
			||||||
 | 
					            .map(|element| element.to_string())
 | 
				
			||||||
 | 
					            .collect::<Vec<String>>();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /// String representation
 | 
				
			||||||
 | 
					    #[allow(dead_code)]
 | 
				
			||||||
 | 
					    pub fn to_string(self: &mut Self) -> String {
 | 
				
			||||||
 | 
					        self.string = format!("{} |", self.repr().join("; "));
 | 
				
			||||||
 | 
					        return self.string.clone();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /// &str representation
 | 
				
			||||||
 | 
					    #[allow(dead_code)]
 | 
				
			||||||
 | 
					    pub fn as_string(self: &mut Self) -> &str {
 | 
				
			||||||
 | 
					        self.to_string();
 | 
				
			||||||
 | 
					        return self.string.as_str();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user