mtsmfm blog

オフラインリアルタイムどう書く E25 の問題 - ビッグ7

オフラインリアルタイムどう書く E25 の問題です。

格子状に並んだ点がある。一番大きな7を描こう。

ルール

「7」の1辺が最も長いものを求め、各頂点の座標を返す。

「7」の条件は以下の通り。

  1. 3本の直線でできている
  2. 1:1:2 の長さである
  3. 図のように直角に繋がっている

入力

4,7,(0,3) のような入力。 最初の2つの数字、 47 はそれぞれ縦と横の点の数。 (0,3) は 7 の左側の短い縦線の先端の座標。

出力

(0,0),(3,0),(3,6) 、または - のような形式。 入力で指定された地点から時計回りで座標を返す。

候補が複数ある場合、または一つも「7」を描く余地がない場合には - を返す。

補足

不正な入力について考慮する必要はない。


実装ができた方は Qiitaの記事 のコメント欄からリンクを張っていただくと見つけやすくて助かります。

サンプルデータ

#入力期待
04,7,(0,3)(0,0),(3,0),(3,6)
14,6,(3,3)(2,5),(0,4),(2,0)
21,1,(0,0)-
32,2,(0,0)-
42,3,(0,0)-
52,3,(0,1)(0,0),(1,0),(1,2)
62,3,(1,1)(1,2),(0,2),(0,0)
72,3,(1,2)-
83,4,(1,2)-
94,3,(2,2)(1,2),(1,1),(3,1)
107,7,(2,5)(0,3),(2,1),(6,5)
118,7,(1,1)(3,0),(4,2),(0,4)
129,7,(3,6)(0,4),(2,1),(8,5)
1310,7,(6,6)(3,6),(3,3),(9,3)
1410,11,(4,2)(8,1),(9,5),(1,7)
1510,12,(0,3)(3,0),(6,3),(0,9)
1610,13,(0,0)-
1710,14,(4,3)(8,2),(9,6),(1,8)
1815,15,(2,1)(5,0),(6,3),(0,5)
1916,17,(14,13)(10,16),(7,12),(15,6)
2019,7,(18,0)-
2120,7,(1,4)(0,1),(3,0),(5,6)
2225,11,(15,1)(24,1),(24,10),(6,10)
2326,12,(12,8)(4,8),(4,0),(20,0)
2427,13,(14,2)(24,2),(24,12),(4,12)
2528,14,(6,6)-
2630,30,(25,17)(20,29),(8,24),(18,0)
2735,36,(32,3)(34,8),(29,10),(25,0)
28150,130,(50,113)(8,56),(65,14),(149,128)
29180,120,(120,18)-
30200,200,(24,134)(0,45),(89,21),(137,199)

テストデータ

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

JSON 形式のテストデータ

json