fn f(current: i32, size: i32, width: i32) -> String {
use std::cmp::{min, max};
let b = min(max(1, current - width / 2), size - width + 1);
let to_s = |p| if p == current {format!("[{}]", p)} else {format!("{}", p)};
(b..b + width).map(to_s).collect::<Vec<_>>().join(" ")
}
fn main() {
for (a, b, c) in vec!((1, 10, 5), (5, 10, 5), (10, 10, 5)) {println!("{:?}", f(a, b, c))}
}
Zm4gZihjdXJyZW50OiBpMzIsIHNpemU6IGkzMiwgd2lkdGg6IGkzMikgLT4gU3RyaW5nIHsKICAgIHVzZSBzdGQ6OmNtcDo6e21pbiwgbWF4fTsKICAgIGxldCBiID0gbWluKG1heCgxLCBjdXJyZW50IC0gd2lkdGggLyAyKSwgc2l6ZSAtIHdpZHRoICsgMSk7CiAgICBsZXQgdG9fcyA9IHxwfCBpZiBwID09IGN1cnJlbnQge2Zvcm1hdCEoIlt7fV0iLCBwKX0gZWxzZSB7Zm9ybWF0ISgie30iLCBwKX07CiAgICAoYi4uYiArIHdpZHRoKS5tYXAodG9fcykuY29sbGVjdDo6PFZlYzxfPj4oKS5qb2luKCIgIikKfQpmbiBtYWluKCkgewogICAgZm9yIChhLCBiLCBjKSBpbiB2ZWMhKCgxLCAxMCwgNSksICg1LCAxMCwgNSksICgxMCwgMTAsIDUpKSB7cHJpbnRsbiEoIns6P30iLCBmKGEsIGIsIGMpKX0KfQo=