Представьте, что мы получили кусочек какой-то горной области, это привело бы к форме, подобной этой:
4 _
3 _ _ __/ \
2 / \__/ \ _/ \_ /
1 / \ / \_/
0 \/
12322223210012233343221112
Как мы видим, мы можем представить это (в определенной степени) с помощью последовательности целых чисел.
Для этой задачи мы определяем долину как непрерывную подпоследовательность, где значения изначально уменьшаются и с некоторой точки они увеличиваются. Более формально для последовательности долиной будут индексы для которых выполняется следующее:
- начало и одинаковы:
- долина начинается и заканчивается, когда регион становится ниже:
- долина не плоская:
- долина изначально уменьшается:
- долина в какой-то момент увеличится:
Теперь определим ширину такой долины как размер индексов , т.е. .
Вызов
Учитывая профиль высоты (последовательность неотрицательных целых чисел), ваша задача - определить ширину самой широкой впадины.
пример
Учитывая профиль высоты [1,2,3,2,2,2,2,3,2,1,0,0,1,2,2,3,3,3,4,3,2,2,1,1,1,2]
, мы можем визуализировать его как прежде:
4 _
3 _ _ __/ \
2 / \__/ \ _/ \_ /
1 / \ / \_/
0 \/
12322223210012233343221112
aaaaaa ccccc
bbbbbbbbb
Обратите внимание, что вторая долина [3,2,1,0,0,1,2,2,3]
не распространяется дальше вправо, потому что крайняя левая точка - а не . Кроме того, мы не добавляем оставшиеся две с, потому что мы требуем, чтобы конечная точка была выше, чем вторая-последняя точка.
Поэтому ширина самой широкой долины равна .
правила
- На входе будет последовательность неотрицательных (извините голландцев) целых чисел
- можно предположить, что всегда есть хотя бы одна долина
- На выходе будет размер самой широкой долины, как определено выше
Testcases
[4,0,4] -> 3
[1,0,1,0,1] -> 3
[1,0,2,0,1,2] -> 4
[13,13,13,2,2,1,0,1,14,2,13,14] -> 4
[1,2,3,2,2,2,2,3,2,1,0,0,1,2,2,3,3,3,4,3,2,2,1,1,1,2] -> 9
[3,2,0,1,0,0,1,3] -> 4
[3,2,0,1,0,0,1,3]
. Все текущие ответы возвращают 8, по вашему определению я считаю, что это должно быть 4.[3,1,2,3]
)[4,0,4]
был бы такой случай.Ответы:
Желе , 15 байт
Попробуйте онлайн!
Или посмотрите набор тестов (добавлено еще два тестовых примера, которые я ранее не выполнял).
Как?
источник
JavaScript (ES6),
1111089997 байтПопробуйте онлайн!
комментарии
источник
Python 2 ,
120115898786152149 байтПопробуйте онлайн!
источник
Сетчатка 0.8.2 , 77 байт
Попробуйте онлайн! Ссылка включает в себя тестовые случаи. Объяснение:
Преобразовать в одинарный.
Перечислять, а не считать перекрывающиеся совпадения.
Начало долины захвачено
\1
. Это должно потом не совпадать до конца. Поскольку мы не фиксируем запятую, это также предотвращает сопоставление более высоких значений.Сопоставьте убывающие значения. Параметр
(?!1+\2)
предотвращает превышение любого прохода через цикл по сравнению с предыдущим. (Первый раз до конца\2
не задан, поэтому он не может сравниться тривиально.) Захват включает запятую, так как это гольф.Сопоставьте растущие значения. Это время
((?3)\3|\2)
означает, что каждое совпадение должно быть, по крайней мере, таким же, как и предыдущее значение, или последним уменьшением захвата в первый раз в цикле.Наконец, конец долины должен быть такой же высоты, как и начало.
Удалите высоты, оставив запятые. (Это немного проще, чем подсчет высот, так как некоторые из них могут быть нулевыми.)
Сортировка в обратном порядке, то есть сначала запятые.
Подсчитайте количество запятых в первой строке плюс один.
источник
Шелуха , 13 байт
Попробуйте онлайн!
объяснение
Я использую алгоритм, аналогичный Джонатану Аллану .
источник
Japt , 31 байт
Попробуйте онлайн!
Сохраняя 10 байтов, черпая вдохновение из ответа Хаска Згарба. Я все еще думаю, что это может быть улучшено, но я еще не нашел это.
Объяснение:
источник