extern mod extra;
extern mod std;
type Substr = (uint, uint);
fn sumsequence (s: &str, start: uint) -> ~[Substr] {
let mut acc = ~[];
let mut sum = 0;
for i in range(start, s.len()) {
let val = from_str(s.slice(i,i+1)).unwrap();
if sum == val {
acc.push((start, i+1));
}
sum += val;
if sum > 9 {
break;
}
}
acc
}
fn main () {
//let s = "87456481848451713265785181841515124617521496471297469154148163548464541124";
let raw_input = std::io::stdin().read_to_str();
let input = extra::arc::Arc::new(raw_input);
let mut all_results = ~[];
for i in range(0, input.get().len()) {
let clone = input.clone();
let result = do extra::future::Future::spawn { sumsequence(*clone.get(), i) };
all_results.push(result);
}
for results in all_results.mut_iter() {
for r in results.get_ref().iter() {
let &(start, end) = r;
println(input.get().slice(start, end));
}
}
}
Comments