Middle three digits: Difference between revisions

Content added Content deleted
(+ second D entry)
(Add Rust)
Line 303: Line 303:
middle_three_digits(0) returned: AssertionError('Need odd and >= 3 digits',)
middle_three_digits(0) returned: AssertionError('Need odd and >= 3 digits',)
>>> </lang>
>>> </lang>

=={{header|Rust}}==
<lang rust>fn middle_three_digits(x: int) -> Result<~str, ~str> {
let s = int::abs(x).to_str();
let len = s.len();
if len < 3 {
Err(~"Too short")
} else if len % 2 == 0 {
Err(~"Even number of digits")
} else {
Ok(s.slice(len/2 - 1, len/2 + 2))
}
}

fn print_result(x: int) {
io::print(fmt!("middle_three_digits(%?) returned: ", x));
match middle_three_digits(x) {
Ok(move s) => io::println(fmt!("Success, %s", s)),
Err(move s) => io::println(fmt!("Failure, %s", s))
}
}

fn main() {
let passing = [123, 12345, 1234567, 987654321, 10001, -10001, -123, -100, 100, -12345];
let failing = [1, 2, -1, -10, 2002, -2002, 0];
for passing.each |i| {
print_result(*i);
}
for failing.each |i| {
print_result(*i);
}
}</lang>

Output:

<pre>middle_three_digits(123) returned: Success, 123
middle_three_digits(12345) returned: Success, 234
middle_three_digits(1234567) returned: Success, 345
middle_three_digits(987654321) returned: Success, 654
middle_three_digits(10001) returned: Success, 000
middle_three_digits(-10001) returned: Success, 000
middle_three_digits(-123) returned: Success, 123
middle_three_digits(-100) returned: Success, 100
middle_three_digits(100) returned: Success, 100
middle_three_digits(-12345) returned: Success, 234
middle_three_digits(1) returned: Failure, Too short
middle_three_digits(2) returned: Failure, Too short
middle_three_digits(-1) returned: Failure, Too short
middle_three_digits(-10) returned: Failure, Too short
middle_three_digits(2002) returned: Failure, Even number of digits
middle_three_digits(-2002) returned: Failure, Even number of digits
middle_three_digits(0) returned: Failure, Too short</pre>


=={{header|Vedit macro language}}==
=={{header|Vedit macro language}}==