parent
4d3ecc4bd9
commit
e88318f104
@ -0,0 +1,11 @@ |
||||
[package] |
||||
name = "day18-hard" |
||||
version = "0.1.0" |
||||
authors = ["inga-lovinde <52715130+inga-lovinde@users.noreply.github.com>"] |
||||
edition = "2018" |
||||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html |
||||
|
||||
[dependencies] |
||||
nom = "^4.2.3" |
||||
nom-peg = "0.1.1" |
@ -0,0 +1,31 @@ |
||||
use std::io::{self, BufRead}; |
||||
|
||||
#[macro_use] |
||||
extern crate nom; |
||||
extern crate nom_peg; |
||||
use nom_peg::grammar; |
||||
|
||||
fn main() { |
||||
let arithmetic = grammar! { |
||||
parse: i64 = <expr> "=" |
||||
|
||||
expr: i64 = <l: sum> (" ")* "*" (" ")* <r: expr> => { l * r } |
||||
| sum |
||||
|
||||
sum: i64 = <l: value> (" ")* "+" (" ")* <r: sum> => { l + r } |
||||
| value |
||||
|
||||
value: i64 = ("0"|"1"|"2"|"3"|"4"|"5"|"6"|"7"|"8"|"9")+ => { result.join("").parse::<i64>().unwrap() } |
||||
| "(" <expr> ")" |
||||
}; |
||||
|
||||
let mut result = 0; |
||||
let stdin = io::stdin(); |
||||
for line in stdin.lock().lines() { |
||||
let value = arithmetic.parse(&(line.unwrap() + "=")).unwrap().1; |
||||
println!("{}", value); |
||||
result += value; |
||||
} |
||||
|
||||
println!("{}", result) |
||||
} |
@ -0,0 +1,11 @@ |
||||
[package] |
||||
name = "day18" |
||||
version = "0.1.0" |
||||
authors = ["inga-lovinde <52715130+inga-lovinde@users.noreply.github.com>"] |
||||
edition = "2018" |
||||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html |
||||
|
||||
[dependencies] |
||||
nom = "^4.2.3" |
||||
nom-peg = "0.1.1" |
@ -0,0 +1,29 @@ |
||||
use std::io::{self, BufRead}; |
||||
|
||||
#[macro_use] |
||||
extern crate nom; |
||||
extern crate nom_peg; |
||||
use nom_peg::grammar; |
||||
|
||||
fn main() { |
||||
let arithmetic = grammar! { |
||||
parse: i64 = <term> "=" |
||||
|
||||
term: i64 = <l: value> (" ")* "+" (" ")* <r: term> => { r + l } |
||||
| <l: value> (" ")* "*" (" ")* <r: term> => { r * l } |
||||
| value |
||||
|
||||
value: i64 = ("0"|"1"|"2"|"3"|"4"|"5"|"6"|"7"|"8"|"9")+ => { result.join("").chars().rev().collect::<String>().parse::<i64>().unwrap() } |
||||
| ")" <term> "(" |
||||
}; |
||||
|
||||
let mut result = 0; |
||||
let stdin = io::stdin(); |
||||
for line in stdin.lock().lines() { |
||||
let value = arithmetic.parse(&(line.unwrap().chars().rev().collect::<String>() + "=")).unwrap().1; |
||||
println!("{}", value); |
||||
result += value; |
||||
} |
||||
|
||||
println!("{}", result) |
||||
} |
Loading…
Reference in new issue