Add code
This commit is contained in:
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
/target
|
||||
5
Cargo.lock
generated
Normal file
5
Cargo.lock
generated
Normal file
@@ -0,0 +1,5 @@
|
||||
# This file is automatically @generated by Cargo.
|
||||
# It is not intended for manual editing.
|
||||
[[package]]
|
||||
name = "stellenteilerraetsel"
|
||||
version = "0.1.0"
|
||||
9
Cargo.toml
Normal file
9
Cargo.toml
Normal file
@@ -0,0 +1,9 @@
|
||||
[package]
|
||||
name = "stellenteilerraetsel"
|
||||
version = "0.1.0"
|
||||
authors = ["Tilman Hoffbauer <tilman.hoffbauer@juforum.de>"]
|
||||
edition = "2018"
|
||||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[dependencies]
|
||||
11
README.md
Normal file
11
README.md
Normal file
@@ -0,0 +1,11 @@
|
||||
# Stellenteiler-Rätsel
|
||||
|
||||
*Finde eine Zahl in einer Basis n, wo die erste Stelle sich durch 1, die erste und zweite Stelle durch 2, ..., die erste bis n-te Stelle sich durch n teilen lässt.*
|
||||
|
||||
Lösung in Rust implementiert. Auf einem Ryzen 5 2700 mit 16 GB RAM getestet. Programmausführung per Cargo:
|
||||
|
||||
```
|
||||
cargo run --release
|
||||
```
|
||||
|
||||
Zur Installation von Rust siehe rustup.
|
||||
29
output.txt
Normal file
29
output.txt
Normal file
@@ -0,0 +1,29 @@
|
||||
Basis 2: [2]
|
||||
Basis 3: []
|
||||
Basis 4: [108, 228]
|
||||
Basis 5: []
|
||||
Basis 6: [13710, 44790]
|
||||
Basis 7: []
|
||||
Basis 8: [6996920, 11128712, 12306056]
|
||||
Basis 9: []
|
||||
Basis 10: [3816547290]
|
||||
Basis 11: []
|
||||
Basis 12: []
|
||||
Basis 13: []
|
||||
Basis 14: [7838911147538198]
|
||||
Basis 15: []
|
||||
Basis 16: []
|
||||
Basis 17: []
|
||||
Basis 18: []
|
||||
Basis 19: []
|
||||
Basis 20: []
|
||||
Basis 21: []
|
||||
Basis 22: []
|
||||
Basis 23: []
|
||||
Basis 24: []
|
||||
Basis 25: []
|
||||
Basis 26: []
|
||||
Basis 27: []
|
||||
Basis 28: []
|
||||
|
||||
-- out of memory --
|
||||
22
src/main.rs
Normal file
22
src/main.rs
Normal file
@@ -0,0 +1,22 @@
|
||||
fn main() {
|
||||
for base in 2..=64 {
|
||||
println!("Basis {}: {:?}", base, solve(base));
|
||||
}
|
||||
}
|
||||
|
||||
fn solve(base: u128) -> Vec<u128> {
|
||||
let digits: Vec<u128> = (0..base).collect();
|
||||
let mut candidates = vec![(0, digits)];
|
||||
for _ in 0..base {
|
||||
candidates = candidates
|
||||
.into_iter()
|
||||
.flat_map(|(stumb, left)| left.clone().into_iter().map(move |digit| {
|
||||
let mut next_left: Vec<u128> = left.clone();
|
||||
next_left.retain(|d| *d != digit);
|
||||
(stumb * base + digit, next_left)
|
||||
}))
|
||||
.filter(|(number, left)| number % (base - (left.len() as u128)) == 0)
|
||||
.collect();
|
||||
}
|
||||
candidates.into_iter().map(|(number, _)| number).collect()
|
||||
}
|
||||
Reference in New Issue
Block a user