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