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