some style fixes + solution 004
parent
fa570c3b3e
commit
c1dfb112db
|
@ -1,4 +1,25 @@
|
||||||
|
# This file is automatically @generated by Cargo.
|
||||||
|
# It is not intended for manual editing.
|
||||||
|
[[package]]
|
||||||
|
name = "either"
|
||||||
|
version = "1.5.3"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "euler-rust"
|
name = "euler-rust"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
|
dependencies = [
|
||||||
|
"itertools 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "itertools"
|
||||||
|
version = "0.8.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
dependencies = [
|
||||||
|
"either 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
]
|
||||||
|
|
||||||
|
[metadata]
|
||||||
|
"checksum either 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "bb1f6b1ce1c140482ea30ddd3335fc0024ac7ee112895426e0a629a6c20adfe3"
|
||||||
|
"checksum itertools 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5b8467d9c1cebe26feb08c640139247fac215782d35371ade9a2136ed6085358"
|
||||||
|
|
|
@ -4,3 +4,4 @@ version = "0.1.0"
|
||||||
authors = ["evan hemsley <evan.hemsley@gmail.com>"]
|
authors = ["evan hemsley <evan.hemsley@gmail.com>"]
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
itertools = "0.8"
|
|
@ -2,4 +2,5 @@ pub mod prime;
|
||||||
|
|
||||||
pub mod problem_001;
|
pub mod problem_001;
|
||||||
pub mod problem_002;
|
pub mod problem_002;
|
||||||
pub mod problem_003;
|
pub mod problem_003;
|
||||||
|
pub mod problem_004;
|
|
@ -11,7 +11,7 @@ fn subfactors(mut n: u64, p: u64) -> (u64, Vec<u64>) {
|
||||||
r = n % p;
|
r = n % p;
|
||||||
}
|
}
|
||||||
|
|
||||||
return (n, subfactors);
|
(n, subfactors)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn trial_factorization(mut n: u64) -> Vec<u64> {
|
pub fn trial_factorization(mut n: u64) -> Vec<u64> {
|
||||||
|
@ -39,7 +39,7 @@ pub fn trial_factorization(mut n: u64) -> Vec<u64> {
|
||||||
p += 4;
|
p += 4;
|
||||||
}
|
}
|
||||||
if n >= 1 { factors.push(n); }
|
if n >= 1 { factors.push(n); }
|
||||||
return factors;
|
factors
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
fn solution() -> i32 {
|
pub fn solution() -> i32 {
|
||||||
return (1..1000).filter( |n| (n % 3 == 0) || (n % 5 == 0)).sum();
|
(1..1000).filter( |n| (n % 3 == 0) || (n % 5 == 0)).sum()
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
|
@ -8,6 +8,6 @@ mod tests {
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn problem_001() {
|
fn problem_001() {
|
||||||
assert_eq!(solution(), 233168);
|
assert_eq!(solution(), 233_168);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,11 +21,11 @@ fn fibonacci() -> Fibonacci {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn fibonacci_sum_up_to(number: u32) -> u32 {
|
fn fibonacci_sum_up_to(number: u32) -> u32 {
|
||||||
return fibonacci().take_while(|n| n < &number).filter(|n| n % 2 == 0).sum();
|
fibonacci().take_while(|n| *n < number).filter(|n| n % 2 == 0).sum()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn solution() -> u32 {
|
pub fn solution() -> u32 {
|
||||||
return fibonacci_sum_up_to(4000000);
|
fibonacci_sum_up_to(4_000_000)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
|
@ -34,6 +34,6 @@ mod tests {
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn problem_002() {
|
fn problem_002() {
|
||||||
assert_eq!(solution(), 4613732);
|
assert_eq!(solution(), 4_613_732);
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -1,7 +1,7 @@
|
||||||
use euler::prime;
|
use euler::prime;
|
||||||
|
|
||||||
fn solution() -> Option<u64> {
|
pub fn solution() -> Option<u64> {
|
||||||
return prime::trial_factorization(600851475143).last().cloned();
|
prime::trial_factorization(600_851_475_143).last().cloned()
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
use itertools::Itertools;
|
||||||
|
|
||||||
|
fn palindrome(n: u64) -> bool {
|
||||||
|
let num_string = n.to_string();
|
||||||
|
let half = num_string.len() / 2;
|
||||||
|
|
||||||
|
num_string.bytes().take(half).eq(num_string.bytes().rev().take(half))
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn solution() -> Option<u64> {
|
||||||
|
(100..1000).tuple_combinations().map( |(a, b)| a * b ).filter( |n| palindrome(*n)).max()
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use euler::problem_004::solution;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn problem_004() {
|
||||||
|
assert_eq!(solution(), Some(906_609));
|
||||||
|
}
|
||||||
|
}
|
|
@ -1 +1,3 @@
|
||||||
|
extern crate itertools;
|
||||||
|
|
||||||
pub mod euler;
|
pub mod euler;
|
||||||
|
|
Loading…
Reference in New Issue