#include <stdio.h>
#define min(a, b) ((a) < (b) ? (a) : (b))
#define max(a, b) ((a) < (b) ? (b) : (a))
const char *f(int current, int size, int width) {
static char buff[256], *p;
int b = min(max(1, current - width / 2), size - width + 1), e = b + width, i;
for (p = buff, i = b; i < e; i++) {
if (b < i) *p++ = ' ';
p
+= sprintf(p
, i
== current
? "[%d]" : "%d", i
); }
return buff;
}
int main() {
#define g(a, b, c) printf("%s\n", f(a, b, c))
g(1,10,5), g(5, 10, 5), g(10, 10, 5);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNkZWZpbmUgbWluKGEsIGIpICgoYSkgPCAoYikgPyAoYSkgOiAoYikpCiNkZWZpbmUgbWF4KGEsIGIpICgoYSkgPCAoYikgPyAoYikgOiAoYSkpCmNvbnN0IGNoYXIgKmYoaW50IGN1cnJlbnQsIGludCBzaXplLCBpbnQgd2lkdGgpIHsKICBzdGF0aWMgY2hhciBidWZmWzI1Nl0sICpwOwogIGludCBiID0gbWluKG1heCgxLCBjdXJyZW50IC0gd2lkdGggLyAyKSwgc2l6ZSAtIHdpZHRoICsgMSksIGUgPSBiICsgd2lkdGgsIGk7CiAgZm9yIChwID0gYnVmZiwgaSA9IGI7IGkgPCBlOyBpKyspIHsKICAgIGlmIChiIDwgaSkgKnArKyA9ICcgJzsKICAgIHAgKz0gc3ByaW50ZihwLCBpID09IGN1cnJlbnQgPyAiWyVkXSIgOiAiJWQiLCBpKTsKICB9CiAgcmV0dXJuIGJ1ZmY7Cn0KaW50IG1haW4oKSB7CiNkZWZpbmUgZyhhLCBiLCBjKSBwcmludGYoIiVzXG4iLCBmKGEsIGIsIGMpKQogIGcoMSwxMCw1KSwgZyg1LCAxMCwgNSksIGcoMTAsIDEwLCA1KTsKICByZXR1cm4gMDsKfQo=