SHOW:
|
|
- or go back to the newest paste.
| 1 | extern mod extra; | |
| 2 | extern mod std; | |
| 3 | ||
| 4 | type Substr = (uint, uint); | |
| 5 | ||
| 6 | fn sumsequence (s: &str, start: uint) -> ~[Substr] {
| |
| 7 | let mut acc = ~[]; | |
| 8 | let mut sum = 0; | |
| 9 | ||
| 10 | for i in range(start, s.len()) {
| |
| 11 | let val = from_str(s.slice(i,i+1)).unwrap(); | |
| 12 | ||
| 13 | if sum == val {
| |
| 14 | acc.push((start, i+1)); | |
| 15 | } | |
| 16 | sum += val; | |
| 17 | if sum > 9 {
| |
| 18 | break; | |
| 19 | } | |
| 20 | } | |
| 21 | ||
| 22 | acc | |
| 23 | } | |
| 24 | ||
| 25 | fn main () {
| |
| 26 | //let s = "87456481848451713265785181841515124617521496471297469154148163548464541124"; | |
| 27 | - | let s = std::io::stdin().read_to_str(); |
| 27 | + | let raw_input = std::io::stdin().read_to_str(); |
| 28 | let input = extra::arc::Arc::new(raw_input); | |
| 29 | let mut all_results = ~[]; | |
| 30 | - | for i in range(0, s.len()) {
|
| 30 | + | |
| 31 | - | let clone = s.clone(); |
| 31 | + | for i in range(0, input.get().len()) {
|
| 32 | - | let result = do extra::future::Future::spawn { sumsequence(clone, i) };
|
| 32 | + | let clone = input.clone(); |
| 33 | let result = do extra::future::Future::spawn { sumsequence(*clone.get(), i) };
| |
| 34 | all_results.push(result); | |
| 35 | } | |
| 36 | for results in all_results.mut_iter() {
| |
| 37 | for r in results.get_ref().iter() {
| |
| 38 | - | println(s.slice(start, end)); |
| 38 | + | |
| 39 | println(input.get().slice(start, end)); | |
| 40 | } | |
| 41 | } | |
| 42 | } |