38
This commit is contained in:
@@ -0,0 +1,10 @@
|
||||
[package]
|
||||
name = "euler38"
|
||||
version = "0.1.0"
|
||||
edition = "2024"
|
||||
|
||||
[dependencies]
|
||||
|
||||
[profile.release]
|
||||
lto = "thin"
|
||||
debug = true
|
||||
@@ -0,0 +1,52 @@
|
||||
fn main() {
|
||||
let mut largest_number = 0;
|
||||
let mut largest_string = String::new();
|
||||
let mut string = String::new();
|
||||
for integer in 1..=500_000_000_usize {
|
||||
string.clear();
|
||||
for factor in 1.. {
|
||||
let number = integer * factor;
|
||||
string.push_str(&number.to_string());
|
||||
let as_number = string.parse::<usize>().unwrap();
|
||||
|
||||
if correct_length(&string) && as_number > largest_number && is_pandigital(&string) {
|
||||
largest_number = as_number;
|
||||
largest_string = string.clone();
|
||||
break;
|
||||
}
|
||||
if too_large(&string) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
println!("{largest_string}");
|
||||
}
|
||||
|
||||
fn is_pandigital(s: &str) -> bool {
|
||||
for c in '1'..='9' {
|
||||
if !s.contains(c) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
true
|
||||
}
|
||||
|
||||
fn correct_length(s: &str) -> bool {
|
||||
s.len() == 9
|
||||
}
|
||||
|
||||
fn too_large(s: &str) -> bool {
|
||||
s.len() > 9
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use crate::is_pandigital;
|
||||
|
||||
#[test]
|
||||
fn test_pandigital() {
|
||||
assert!(is_pandigital(&192384576.to_string()));
|
||||
assert!(is_pandigital(&918273645.to_string()));
|
||||
assert!(!is_pandigital(&9.to_string()));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user