f <- function ( p, n, r)
{
if ( p < 1 | p > n | r <= 0 ) return ( )
r <- min( n, r)
a <- r %/% 2
b <- ( r - 1 ) %/% 2
min( n - a, max( 1 + b, p) ) + - b: a
}
Q <- list(
c( 1 , 10 , 5 ) , c( 3 , 10 , 5 ) , c( 5 , 10 , 5 ) , c( 8 , 10 , 5 ) , c( 10 , 10 , 5 ) ,
c( 5 , 10 , 0 ) , c( 5 , 10 , 4 ) , c( 0 , 10 , 5 ) , c( 11 , 10 , 5 ) , c( 1 , 3 , 5 )
)
for ( q in Q) {
printf ( "p = %d, n = %d, r = %d\n " , q
[ 1 ] , q
[ 2 ] , q
[ 3 ] ) printf ( "[%s]\n " , toString
( f
( q
[ 1 ] , q
[ 2 ] , q
[ 3 ] ) ) ) }
cHJpbnRmIDwtIGZ1bmN0aW9uKC4uLikgY2F0KHNwcmludGYoLi4uKSkKCmYgPC0gZnVuY3Rpb24ocCwgbiwgcikKewogICAgaWYgKHAgPCAxIHwgcCA+IG4gfCByIDw9IDApIHJldHVybigpCiAgICByIDwtIG1pbihuLCByKQogICAgYSA8LSByICUvJSAyCiAgICBiIDwtIChyIC0gMSkgJS8lIDIKICAgIG1pbihuIC0gYSwgbWF4KDEgKyBiLCBwKSkgKyAtYjphCn0KClEgPC0gbGlzdCgKICAgIGMoMSwgMTAsIDUpLCBjKDMsIDEwLCA1KSwgYyg1LCAxMCwgNSksIGMoOCwgMTAsIDUpLCBjKDEwLCAxMCwgNSksCiAgICBjKDUsIDEwLCAwKSwgYyg1LCAxMCwgNCksIGMoMCwgMTAsIDUpLCBjKDExLCAxMCwgNSksIGMoMSwgMywgNSkKKQoKZm9yIChxIGluIFEpIHsKICAgIHByaW50ZigicCA9ICVkLCBuID0gJWQsIHIgPSAlZFxuIiwgcVsxXSwgcVsyXSwgcVszXSkKICAgIHByaW50ZigiWyVzXVxuIiwgdG9TdHJpbmcoZihxWzFdLCBxWzJdLCBxWzNdKSkpCiAgICBwcmludGYoIlxuIikKfQ==
stdout
p = 1, n = 10, r = 5
[1, 2, 3, 4, 5]
p = 3, n = 10, r = 5
[1, 2, 3, 4, 5]
p = 5, n = 10, r = 5
[3, 4, 5, 6, 7]
p = 8, n = 10, r = 5
[6, 7, 8, 9, 10]
p = 10, n = 10, r = 5
[6, 7, 8, 9, 10]
p = 5, n = 10, r = 0
[]
p = 5, n = 10, r = 4
[4, 5, 6, 7]
p = 0, n = 10, r = 5
[]
p = 11, n = 10, r = 5
[]
p = 1, n = 3, r = 5
[1, 2, 3]