Pular para o conteúdo principal

Postagem em destaque

BlackTDN :: LeetCode :: Zigzag Conversion: Implementando Soluções em xBase (Harbour) e TL++

_Créditos das imagens: ChatGPT_ ### LeetCode :: Zigzag Conversion: Implementando Soluções em xBase (Harbour) e TL++ A ["Zigzag Conversion"](https://leetcode.com/problems/zigzag-conversion/description/) é um problema popular do LeetCode que desafia desenvolvedores a transformar uma string em um padrão zigzag com base no número de linhas especificado, para então reconstruir a string seguindo a leitura linha a linha do padrão. Aqui, apresento soluções desenvolvidas em Harbour (XBase) e TL++ com melhorias e detalhes adicionais. --- ### **O Problema** Dado uma string e um número de linhas, distribua os caracteres em um padrão zigzag. Leia as linhas do padrão sequencialmente para obter o resultado: Exemplo: **Input:** String: "PAYPALISHIRING" Linhas: 3 **Padrão Zigzag:** ``` P A H N A P L S I I G Y I R ``` **Output:** "PAHNAPLSIIGYIR" --- ### **Implementação em Harbour** As soluções estão organizadas em dois arquivos principai...

BlackTDN :: Tips & Tricks : Otimizando aScan e aEval

tips-tricks

Pela minha experiência, sempre que vejo um fonte com as funções aScan e aEval elas estão escritas da seguinte forma:

aScan

aEval

nAT := aScan( aArr , { |x| x == y } )

aEval( aArr , { |x| aAdd(y,x) } )

Vamos observar, segundo o TDN, os parâmetros formais para cada uma dessas funções.

Função: aScan

Executa um bloco de código para cada elemento de um array.

aScan ( < aArray>, < ExpProcura>, [ nInicio], [ nQuant ] ) --> nRet
Nome Tipo Descrição Obrigatório Referência
aArray Vetor Indica o array a ser avaliado. Sim Não
ExpProcura Qualquer

Indica a expressão de busca. Para um array de dimensão simples, pode ser colocado diretamente um valor a ser procurado. Para uma busca mais complexa ou para uma busca em array muti-dimensional, deve ser especificado um bloco de código.

Sim Não
nInicio Numérico

Indica a partir de qual elemento será realizada busca. Por padrão a pesquisa inicia no elemento 1.

Não Não
nQuant Numérico

Indica por quantos elementos serão considerados na operação de busca. Caso não especificado, todos os elementos do array a partir da posição inicial de busca serão considerados.

Não Não

Função: aEVal

Percorre um array procurando por um valor especificado. Pode ser especificado um valor a ser buscado, ou pode ser informada uma condição de busca através de um bloco de código.

aEVal ( < aArray>, < bBloco>, [ nInicio], [ nQuant ] ) --> NIL
Nome Tipo Descrição Obrigatório Referência
aArray Vetor Indica o array a ser avaliado. Sim Não
bBloco Bloco de Código

Indica o bloco de código que será executado para cada elemento encontrado.

Sim Não
nInicio Numérico

Indica o elemento inicial. Caso não seja especificado, o padrão assumido será o elemento um.

Não Não
nQuant Numérico

Indica a quantidade de elementos que serão processados a partir do parâmetro nInicio. Caso não seja especificado, o padrão será todos os elementos do array.

Não Não

Normalmente os parâmetros nInicio e nQuant são omitidos mas, se bem utilizados poderão otimizar a pesquisa conforme exemplo abaixo.

Utilizarei fragmentos do código de GAME 15 para exemplificar.

aScan Exemplo de Otimização
aScan Exemplo de Otimização
aScan Exemplo de Otimização
aScan Exemplo de Otimização

 

magic_tips_and_tricks

Observem que na revisão anterior (em rosa) não utilizava, em aScan, os parâmetros nInico (nBL) e nQuant (nEL) forçando que a pesquisa sempre iniciasse em 1 e finalizasse, caso não encontrasse o elemento da procura, no último elemento do array. Um desperdício uma vez que sabemos o intervalo e o número de elementos para a pesquisa. Dessa forma, ao passarmos os valores para nInicio (nBL) e nQuant (nEL), tornamos a pesquisa em aScan muito mais otimizada.

O mesmo poderemos dizer para aEval(). Só que no caso de aEval desde a versão original de GAME 15 os parâmetros nInicio (nBL) e nQuant (nEL) foram passados. Oras, se sei a partir e quanto avaliar, porque avaliar o Array inteiro.

Observe:

aEval Exemplo de Otimização

Com isso restrinjo o intervalo para avaliação do Bloco de código tornando-a muito mais rápida, ou seja, otimizada.

Em resumo, utilizem os parâmetros nInicio e nQuant em aScan e aEval para otimizar o processo de pesquisa e avaliação.

Fica a dica.

[]s
иαldσ dj

Comentários

Postagens mais visitadas