1use oint::indeterminate_eq;
2use oint::oi64;
3use oint::ou32;
4use oint::ou64;
5
6fn problem1() -> ou32 {
7 let mut sum: ou32 = 0.into();
8 for i in 0..1000 {
9 if ((i % 3) == 0) || ((i % 5) == 0) {
10 sum = sum + i;
11 }
12 }
13 return sum;
14}
15
16fn problem2() -> ou64 {
17 let mut sum: ou64 = 0.into();
18 let mut prev: ou64 = 0.into();
19 let mut next: ou64 = 1.into();
20 loop {
21 match *next {
22 None => return ou64::from(None),
23 Some(i) if i >= 4_000_000 => break,
24 Some(i) => {
25 if i % 2 == 0 {
26 sum = sum + next;
27 }
28 next = next + prev;
29 prev = i.into();
30 }
31 }
32 }
33 return sum;
34}
35
36fn problem3() -> ou64 {
37 let mut maximum: ou64 = 0.into();
38 let mut n: ou64 = 600_851_475_143.into();
39 let sqrt_n = 775_146;
40 let mut i: u64 = 3;
41 while i <= sqrt_n {
42 loop {
43 match *(n % i) {
44 None => return ou64::from(None),
45 Some(0) => {
46 maximum = maximum.max(i.into());
47 n = n / i;
48 }
49 Some(_) => break,
50 }
51 }
52 i = i + 2;
53 }
54 match *n {
55 None => return ou64::from(None),
56 Some(val) if val > 2 => maximum = maximum.max(n),
57 _ => {}
58 }
59 return maximum;
60}
61
62fn palindrome(x: u64) -> bool {
63 let x: ou64 = x.into();
64 let mut rev: ou64 = 0.into();
65 let mut temp: ou64 = x;
66 loop {
67 match *temp {
68 None => unreachable!(),
69 Some(val) if val == 0 => break,
70 Some(_) => {
71 rev = (rev * 10) + (temp % 10);
72 temp = temp / 10;
73 }
74 }
75 }
76 return indeterminate_eq!(rev, x);
77}
78
79fn problem4() -> ou64 {
80 let mut maximum = ou64::from(0);
81 for i in 100..1000 {
82 for j in 100..1000 {
83 let prod: ou64 = ou64::from(i) * ou64::from(j);
84 match *prod {
85 None => return ou64::from(None),
86 Some(val) if palindrome(val) => {
87 maximum = maximum.max(prod);
88 }
89 Some(_) => {}
90 }
91 }
92 }
93 return maximum;
94}
95
96fn problem6() -> oi64 {
97 let mut sum1: oi64 = 0.into();
98 let mut sum2: oi64 = 0.into();
99 for i in 1..101 {
100 sum1 = sum1 + oi64::from(i) * oi64::from(i);
101 sum2 = sum2 + i;
102 }
103 sum2 = sum2 * sum2;
104 return sum2 - sum1;
105}
106
107fn main() {
108 println!("problem1 {:?}", problem1());
109 println!("problem2 {:?}", problem2());
110 println!("problem3 {:?}", problem3());
111 println!("problem4 {:?}", problem4());
112 println!("problem6 {:?}", problem6());
113}