Solução Informática – Nível Iniciante – Semana 6

por

Solução por Anita Ramos

Este problema é muito interessante, pois na sua resolução utilizamos o que chamamos de $$PA$$ (Progressão Aritmética) para definir até quando um loop “indeterminado” irá durar e por ser necessário determinar e armazenar novos valores a partir de valores já pré-estabelecidos, mas que variam de acordo com a entrada.

Iniciando a programação então, após adicionar a biblioteca e declarar as variáveis, o programa lê o primeiro valor de entrada $$N$$ e estabelece um loop com o comando $$for()$$ para ler todos os $$N$$’s seguintes valores da segunda linha de entrada. Depois, como o valor de $$N$$ será usado para estabelecer até quando um loop será válido e por isso não pode ser alterado, as variáveis $$lasti$$ e $$j$$ assumirão o seu valor.

Na parte da lógica do programa, utilizamos um loop com o comando $$for()$$ para determinar a cor de cada bola depois das $$N$$’s primeiras bolas utilizando uma $$PA$$ (para determinar quantas bolas serão até a última), que começa com $$i = 2$$ para não analisar a primeira bola do segundo andar de um caso de teste, pois pela ideia utilizada, o par dela seria a última boa do primeiro andar e isso não se encaixa com o que dito no enunciado, já que nenhuma bola é formada por um caso desses. Em seguida, a variável $$cont$$ assume o valor da posição anterior à da bola sendo observada, ou seja, $$i – 1$$, que será o “vizinho” ou o “par” dessa bola e a variável $$soma$$ recebe o valor da soma de duas bolas vizinhas. Se essa soma for igual a 0, ou seja, se as bolas forem de cores diferentes, $$k$$, que representa a posição da bola formada por esse par de bolas analisados, assume o valor de $$i + j – 1$$ (que é exatamente a k-ésima bola de uma sequência) e o vetor $$v$$ de posição $$k$$ recebe -1 como seu valor, ou seja, a bola é branca. Se essa soma for igual a 2 ou a -2, ou seja, se as bolas forem da mesma cor, $$k$$, que representa a posição da bola formada por esse par de bolas analisados, assume o valor de $$i + j – 1$$ (que é exatamente a k-ésima bola de uma sequência) e o vetor $$v$$ de posição $$k$$ recebe 1 como seu valor, ou seja, a bola é preta. Por último, se a bola analisada for a última de um andar, ou seja, se $$i = lasti$$, soma-se 1 à variável $$i$$ para “pular” a primeira bola do próximo andar (já que pela ideia ela não tem um vizinho considerável), soma-se à $$lasti$$ o valor de $$j-1$$ (que será a posição da última bola do próximo andar) e subtrai-se 1 da variável $$j$$, porque no próximo andar teremos uma bola a menos.

No final, imprimimos “preta” se o valor do vetor $$v$$ da posição da última bola da sequência for 1 ou “branca” se o valor do vetor $$v$$ da posição da última bola da sequência for -1 e o programa retorna a 0.

Segue o código comentado para melhor compreensão da solução:

https://gist.github.com/anitainfo/39e6083d437f8e424de1a5452dd712ca