Diyelim ki işiniz direkleri boyamaktır ve bir müşteri sizden 4 kırmızı bölüm ve 3 sarı bölümden oluşan bir direk boyamanızı ister. Bunu aşağıdaki gibi kolayca yapabilirsiniz:
r y r y r y r
Sadece sarı ve kırmızı çizgili. Şimdi müşterinizden sizden 2 kırmızı bölüm, 2 sarı bölüm ve 1 yeşil bölümden bir direğe boyamanızı istediğini söyleyelim . Direğini boyamanın birkaç yolu var.
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
Daha doğrusu bu direği boyamak için 12 yol. Bu, daha fazla renk ve ilgili bölümleri havaya uçurur
Şimdi müvekkiliniz 3 kırmızı bölüm ve 1 sarı bölüm istediklerini söylerse, böyle bir direği boyamanın yolu yoktur. Çünkü bölümleri nasıl düzenlemeye çalışırsanız çalışın iki kırmızı bölüm dokunur ve iki kırmızı bölüm dokunduğunda tek kırmızı bölüm olur.
Ve bu direkleri boyamak için tek kuralımızdır.
Bitişik bölümler aynı renkte olmayabilir
Görev
Gereken renk ve bölümlerin bir listesi göz önüne alındığında, istendiği gibi bir direği boyamak için olası yolların sayısını çıktı. Renkleri makul herhangi bir şekilde (tam sayılar, karakterler, dizeler) temsil edebilirsiniz, ancak bir seferde asla 255'ten fazla farklı renk verilmez. İsterseniz renk atanmış adlara sahip olmamayı bile seçebilirsiniz ve eğer kolaysa bölüm sayımlarının bir listesini alabilirsiniz.
Test Kılıfları
Bunları, özellikle büyüdükçe, elle hesaplamak oldukça zordur. Herhangi birinin önerilen bir test vakası varsa, ekleyeceğim.
[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]
? Bende öyle tahmin ediyorum.