Давайте определим процесс дробления массива чисел. В раздавленном состоянии мы читаем массив слева направо. Если в какой-то момент мы встречаем два одинаковых элемента подряд, мы удаляем первый и удваиваем второй. Например, вот процесс дробления следующего массива
[5,2,2,3]
^
[5,2,2,3]
^
[5,2,2,3]
^
[5,4,3]
^
[5,4,3]
^
Один и тот же элемент может быть свернут несколько раз, например [1,1,2]
становится [4]
при раздавливании.
Мы назовем массив нерушимым, когда процесс его уничтожения не изменится. Например [1,2,3]
, все еще [1,2,3]
после того, как раздавлен.
Ваша задача - взять массив и определить количество дроблений, необходимое для того, чтобы сделать его неразрушимым. Вам нужно только поддерживать целые числа в диапазоне от 0 до 2 32 -1
Это код-гольф, поэтому ответы будут оцениваться в байтах, причем меньше байтов будет лучше.
Тестовые случаи
[1] -> 0
[1,1] -> 1
[2,1,1] -> 2
[4,2,1,1] -> 3
[2,2,2,1,1] -> 3
[0,0,0,0] -> 1
[4,0,0,0,4] -> 1
[4,0,0,0,0,4] -> 1
[] -> 0
0,0,0,0
только 1
. Это может быть идея явно упомянуть где-то, что мы подсчитываем количество раз, которое мы должны циклически проходить по массиву, чтобы полностью его раздавить, а не , как я изначально думал, общее количество раз, когда мы раздавливаем 2 числа вместе.
[1,1,2,4,8]
вернуть 1 или 4?