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.




  [ 1 & not ]                       is even    (   n --> b )
 
  [ over size - 
    space swap of
    swap join ]                     is justify ( $ n --> $ )
 
  [ abs number$
    dup size dup 3 < iff
      [ 2drop $ "too few digits" ]
      done
    dup even iff
      [ 2drop $ "even digit count" ]
      done
    dup 3 = iff
      drop done
    3 - 2 /
    tuck split nip
    swap negate split drop ]        is middle3 (   n --> $ )
 
   ' [ 123 12345 1234567 
       987654321 10001 -10001 
       -123 -100 100 -12345 1 
       2 -1 -10 2002 -2002 0 ]
 
   witheach
     [ dup number$ 9 justify echo$ 
       say " --> "
       middle3 echo$ cr ]