Rotate Hole Rotate Hole
Simple
EN JA Russian

Иногда люди создают абсолютно странные вещи. Наши роботы нашли и решили использовать древнюю артиллерийскую систему с круговой загрузкой ядер. В этой системе все стволы пронумерованны и расположенны по-кругу. Эта артустановка невероятно древняя и некоторые из пушек уже сломаны. Для загрузки пушек ядрами, позади системы установлен неподвижный загрузочный автомат, на котором указаны те номера пушек, куда необходимо поместить заряды. Сам загрузочный механизм провернуть нельзя, равно как и изменить на нем номера пушек. Но, у нас есть возможность поворачивать сами пушки относительно заряжающей системы. Таким образом, мы можем менять соответствие между ячейками загрузочного автомата и пушками. Все, что нам необходимо - это найти все возможные комбинации вращения, при которых все пушечные ядра из загрузочного автомата, будут находится напротив еще работающих пушек. Автомат подачи...

Стволы пронумерованы от 0 до N-1. Начальное положение механизма со стволами представлено в виде массива с 0 и/или 1. Где каждый элемент массива описывает соответствующую ему пушку. Например - 0-й элемент описывают 0-ю пушку. В этом массиве 1 означает, что пушка рабочая, 0 - пушка поломана.

Вы знаете количество и номера стволов, куда автомат планирует загружать пушечные ядра (иногда он может загружать по несколько пушечных ядер в одну пушку). Например - [0,1] означает, что планируется зарядить 0-ю и 1-ю пушки по одному ядру, а [5,4,5] - означает, что планируется зарядить 4-ю пушку одним ядром и 5-ю двумя. Ваша цель состоит в том, чтобы найти все возможные комбинации, при которых все пушечные ядры будут загружены в рабочие пушки одновременно. Эти комбинации вы можете получить путем вращания пушек по часовой стрелке. Вращение описывается как целое число - т.е. на какое количество шагов вам необходимо повернуть систему по часовой стрелке, чтобы выполнить условие. Результат должен быть представлен в виде списка с целыми числами, со всеми возможными вариантами в порядке возрастания. Случай, когда вам не нужно ничего вращать, т.е. начальное положение удовлетворяет условиям, описавается как 0 (но не стоит забывать и о других вариантах). Если же нет комбинаций, при которых выполняется условие, необходимо вернуть пустой список []

Например, вот начальное положение пушек [1,0,0,0,1,1,0,1,0,0,0,1], а это заряжающего механизма [0,1]. При вращении пушек относительно заряжающего механизма на 1 шаг по часовой стрелке, пушки сместятся таким образом, что пушки №11 и №0 окажутся напротив заряжающего механизма с номерами 0 и 1 соответственно. А если повернуть на 8 единиц от начального положения, то напротив 0 и 1 заряжающего механизма, окажутся пушки с номерами №4 и №5. На картинке - цифрами указана нумерация заряжающего механизма, а синим цветом - работающие пушки

floor floor

Два аргумента.

Варианы вращения, как список целых чисел или пустой список.

rotate([1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1], [0, 1]) == [1, 8]
rotate([1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1], [0, 1, 2]) == []
rotate([1, 0, 0, 0, 1, 1, 0, 1], [0, 4, 5]) == [0]
rotate([1, 0, 0, 0, 1, 1, 0, 1], [5, 4, 5]) == [0, 5]
    

Эта концепция знакомит вас с круговыми структурами данных.


3 ≤ len() < 100
all(0 ≤ n < len() for n in )

You should be an authorized user in order to see the full description and start solving this mission.