Task

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.

Note: The order of the middle digits should be preserved.

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.




procedure mid3(integer i)
    string s = sprintf("%d",abs(i))
    integer k = length(s)-3
    printf(1,"%10d: %s\n",{i,iff(k<0 or and_bits(k,1)?"error":s[k/2+1..k/2+3])})
end procedure
 
constant tests = {123,12345,1234567,987654321,10001,-10001,-123,-100,100,-12345,
                  1,2,-1,-10,2002,-2002,0}
for i=1 to length(tests) do
    mid3(tests[i])
end for
