Pular para o conteúdo principal

Postagem em destaque

BlackTDN :: Multiplicação Chinesa vs. Russa :: Técnicas Antigas e Implementação em xBase

_Créditos das imagens: Grok # Multiplicação Chinesa vs. Russa: Técnicas Antigas e Implementação em xBase A matemática sempre nos presenteia com métodos criativos para resolver problemas aparentemente simples. Duas técnicas fascinantes para a multiplicação de números – a **Multiplicação Chinesa** e a **Multiplicação Russa** – demonstram que, mesmo sem o uso das convenções modernas, é possível chegar a resultados corretos através de abordagens alternativas. Neste artigo, vamos comparar essas duas técnicas, ilustrar seus processos com exemplos gráficos e discutir como foram implementadas em xBase, ampliando os horizontes para o processamento de números muito grandes. A multiplicação é uma operação fundamental na matemática, e diferentes culturas desenvolveram métodos únicos para realizá-la. Neste artigo, exploraremos duas técnicas fascinantes: a **multiplicação chinesa** (baseada em grids/lattice) e a **multiplicação russa** (também conhecida como "multiplicação camponesa"),...

BlackTDN :: LeetCode :: Regular Expression Matching :: Harbour & TLPP

_Créditos das imagens: ChatGPT_

# LeetCode :: Regular Expression Matching

O desafio "Regular Expression Matching" do [LeetCode](https://leetcode.com/problems/regular-expression-matching/description/) é conhecido por exigir criatividade e eficiência. Quatro soluções foram desenvolvidas em Harbour e TLPP para atender à demanda. Aqui exploraremos essas implementações destacando suas abordagens e técnicas.

---

## Soluções Harbour

### Utilizando Recursividade

1. **[Solução 10.1](https://github.com/naldodj/naldodj-xbase-leetcode-solutions/blob/main/src/hb/010/regular.expression.matching.10.1.prg)**
   Esta implementação, baseada na original (isMatchRec)[https://www.geeksforgeeks.org/implementing-regular-expression-matching/], utiliza a recusividade para solucionar o problema.
   Foram necessárias algumas adaptações pois em C++ tanto o array/vetor quanto uma string de caracteres se iniciam na posição 0, já no xBase, ambos iniciam-se em 1.
   Implementamos a função: simplePatternMatch para validar as seguintes regras:
       s contains only lowercase English letters.
       p contains only lowercase English letters, '.', and '*'.

2. **[Solução 10.2](https://github.com/naldodj/naldodj-xbase-leetcode-solutions/blob/main/src/hb/010/regular.expression.matching.10.2.prg)**
   Também baseada na original (isMatchRec)[https://www.geeksforgeeks.org/implementing-regular-expression-matching/]
   Utiliza as funções de tratamento de regex nativas da linguagem para validar as seguintes regras:
       s contains only lowercase English letters.
       p contains only lowercase English letters, '.', and '*'.   
   
   Obs.: A recursão é eficiente em termos de codificação, mas pode consumir mais memória em strings longas.

### Utilizando Programação Dinâmica

3. **[Solução 10.3](https://github.com/naldodj/naldodj-xbase-leetcode-solutions/blob/main/src/hb/010/regular.expression.matching.10.3.prg)**
   Apresenta uma abordagem baseada em programção dinâmica, utilizando vetores para armazenar resultados intermediários. Isso reduz significativamente a complexidade computacional, tornando-a ideal para casos onde a recursão simples não é viável devido à profundidade das chamadas.

4. **[Solução 10.4](https://github.com/naldodj/naldodj-xbase-leetcode-solutions/blob/main/src/hb/010/regular.expression.matching.10.4.prg)**
   Uma versão otimizada da solução anterior, com foco na redução do uso de espaço sem o uso de arrays/vetores adicionais mantendo a eficiência. Esta solução é ideal para sistemas com recursos limitados.

---

## Soluções TLPP

As implementações em TLPP seguem os mesmos princípios das soluções Harbour, com adaptações específicas para a linguagem. Veja os links:

- [Solução 10.1](https://github.com/naldodj/naldodj-xbase-leetcode-solutions/blob/main/src/tlpp/010/regular.expression.matching.10.1.tlpp)
- [Solução 10.2](https://github.com/naldodj/naldodj-xbase-leetcode-solutions/blob/main/src/tlpp/010/regular.expression.matching.10.2.tlpp)
- [Solução 10.3](https://github.com/naldodj/naldodj-xbase-leetcode-solutions/blob/main/src/tlpp/010/regular.expression.matching.10.3.tlpp)
- [Solução 10.4](https://github.com/naldodj/naldodj-xbase-leetcode-solutions/blob/main/src/tlpp/010/regular.expression.matching.10.4.tlpp)

---

## Conclusão

As soluções destacadas oferecem uma evolução no tratamento de correspondência de expressões regulares. Desde abordagens simples e diretas até técnicas otimizadas de programção dinâmica, estas implementações mostram como o problema pode ser abordado de múltiplas maneiras para atender a diferentes cenários e restrições.

## Links relevantes

- [Versão Harbour](https://github.com/naldodj/naldodj-xbase-leetcode-solutions/tree/main/src/hb/010)
- [Versão TLPP](https://github.com/naldodj/naldodj-xbase-leetcode-solutions/tree/main/src/tlpp/010)

---

## Hashtags

#LeetCode #RegexMatching #Harbour #TLPP #ProgramacaoDinamica #Algoritmos #DesafiosDeCodigo #Protheus #Tecnologia

Comentários

Postagens mais visitadas