不良セクタの隣〜 横へな 2014.3.7 問題

問題

円盤状の記憶メディアがある。
記憶を格納する場所は「セクタ」と呼ばれていて、セクタには下図のようにアドレスが振られている。

上図のとおり、まんなかは使われない。
で。
不良セクタが検出されている。
複数の不良セクタと隣接している不良ではないセクタは、なんとなく危なっかしいので「保留セクタ」としてマークする必要がある。
例えば、400,401,302 の3つのセクタが不良になったとする。
複数の不良セクタに隣接しているセクタは、300,301,402 なので、この 3個のセクタを「保留セクタ」にする。
不良セクタのリストを元に、保留セクタのアドレスをすべて求めよ。

入力と出力

入力は
400,401,302
こんな感じ。
不良セクタのアドレスをコンマ区切りでつなげてある。
入力の順序は整列されていない(不良になった順という設定)。
入力に重複は含まない。

出力は、保留セクタにすべきセクタの名前を辞書順で、コンマ区切りにした文字列。
上記の例だと
300,301,402
を出力ればよい。
また、入力が
105,100,306,414
のように、保留セクタにすべきセクタがひとつもない場合、そのことを示すために
none
を出力する。

補足

サンプルデータ

# 入力 期待
0 400,401,302 300,301,402
1 105,100,306,414 none
2 100 none
3 211 none
4 317 none
5 414 none
6 100,106 107
7 205,203 102,204
8 303,305 304
9 407,409 306,408
10 104,103 207
11 204,203 102,305
12 313,314 209,418
13 419,418 314
14 100,102,101 201,203
15 103,206,309 205,207,308,310
16 414,310,309 206,311,413
17 104,102,206,307,102,202 101,103,203,204,205,207,308
18 104,206,308,409,407 103,205,207,306,307,309,408,410
19 313,406,213,301,409,422,412,102,428 none
20 101,300,210,308,423,321,403,408,415 none
21 304,316,307,207,427,402,107,431,412,418,424 none
22 205,408,210,215,425,302,311,400,428,412 none
23 200,311,306,412,403,318,427,105,420 none
24 105,305,407,408,309,208,427 104,209,306,406
25 311,304,322,404,429,305,316 203,303,321,405,406,430
26 210,401,316,425,101 211,315
27 414,403,404,416,428,421 303,415
28 207,300,103,211,428 104,206
29 322,314,310 none
30 427,200,215 100,323
31 311,402,424,307,318,430,323,305,201 200,204,301,302,306,322,423,425,431
32 425,430,408 none
33 202,320,209,426 319,427
34 430,209,302,310,304,431,320 202,303,323
35 208,206,406,424,213,312 207,311,313
36 420,302,313,413,317,402 301,403
37 319,306,309,418,204,411 305,307,308,412
38 400,308,105,430,203,428,209 104,210,429,431
39 200,305,214 215
40 214,408,410,407,317,422 306,316,409,423

C/C++/Java 用のテストデータ