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.




Numbers:="123,12345,1234567,987654321,10001,-10001,-123,-100,100,-12345,1,2,-1,-10,2002,-2002,0"
Loop, parse, Numbers, `,
{
	if A_LoopField is not number
		log := log . A_LoopField . "`t: Not a valid number`n"
	else if((d:=StrLen(n:=RegExReplace(A_LoopField,"\D")))<3)
		log := log . A_LoopField . "`t: Too short`n"
	else if(!Mod(d,2))
		log := log . A_LoopField . "`t: Not an odd number of digits`n"
	else
		log := log . A_LoopField . "`t: " . SubStr(n,((d-3)//2)+1,3) . "`n"
}
MsgBox % log