Middle three digits: Difference between revisions
(→{{header|D}}: added D) |
m (neaten up a little) |
||
Line 1:
{{draft task}}
The task is to
:“''Write a function/procedure/subroutine that is called with an integer value and returns the middle three digits of the integer if possible or a clear indication of an error if this is not possible.''”
Your function should be tested with the following values; the first line should return valid answers, those of the second line should return clear indications of an error:
<pre>123, 12345, 1234567, 987654321, 10001, -10001, -123, -100, 100, -12345
Line 52 ⟶ 51:
middleThreeDigits(-2002) returned: Need odd and >= 3 digits
middleThreeDigits(0) returned: Need odd and >= 3 digits</pre>
=={{header|Python}}==
|
Revision as of 15:05, 2 February 2013
The task is to:
- “Write a function/procedure/subroutine that is called with an integer value and returns the middle three digits of the integer if possible or a clear indication of an error if this is not possible.”
Your function should be tested with the following values; the first line should return valid answers, those of the second line should return clear indications of an error:
123, 12345, 1234567, 987654321, 10001, -10001, -123, -100, 100, -12345 1, 2, -1, -10, 2002, -2002, 0
Show your output on this page.
D
<lang d>import std.stdio, std.traits, std.math, std.conv;
string middleThreeDigits(T)(T n) if (isIntegral!T) {
auto s = n.abs().text(); auto len = s.length; if (len < 3 || len % 2 == 0) throw new Exception("Need odd and >= 3 digits"); auto mid = len / 2; return s[mid - 1 .. mid + 2];
}
void main() {
auto passing = [123, 12345, 1234567, 987654321, 10001, -10001, -123, -100, 100, -12345]; auto failing = [1, 2, -1, -10, 2002, -2002, 0]; foreach (n; passing ~ failing) { string answer; try { answer = middleThreeDigits(n); } catch (Exception e) { answer = e.msg; } writefln("middleThreeDigits(%s) returned: %s", n, answer); }
}</lang>
middleThreeDigits(123) returned: 123 middleThreeDigits(12345) returned: 234 middleThreeDigits(1234567) returned: 345 middleThreeDigits(987654321) returned: 654 middleThreeDigits(10001) returned: 000 middleThreeDigits(-10001) returned: 000 middleThreeDigits(-123) returned: 123 middleThreeDigits(-100) returned: 100 middleThreeDigits(100) returned: 100 middleThreeDigits(-12345) returned: 234 middleThreeDigits(1) returned: Need odd and >= 3 digits middleThreeDigits(2) returned: Need odd and >= 3 digits middleThreeDigits(-1) returned: Need odd and >= 3 digits middleThreeDigits(-10) returned: Need odd and >= 3 digits middleThreeDigits(2002) returned: Need odd and >= 3 digits middleThreeDigits(-2002) returned: Need odd and >= 3 digits middleThreeDigits(0) returned: Need odd and >= 3 digits
Python
<lang python>>>> def middle_three_digits(i): s = str(abs(i)) length = len(s) assert length >= 3 and length % 2 == 1, "Need odd and >= 3 digits" mid = length // 2 return s[mid-1:mid+2]
>>> passing = [123, 12345, 1234567, 987654321, 10001, -10001, -123, -100, 100, -12345] >>> failing = [1, 2, -1, -10, 2002, -2002, 0] >>> for x in passing + failing: try: answer = middle_three_digits(x) except AssertionError as error: answer = error print("middle_three_digits(%s) returned: %r" % (x, answer))
middle_three_digits(123) returned: '123'
middle_three_digits(12345) returned: '234'
middle_three_digits(1234567) returned: '345'
middle_three_digits(987654321) returned: '654'
middle_three_digits(10001) returned: '000'
middle_three_digits(-10001) returned: '000'
middle_three_digits(-123) returned: '123'
middle_three_digits(-100) returned: '100'
middle_three_digits(100) returned: '100'
middle_three_digits(-12345) returned: '234'
middle_three_digits(1) returned: AssertionError('Need odd and >= 3 digits',)
middle_three_digits(2) returned: AssertionError('Need odd and >= 3 digits',)
middle_three_digits(-1) returned: AssertionError('Need odd and >= 3 digits',)
middle_three_digits(-10) returned: AssertionError('Need odd and >= 3 digits',)
middle_three_digits(2002) returned: AssertionError('Need odd and >= 3 digits',)
middle_three_digits(-2002) returned: AssertionError('Need odd and >= 3 digits',)
middle_three_digits(0) returned: AssertionError('Need odd and >= 3 digits',)
>>> </lang>