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