茎と葉のプロットは、全てが、最後の数字によって決定されたグループ内の数値の束を表示します。たとえば、次のデータセットがあるとします。
0, 2, 12, 13, 13, 15, 16, 20, 29, 43, 49, 101
この茎と葉のプロットを作成できます。
0|02
1|23356
2|09
3|
4|39
5|
6|
7|
8|
9|
10|1
最初の行のステムは0であるため、その「葉」-後の数字|
-は、0から10までの値を表します。各茎の葉が並べ替えられます。葉のない茎(3など)がプロットに表示されます。101の値は100を含む100から110を除くので、そのステムは10(100を10で割った値)です。
あなたの課題は、テキストが有効なステムとリーフプロットであるかどうかを確認することです。有効なプロットは次のルールを満たします。
- データの範囲内のすべてのステム(つまり、10の幅のグループ)ごとに正確に1つの行があります(範囲の中央にあるリーフを含まないステムを含む)
- 範囲外のステムはありません
- すべての葉は右に昇順でソートされます
- すべてのステムは昇順でソートされます
- 数字のみ(区切り文字以外
|
)
小数部分のある数値を扱う必要はありません。ステムの余分な先行ゼロを承認または拒否できますが、空白のステムは許可されません。少なくとも1つの値があります。各行の葉の後の余分なスペースのみを想定できます。先頭または末尾の改行を想定できます。すべての文字は印刷可能なASCIIです。
関数またはプログラムは、有効なプロットの場合は真の値を、無効なプロットの場合は偽の値を(画面または標準出力に)返すか出力する必要があります。標準の入力、ファイルからの入力を、1つの大きな文字列として、文字列の配列として取得できます-最も便利なものは何でも。
有効なプロットであるいくつかのテストケースを次に示します(空白行で区切られています)。
2|00003457
3|35
4|799
5|3
99|3
100|0556
101|
102|
103|8
0|0
無効なプロットであるテストケースと、右側のコメントを次に示します。
|0 Blank stem
5|347 Missing a stem (6) in the range
7|9
4| Has a stem (4) outside the range
5|26
6|7
11|432 Leaves aren't sorted correctly
12|9989
5|357 Stems aren't sorted correctly
4|002
6|1
4|5 Duplicate stem
4|6
4|6
5|1
51114 No stem and leaf separator
609
1|2|03 Multiple separators
2|779|
4|8abcdefg9 Invalid characters
5|1,2,3
75 | 4 6 Invalid characters (spaces)
76 | 2 8 8 9
これはコードゴルフなので、最短のコードが勝ちます!標準の抜け穴は許可されていません。
4|;5|26;6|7
、範囲外の最初のステムを持つものに似ていますが、代わりに末尾にあり12|3;13|4559;14|
ます。
1|2|3
。