На графике ствола и листа отображаются группы числовых значений в группах, которые определяются всеми, кроме последней цифры. Например, предположим, у нас есть этот набор данных:
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 включительно до 110 исключений, поэтому его основа равна 10 (100 делится на 10).
Ваша задача состоит в том, чтобы проверить, является ли фрагмент текста допустимым сюжетом ствола и листа. Действительный сюжет удовлетворяет этим правилам:
- Имеет ровно одну строку для каждого стебля (т. Е. Группы из 10) в диапазоне данных (включая стебли в середине диапазона без листьев)
- Не имеет стеблей вне диапазона
- Все листья отсортированы по возрастанию вправо
- Все стебли отсортированы по возрастанию вниз
- Имеет только числовые символы (кроме разделителя
|
)
Вам не нужно иметь дело с числами, которые имеют дробные части. Вы можете одобрить или отклонить дополнительные ведущие нули в стеблях, но пустой стебель не допускается. Там будет хотя бы одно значение. Вы можете предполагать только дополнительные пробелы после листьев в каждом ряду. Вы можете использовать начальный и / или завершающий символ новой строки. Все символы будут напечатаны ASCII.
Ваша функция или программа должна вернуть или вывести (на экран или стандартный вывод) истинное значение для правильного графика или ложное значение для недопустимого графика. Вы можете взять ввод из стандартного ввода, из файла, как одну большую строку, как массив строк - все, что наиболее удобно.
Вот несколько тестовых примеров, которые являются действительными графиками (разделенными пустыми строками):
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
Это код гольф, поэтому выигрывает самый короткий код! Стандартные лазейки запрещены.
источник
1|2|3
в нем.4|;5|26;6|7
который имеет первый стержень вне диапазона, но вместо того, чтобы в конце концов, то есть12|3;13|4559;14|
.Ответы:
Perl, 47 байт
Включает +2 для
-0p
Внести вклад в STDIN
stem.pl
:источник
$"
очень хорош!Пип ,
6058 + 1 = 59 байтПервый удар по проблеме, возможно, мог бы использовать больше игры в гольф. Использует
-r
флаг для чтения строк ввода из стандартного ввода. Истинный вывод1
, ложный вывод0
или пустая строка.Объяснение и тестовый пакет ожидают рассмотрения, а пока: попробуйте онлайн!
источник
JavaScript, 189 байт
Альтернативное решение той же длины:
Определяет анонимную функцию, которая принимает ввод в виде многострочной строки.
Я уверен, что есть еще кое-что в гольфе, поэтому дайте мне знать, если вы видите какие-либо возможные улучшения.
Объяснение:
Функция проверяет множество плохих вещей, и если любое из них истинно, оно возвращает ложь (используя логические ИЛИ и НЕ)
В альтернативном решении проверка на наличие нескольких
|
s в строке выполняется вместо первого регулярного выражения.источник
test
вместоexec
(вы почти всегда хотите использовать,test
если вам нужен только логический результат`), то вы, вероятно, можете использовать побитовое или вместо логического или.y.some((c,i,a)=>...
наy.some(c=>...
такi
иa
не используются. И, кажетсяz!=z.sort((a,b)=>a-b)
, не работает, его можно заменить на''+z!=z.sort()
Пакет, 409 байт
Принимает ввод по STDIN, но завершается, как только обнаруживает ошибку.
источник