Middle three digits: Difference between revisions

m
No edit summary
m (→‎{{header|Factor}}: style tweaks)
Line 2,026:
IN: rosetta-code.middle-three-digits
 
CONSTANT: test-values { 123 12345 1234567 987654321 10001 -10001
-123 -100 100 -12345 11234567 2987654321 -110001 -10 2002 -2002 0 }10001
-123 -100 100 -12345 1 2 -1 -10 2002 -2002 0
}
 
: (middle-three) ( str -- str' ) [ midpoint@ ] keep
[ midpoint@ ] keep [ [ 1 - ] [ 2 + ] bi ] dip subseq ;
: too-short ( -- ) "Number must have at least three digits."
"Number must have at least three digits." print ;
: number-even ( -- ) "Number must have an odd number of digits."
"Number must have an odd number of digits." print ;
print ;
 
: processmiddle-three ( n -- )
abs number>string {
{ [ dup length 3 < ] [ drop too-short ] }
{ [ dup length even? ] [ drop number-even ] }
[ (middle-three) print ]
} cond ;
: main ( -- ) test-values [ dup "%9d : " printf process ] each ;
test-values [ dup "%9d : " printf middle-three ] each ;
 
MAIN: main</lang>
1,827

edits