Pular para o conteúdo principal

Postagem em destaque

BlackTDN :: LeetCode (17) :: Comparando Implementações do Desafio "Letter Combinations of a Phone Number" em Harbour e TOTVS TLPP

_Créditos das imagens: ChatGPT_ # LeetCode (17) :: Comparando Implementações do Desafio "Letter Combinations of a Phone Number" em Harbour e TOTVS TLPP O desafio [**"Letter Combinations of a Phone Number"**](https://leetcode.com/problems/letter-combinations-of-a-phone-number/description/) (Combinações de Letras de um Número de Telefone) é um problema clássico de programação que envolve a geração de todas as combinações possíveis de letras que um número de telefone pode representar, com base no mapeamento tradicional dos teclados de telefone. Abaixo, comparamos duas implementações desse desafio: uma em **Harbour** e outra em **TOTVS TLPP** (TOTVS Language Plus Plus). ## O Desafio Dada uma string contendo dígitos de 2 a 9, retorne todas as combinações possíveis de letras que esses dígitos podem representar. O mapeamento dos dígitos para as letras é o mesmo dos teclados de telefone tradicionais: - 2: "abc" - 3: "def" - 4: "ghi" - 5: ...

BlackTDN :: Resolvendo Problemas do LeetCode com xBase/TLPP: Um Novo Repositório de Soluções



_Créditos das imagens: ChatGPT_

### Resolvendo Problemas do [LeetCode](https://leetcode.com/problemset/) com (x)Base/TLPP: Um Novo Repositório de Soluções
O LeetCode é uma das plataformas mais populares para praticar algoritmos e estruturas de dados, oferecendo desafios que testam a lógica e a habilidade de resolução de problemas. Inspirado pela necessidade de explorar esses conceitos na linguagem **(x)Base**, criei o repositório [naldodj-(x)Base-leetcode-solutions](https://github.com/naldodj/naldodj-(x)Base-leetcode-solutions). 

Este repositório é um espaço dedicado para compartilhar soluções de problemas do LeetCode utilizando (x)Base/TLPP, promovendo aprendizado e inovação com esta linguagem clássica, mas ainda poderosa.
### Por que (x)Base/TLPP?  

A linguagem (x)Base/TLPP tem suas raízes no desenvolvimento de aplicações empresariais robustas, mas também oferece recursos versáteis para implementar algoritmos complexos. Resolver problemas do LeetCode com (x)Base não apenas reforça fundamentos de programação, mas também demonstra a capacidade da linguagem em aplicações modernas.
### Exemplo: Encontrando o Número Único  

A seguir, apresento um exemplo extraído do repositório. Este código resolve o problema de encontrar um número único em um array, considerando dois cenários:  
1. Um número aparece apenas uma vez, enquanto todos os outros aparecem **duas vezes**.  
2. Um número aparece apenas uma vez, enquanto todos os outros aparecem **três vezes**.

```(x)Base
/*
    Problem:
    1. Given an array of integers where every element appears three times except for one, 
       find the unique element that appears once.

    2. Given an array of integers where every element appears two times except for one, 
       find the unique element that appears once.

    Constraints:
    - Linear runtime complexity (O(n)).
    - No additional memory usage (constant space).
*/

function Main()

    local aNumbers as array
    local nOne as numeric

    // Case 1: Numbers appear two times
    aNumbers := {2, 3, 4, 1, 4, 3, 2}
    ? "Input Array (Two Times):", hb_JSONEncode(aNumbers)
    ? ""
    nOne := singleNumber(aNumbers)
    ? "The Single Number is:", nOne
    ? ""

    // Case 2: Numbers appear three times
    aNumbers := {6, 5, 9, 6, 4, 1, 7, 7, 3, 6, 10, 3, 9, 8, 5, 7, 10, 10, 3, 1, 4, 4, 5, 8, 2, 1, 8, 9}
    ? "Input Array (Three Times):", hb_JSONEncode(aNumbers)
    ? ""
    nOne := singleNumber(aNumbers)
    ? "The Single Number is:", nOne
    ? ""

return nil

// Function to find the single number in the array
static function singleNumber(aNumbers as array)

    local i, nLen as numeric
    local nOne as numeric := 0
    local nNoOne as numeric := 0

    nLen := Len(aNumbers) 

    if (Mod(nLen, 2) != 0)
        // Case 1: Numbers appear twice
        for i := 1 to nLen
            nOne := hb_bitXor(nOne, aNumbers[i])
        next i        
    else
        // Case 2: Numbers appear three times    
        for i := 1 to nLen
            if (hb_bitAnd(nNoOne, aNumbers[i]) == 0)
                nOne := hb_bitXor(nOne, aNumbers[i])
            endif
            if (hb_bitAnd(nOne, aNumbers[i]) == 0)
                nNoOne := hb_bitXor(nNoOne, aNumbers[i])
            endif
        next i
    endif
    
    return (nOne)
```

### Detalhes do Código  

- **Eficiência:** A solução utiliza operações de bit (XOR e AND) para alcançar a complexidade \(O(n)\).  
- **Generalização:** A lógica adapta-se dinamicamente para arrays que seguem diferentes padrões de repetição.  
- **Legibilidade:** Cada passo do código é claro, permitindo fácil compreensão e aprendizado.  

### Conclusão  

O repositório [naldodj-(x)Base-leetcode-solutions](https://github.com/naldodj/naldodj-(x)Base-leetcode-solutions) é uma contribuição para a comunidade de desenvolvedores interessados em resolver problemas algorítmicos usando (x)Base. Sinta-se à vontade para explorar, contribuir e aprimorar essas soluções.

Se você tem interesse em algoritmos, estruturas de dados ou na linguagem (x)Base, este repositório pode ser um excelente recurso de aprendizado.

---

Comentários

Postagens mais visitadas