Допустим, ваша задача - рисовать столбы, а клиент просит вас нарисовать столб с четырьмя красными и тремя желтыми. Вы можете сделать это довольно легко следующим образом:
r y r y r y r
Только с желтыми и красными полосами. Теперь предположим, что ваш клиент просит вас нарисовать столб с 2 красными секциями, 2 желтыми секциями и 1 зеленой секцией . Есть несколько способов нарисовать свой столб
g y r y r
y g r y r
y r g y r
y r y g r
y r y r g
g r y r y
r g y r y
r y g r y
r y r g y
r y r y g
y r g r y
r y g y r
Точнее вот 12 способов покрасить шест. Это взрывает больше цветов и разделов, которые участвуют
Теперь, если ваш клиент говорит, что он хочет 3 красных раздела и 1 желтый, нет никакого способа нарисовать такой столб. Потому что независимо от того, как вы пытаетесь расположить секции, две красные секции соприкасаются, а когда две красные секции соприкасаются, они становятся одной красной секцией.
И это в значительной степени наше единственное правило для рисования столбов
Соседние секции не могут быть одного цвета
задача
Учитывая список требуемых цветов и разделов, выведите количество возможных способов покраски полюса в соответствии с запросом. Вы можете представлять цвета любым разумным способом (целые числа, символы, строки), но вам никогда не будет предоставлено более 255 различных цветов одновременно. Если вы хотите, вы можете даже не назначать цвета именам и просто взять список подсчетов разделов, если это проще.
Тестовые случаи
Их довольно сложно вычислить вручную, особенно когда они становятся больше. Если у кого-то есть предложенный тестовый пример, я добавлю его.
[4,3] -> 1
[2,2,1] -> 12
[3,1] -> 0
[8,3,2] -> 0
[2,2,1,1]-> 84
[1, 1, 1, 1, 2, 2, 2]
? Я так полагаю.