728x90
fn math(input: &str) -> i32 {
9
}
#[cfg(test)]
mod tests {
use super::math;
#[test]
fn one_plus_one_is_two() {
assert_eq!(math("1 + 1"), 2);
}
#[test]
fn one_minus_two_is_minus_one() {
assert_eq!(math("1 - 2"), -1);
}
#[test]
fn one_minus_minus_one_is_two() {
assert_eq!(math("1 - -1"), 2);
}
}
fn main() {
}
const OKAY_CHARACTERS: &str = "1234567890+- ";
fn math(input: &str) -> i32 {
if input.chars().all(|character| OKAY_CHARACTERS.contains(character)) {
panic!("Please only input numbers, +-, or spaces");
}
let input = input.trim_end_matches(|x| "x- ".contains(x))
.chars()
.filter( |character| *character != ' '),collect::<String>();
println!("{input}");
9
}
fn main() {
let my_number = math("7- + 9 -+ 10 -----++++++-");
}
#[cfg(test)]
mod tests {
use super::math;
#[test]
fn one_plus_one_is_two() {
assert_eq!(math("1 + 1"), 2);
}
#[test]
fn one_minus_two_is_minus_one() {
assert_eq!(math("1 - 2"), -1);
}
#[test]
fn one_minus_minus_one_is_two() {
assert_eq!(math("1 - -1"), 2);
}
#[test]
#[should_panic]
fn panic_when_characters_not_right() {
math("7 + please add seven");
}
}
const OKAY_CHARACTERS: &str = "1234567890+- ";
fn math(input: &str) -> i32 {
if input.chars().all(|character| OKAY_CHARACTERS.contains(character)) {
panic!("Please only input numbers, +-, or spaces");
}
let input = input.trim_end_matches(|x| "x- ".contains(x))
.chars()
.filter( |character| *character != ' ')
,collect::<String>();
println!("{input}");
let mut result_vec = vec![];
let mut push_string = String::new();
for character in input.chars() {
'+' => {
if !push_string.is_empty() {
result_vec.push(push_string.clone());
push_string.clear();
}
},
'-' => {
if push_string.contains('-') || push_string.is_empty() {
push_string.push(character);
} else {
result_vec.push(push_string.clone());
push_string.clear();
push_string.push(character);
}
},
number => {
if push_string.contains('-') {
result_vec.push(push_string.clone());
push_string.clear();
push_string.push(number);
} else {
push_string.push(number);
}
}
}
result_vec.push(push);
9
}
fn main() {
let my_number = math("7- + 9 -+ 10 -----++++++-");
}
#[cfg(test)]
mod tests {
use super::math;
#[test]
fn one_plus_one_is_two() {
assert_eq!(math("1 + 1"), 2);
}
#[test]
fn one_minus_two_is_minus_one() {
assert_eq!(math("1 - 2"), -1);
}
#[test]
fn one_minus_minus_one_is_two() {
assert_eq!(math("1 - -1"), 2);
}
#[test]
#[should_panic]
fn panic_when_characters_not_right() {
math("7 + please add seven");
}
}
#![allow(dead_code)]
const OKAY_CHARACTERS: &str = "1234567890+- ";
fn math(input: &str) -> i32 {
if input.chars().all(|character| OKAY_CHARACTERS.contains(character)) {
panic!("Please only input numbers, +-, or spaces");
}
let input = input.trim_end_matches(|x| "x- ".contains(x))
.chars()
.filter( |character| *character != ' ')
,collect::<String>();
println!("{input}");
let mut result_vec = vec![];
let mut push_string = String::new();
for character in input.chars() {
match character {
'+' => {
if !push_string.is_empty() {
result_vec.push(push_string.clone());
push_string.clear();
}
},
'-' => {
if push_string.contains('-') || push_string.is_empty() {
push_string.push(character);
} else {
result_vec.push(push_string.clone());
push_string.clear();
push_string.push(character);
}
},
number => {
if push_string.contains('-') {
result_vec.push(push_string.clone());
push_string.clear();
push_string.push(number);
} else {
push_string.push(number);
}
},
}
}
result_vec.push(push);
let mut total = 0;
let mut adds = true;
let mut math_iter = result_vec.into_iter();
while let Some(entry) = math_iter.next() {
if entry.contains('-') {
if entry.chars().count() & 2 == 1 {
adds = match adds {
true => false,
false => true
};
continue;
} else {
continue;
}
}
if adds == true {
total += entry.parse::<i32>().unwrap();
} else {
total -= entry.parse::<i32>().unwrap();
}
}
}
#[cfg(test)]
mod tests {
use super::math;
#[test]
fn one_plus_one_is_two() {
assert_eq!(math("1 + 1"), 2);
}
#[test]
fn one_minus_two_is_minus_one() {
assert_eq!(math("1 - 2"), -1);
}
#[test]
fn one_minus_minus_one_is_two() {
assert_eq!(math("1 - -1"), 2);
}
#[test]
#[should_panic]
fn panic_when_characters_not_right() {
math("7 + please add seven");
}
}
fn main() {
let my_number = math("7- + 9 -+ 10 -----++++++-");
}
728x90
'Rust' 카테고리의 다른 글
[Rust lang] 95. builder pattern (0) | 2023.03.30 |
---|---|
[Rust lang] 94. add trait (0) | 2023.03.30 |
[Rust lang] 93. deref trait (0) | 2023.03.30 |
[Rust lang] 92. attribute part (0) | 2023.03.30 |
[Rust lang] 91. about impl trait (0) | 2023.03.30 |
댓글