E no décimo oitavo episodio desta serie que queima os miolos, vamos abordar um problema envolvendo um visualizador de PDF's.
O problema descrito está relacionado à determinação da área de destaque em um visualizador de PDF quando um bloco contíguo de texto é selecionado. Nesse visualizador, cada palavra é destacada independentemente e a seleção é destacada com um retângulo azul. Dado um conjunto de alturas de caracteres para cada letra minúscula do alfabeto inglês e uma string de palavras, o objetivo é determinar a área de destaque assumindo que todas as letras têm a mesma largura.
Para calcular a área de destaque, deve-se determinar a altura da letra mais alta na string selecionada e multiplicá-la pelo número de letras na string selecionada, assumindo que todas as letras têm a mesma largura. A altura de cada letra é dada pelo conjunto de alturas de caracteres de entrada correspondente a cada letra.
Para isso vamos criar a função "designerPdfViewer", essa função vai receber 2 parametros h e word.
O parâmetro h é um array de números inteiros que corresponde às alturas de cada letra do alfabeto, em que cada posição do array representa uma letra, começando pela letra "a" na posição 0 e terminando na letra "z" na posição 25. Por exemplo, se h for [1, 3, 1, 3, 1, 4, 1, 3, 2, 5, 5, 5, 5, 1, 5, 5, 1, 5, 2, 5, 5, 1, 5, 5, 5, 5], isso significa que a letra "a" tem altura 1, a letra "b" tem altura 3, a letra "c" tem altura 1 e assim por diante.
O parâmetro word é uma string que representa uma palavra. A função designerPdfViewer é responsável por calcular a área ocupada pela palavra na tela, considerando que a largura de cada letra é sempre igual a 1. Para isso, a função utiliza o parâmetro h para obter a altura de cada letra da palavra e, em seguida, calcula a altura da letra mais alta presente na palavra. Essa altura máxima é multiplicada pelo comprimento da palavra para obter a área total ocupada na tela.
Para obter a altura de cada letra da palavra, a função utiliza os métodos split("") e map(). O método split("") é utilizado para separar cada letra da palavra em um array. Em seguida, o método map() é utilizado para percorrer cada letra do array e obter sua altura correspondente no array h. Para isso, a expressão w.charCodeAt() - 97 é utilizada para obter o código Unicode da letra e subtrair 97, resultando em um número de 0 a 25 correspondente à posição da letra no array h.
Por fim, a função Math.max() é utilizada para obter a altura da letra mais alta presente na palavra, que é multiplicada pelo comprimento da palavra para obter a área total ocupada na tela.
Nossa função vai ficar assim:
E assim fechamos mais um desafio.
Top comments (0)