Middle three digits: Difference between revisions
Content deleted Content added
m neaten up a little |
added ocaml |
||
Line 51: | Line 51: | ||
middleThreeDigits(-2002) returned: Need odd and >= 3 digits |
middleThreeDigits(-2002) returned: Need odd and >= 3 digits |
||
middleThreeDigits(0) returned: Need odd and >= 3 digits</pre> |
middleThreeDigits(0) returned: Need odd and >= 3 digits</pre> |
||
=={{header|OCaml}}== |
|||
<lang ocaml>let even x = (x land 1) <> 1 |
|||
let middle_three_digits x = |
|||
let s = string_of_int (abs x) in |
|||
let n = String.length s in |
|||
if n < 3 then failwith "need >= 3 digits" else |
|||
if even n then failwith "need odd number of digits" else |
|||
String.sub s (n / 2 - 1) 3 |
|||
let passing = [123; 12345; 1234567; 987654321; 10001; -10001; -123; -100; 100; -12345] |
|||
let failing = [1; 2; -1; -10; 2002; -2002; 0] |
|||
let print x = |
|||
let res = |
|||
try (middle_three_digits x) |
|||
with Failure e -> "failure: " ^ e |
|||
in |
|||
Printf.printf "%d: %s\n" x res |
|||
let () = |
|||
print_endline "Should pass:"; |
|||
List.iter print passing; |
|||
print_endline "Should fail:"; |
|||
List.iter print failing; |
|||
;;</lang> |
|||
{{out}} |
|||
<pre> |
|||
Should pass: |
|||
123: 123 |
|||
12345: 234 |
|||
1234567: 345 |
|||
987654321: 654 |
|||
10001: 000 |
|||
-10001: 000 |
|||
-123: 123 |
|||
-100: 100 |
|||
100: 100 |
|||
-12345: 234 |
|||
Should fail: |
|||
1: failure: need >= 3 digits |
|||
2: failure: need >= 3 digits |
|||
-1: failure: need >= 3 digits |
|||
-10: failure: need >= 3 digits |
|||
2002: failure: need odd number of digits |
|||
-2002: failure: need odd number of digits |
|||
0: failure: need >= 3 digits |
|||
</pre> |
|||
=={{header|Python}}== |
=={{header|Python}}== |