Pular para o conteúdo principal

Postagem em destaque

BlackTDN :: Leetcode :: Resolvendo o Desafio "Longest Common Prefix" usando Harbour e TLPP

_Créditos das imagens: ChatGPT_ ### Leetcode :: Resolvendo o Desafio "Longest Common Prefix" usando Harbour e TLPP O problema [**"Longest Common Prefix"**](https://leetcode.com/problems/longest-common-prefix/description/), do Leetcode, consiste em encontrar o maior prefixo comum entre um array de strings. Se não houver prefixo comum, o resultado deve ser uma string vazia. Neste artigo, apresento as técnicas utilizadas para resolver o desafio nas linguagens **Harbour** e **TLPP**, com links para os códigos-fonte e uma explicação detalhada. --- #### Descrição do Problema Dado um array de strings, encontrar o maior prefixo comum entre todas as strings do array. **Exemplo de Entrada e Saída:** | Input |-Output-|-Expected-|-Matched-| |:----------------------------------------------------|:------:|:--------:|:-------:| | `["flower","flow","flight"]` | `fl` | `fl` ...

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

_Créditos das imagens: ChatGPT_

# BlackTDN :: LeetCode :: Reverse Integer: Implementando Soluções em xBase (Harbour) e TL++

## Introdução

Este artigo explora e compara diferentes abordagens para resolver o desafio de [inverter um número inteiro de 32 bits](https://leetcode.com/problems/reverse-integer/description/), garantindo que o resultado permaneça dentro dos limites definidos. O desafio foi implementado nas linguagens Harbour e TL++ (Totvs Language Plus Plus), apresentando três variações em cada uma.

---

## Soluções em Harbour

### Solução 1: Conversão para String e Inversão

**Descrição:** Nesta abordagem, o número é convertido para uma string, seus caracteres são invertidos, e a string resultante é reconvertida para número.

**Passos:**
1. Conversão do valor absoluto para uma string.
2. Inversão dos caracteres da string.
3. Reconversão para número, aplicando o sinal original.
4. Validação para garantir que o número resultante está dentro dos limites de 32 bits.

[Ver código](https://github.com/naldodj/naldodj-xbase-leetcode-solutions/blob/main/src/hb/007/reverse_integer.7.1.prg)

---

### Solução 2: Extração e Construção de Dígitos

**Descrição:** Os dígitos do número são extraídos um a um e acumulados para formar o número invertido.

**Passos:**
1. Extração do último dígito usando operações de módulo e divisão.
2. Construção incremental do número invertido.
3. Validação contínua para evitar estouro dos limites de 32 bits.

[Ver código](https://github.com/naldodj/naldodj-xbase-leetcode-solutions/blob/main/src/hb/007/reverse_integer.7.2.prg)

---

### Solução 3: Uso de Notação Hexadecimal

**Descrição:** Utiliza notação hexadecimal para definir limites, combinando clareza e eficiência.

**Passos:**
1. Definição de limites em notação hexadecimal.
2. Processo idêntico ao da Solução 2 para extração e reconstrução do número.

[Ver código](https://github.com/naldodj/naldodj-xbase-leetcode-solutions/blob/main/src/hb/007/reverse_integer.7.3.prg)

---

## Soluções em TL++ (Totvs Language Plus Plus)

### Solução 1: Conversão para String e Inversão

**Descrição:** Similar à solução em Harbour, converte o número em string, inverte os caracteres e valida o resultado.

[Ver código](https://github.com/naldodj/naldodj-xbase-leetcode-solutions/blob/main/src/tlpp/007/reverse_integer.7.1.tlpp)

---

### Solução 2: Extração e Construção de Dígitos

**Descrição:** Replica o método de extração e reconstrução incremental, garantindo validações contínuas.

[Ver código](https://github.com/naldodj/naldodj-xbase-leetcode-solutions/blob/main/src/tlpp/007/reverse_integer.7.2.tlpp)

---

### Solução 3: Simulação de Notação Hexadecimal

**Descrição:** Diferente do Harbour, TL++ não possui suporte nativo para notação hexadecimal. Essa limitação é superada utilizando a diretiva `#xtranslate` para simular a conversão de valores hexadecimais para decimais por meio da função `__HexToDec`.

**Exemplo:**
```tlpp
// TL++ não tem suporte, ainda, para notação hexadecimal de forma nativa
#xtranslate 0x0 => __HexToDec("0x0")
#xtranslate 0xA => __HexToDec("0xA")
#xtranslate 0x80000000 => __HexToDec("0x80000000")
#xtranslate -0x80000000 => __HexToDec("-0x80000000")
#xtranslate 0x7FFFFFFF => __HexToDec("0x7FFFFFFF")
```

[Ver código](https://github.com/naldodj/naldodj-xbase-leetcode-solutions/blob/main/src/tlpp/007/reverse_integer.7.3.tlpp)

---

## Considerações Finais

As soluções apresentadas destacam as forças e limitações de Harbour e TL++. Enquanto o Harbour se beneficia de um suporte mais completo à notação hexadecimal, TL++ demonstra flexibilidade ao oferecer alternativas como o uso de `#xtranslate`. Ambas as linguagens oferecem abordagens robustas para resolver o problema, destacando a criatividade e o pragmatismo do desenvolvedor.

---

## Hashtags

#Harbour #TLPP #TOTVS #LeetCode #Programação #Inteiros32Bits #LógicaDeProgramação #DesenvolvimentoDeSoluções #Xbase #DesafiosDeCódigo

Comentários

Postagens mais visitadas