Dada uma posição com uma fileira de torres e / ou espaços vazios, produza quantos movimentos diferentes de torres são possíveis. Uma torre pode se mover para a esquerda ou direita para um espaço vazio, mas não para uma que exija passar por outra torre. Quando uma torre se move, as outras torres permanecem no lugar.
Por exemplo, nesta posição, são possíveis 6 movimentos :
.R..RRR.
- A primeira torre (mais à esquerda) pode mover 1 espaço para a esquerda ou 1 ou 2 espaços para a direita (3 movimentos)
- A próxima torre só pode mover 1 ou 2 espaços para a esquerda (2 movimentos)
- A terceira torre não pode se mover porque está espremida entre outras duas (0 movimentos)
- A última torre só pode mover 1 espaço para a direita (1 movimento)
Observe que uma posição pode não ter torres ou espaços vazios.
Entrada: Uma lista não vazia (string, array, etc.) de torres e espaços vazios. Você pode representá-los como True
/ False
, 1
/ 0
, 'R'
/ '.'
, ou quaisquer dois caracteres consistentes de byte distinto ou números de um dígito de sua escolha. Depende de você qual significa torre e qual significa espaço vazio.
Saída: Um número inteiro não negativo. Flutuadores de número inteiro também são bons.
Casos de teste
A saída é o número à esquerda.
6 .R..RRR.
0 .
0 R
4 R..RR
3 ...R
8 ..R..R..
0 ......
Para mais casos de teste, aqui estão todas as entradas até o comprimento 5.
0 .
0 R
0 ..
1 .R
1 R.
0 RR
0 ...
2 ..R
2 .R.
1 .RR
2 R..
2 R.R
1 RR.
0 RRR
0 ....
3 ...R
3 ..R.
2 ..RR
3 .R..
3 .R.R
2 .RR.
1 .RRR
3 R...
4 R..R
3 R.R.
2 R.RR
2 RR..
2 RR.R
1 RRR.
0 RRRR
0 .....
4 ....R
4 ...R.
3 ...RR
4 ..R..
4 ..R.R
3 ..RR.
2 ..RRR
4 .R...
5 .R..R
4 .R.R.
3 .R.RR
3 .RR..
3 .RR.R
2 .RRR.
1 .RRRR
4 R....
6 R...R
5 R..R.
4 R..RR
4 R.R..
4 R.R.R
3 R.RR.
2 R.RRR
3 RR...
4 RR..R
3 RR.R.
2 RR.RR
2 RRR..
2 RRR.R
1 RRRR.
0 RRRRR