Deslizamentos de terra
Nesse desafio, seu trabalho é prever a extensão dos danos causados por um grande deslizamento de terra. Utilizamos o seguinte modelo bidimensional simplificado, parametrizado por uma altura inicial h >= 0
e um coeficiente crítico c > 0
. Você começa com um penhasco de altura h
, e supõe-se que o terreno seja completamente plano infinitamente à esquerda e à direita dele. Pois h = 6
, a situação é assim:
##########
##########
##########
##########
##########
##########
-----------------------
Os -
alicerces são imóveis e o #
solo é instável. Se a diferença de altura entre duas colunas vizinhas for maior que c
, ocorre um deslizamento de terra : a parte superiorc
unidades do solo da coluna esquerda caem para as próximas c
colunas à direita, uma para cada. A coluna não vazia à direita na figura é instável c = 2
, portanto, um deslizamento de terra é acionado:
#########
#########
##########
##########
##########
############
-----------------------
A coluna ainda é instável, o que causa um segundo deslizamento de terra:
#########
#########
#########
#########
############
############
-----------------------
Agora, a coluna à esquerda ficou instável, então um novo deslizamento de terra é acionado lá:
########
########
#########
###########
############
############
-----------------------
Depois disso, o penhasco fica estável novamente. O bom desse modelo é que a ordem na qual os deslizamentos são processados não importa: o resultado final é o mesmo.
A tarefa
Seu programa recebe os parâmetros inteiros h
e c
como entradas (a ordem não importa, mas você deve especificá-lo em sua resposta) e deve gerar o número total de colunas afetadas pelo deslizamento de terra. Isso significa o número de colunas no penhasco estável resultante, cuja altura é estritamente entre 0
e h
. No exemplo acima, a saída correta é 4
.
Você pode escrever um programa completo ou uma função. A menor contagem de bytes vence e as brechas padrão não são permitidas.
Casos de teste
Estes são dados no formato h c -> output
.
0 2 -> 0
2 3 -> 0
6 2 -> 4
6 6 -> 0
10 1 -> 10
15 1 -> 14
15 2 -> 11
15 3 -> 6
40 5 -> 16
80 5 -> 28
80 10 -> 17