Рассмотрим список l
, состоящий из цифр. Определить работу блока с индексом i
в списке , l
чтобы быть актом перемещения 3 последовательных элементов , начиная с i
в l
до конца.
Пример:
l, i (1-indexing) -> l (after applying block operation at index i)
[1,2,3,4,5], 1 -> [4,5,1,2,3]
[1,2,3,4,5,6,7], 3 -> [1,2,6,7,3,4,5]
Учитывая список, состоящий только из 0 и 1, ваша задача состоит в том, чтобы разделить его так, чтобы нули были впереди, а нули сзади, используя только операции с блоками. Выходными данными должны быть индексы в порядке их применения в списке.
Поскольку это невозможно для списка [1,0,1,0]
, длина списка гарантированно будет не менее 5.
Тестовые случаи (1-индексация)
(есть и другие действительные выводы)
[1,1,1,0,0] -> [1]
[0,1,0,1,0] -> [1,2,1,1]
[0,0,0,1,1,1,0,0,0] -> [4]
Используйте этот скрипт для генерации большего количества тестов. (только вход. rplc ' ';','
часть используется для т е пл с е пространства с запятой в выводе)
Критерии победы
code-challenge - это главный критерий выигрыша, а fast-code - это тай-брейк. Особенно:
- Решение с самой короткой выходной длиной (наименьшее количество операций блока) с контрольным примером (
n_elem
= 500,random_seed
= {секретное значение}) выигрывает. Вы должны быть в состоянии запустить ваше решение до конца с помощью контрольного примера (n_elem
= 500,random_seed
= 123456). - В случае связей решение, которое может обработать наибольшее значение степени 2
n_elem
сrandom_seed
= {секретное значение} в течение 10 секунд (для меня), выигрывает. - В случае связей решение, которое занимает меньше времени в этом тесте, выигрывает.
источник
Ответы:
Python 3 , (0,397 n + 3,58) шагов
1000-точечная полиномиальная регрессия
numpy.polyfit
.Попробуйте онлайн!
источник
Python 3, ~ 179 шагов для n = 500 (в среднем)
Эвристический жадный подход. Вроде медленно, но все еще работает. Использует оптимальный решатель для небольших размеров.
источник