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: ...
Naldo parabéns pelo blog, queria te mandar um e-mail não encontrei em nenhum lugar.
ResponderExcluirQuero tirar uma dúvida que não tem a ver com esse post, é a seguinte:
Qual a diferença em usar a função ASCAN do advpl ou procurar o que eu quero utilizando laço FOR?
Essa função tem alguma mágica, é mais rápida?
Jackson,
ExcluirNas aulas que ministro costumo mostrar, usando AdvPL, uma simulação do funcionamento das funções aEval e aSort... Vou montar um exemplo da aScan e publicar.
Mas uma afirmativa é certa: Utilize aScan, vai rodar em C++, no server, muito mais rápida do que um laço For/Next.
Como exemplo:
#include "rwmake.ch"
#include "protheus.ch"
#xtranslate MsgOut([]) => (ConOut([]),MsgBox([]))
//-----------------------------------------------------------------------------
//BlackTDN :: Simulando aSort e aEval
//-----------------------------------------------------------------------------
User Function aOrdena()
Local aArray := {10,9,7,4,3,2,5,6,78,89,0,43,2,4,65}
Local aCopy := aClone(aArray)
Local cMsg := ""
Local cCRLF := CRLF
//-----------------------------------------------------------------------------
//Usando a funcao padrao
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
//Função aEval() : http://tdn.totvs.com/display/tec/AEVal
//-----------------------------------------------------------------------------
aEval(aArray,{|nValor|cMsg+=Str(nValor)+cCRLF})
MsgOut(cMsg,OemToAnsi("Eval|aSort Padrão: Resultado Não Ordenado"),"INFO")
cMsg := ""
//-----------------------------------------------------------------------------
//Função aSort() : http://tdn.totvs.com/pages/viewpage.action?pageId=23889126
//-----------------------------------------------------------------------------
aSort(aArray,NIL,NIL,{|nMenor,nMaior|nMenornMaior})
aEval(aArray,{|nValor|cMsg+=Str(nValor)+cCRLF})
MsgOut(cMsg,OemToAnsi("Eval|aSort Padrão: Resultado Ordem Decrescente"),"INFO")
cMsg := ""
//-----------------------------------------------------------------------------
//Usando a funcao customizada
//-----------------------------------------------------------------------------
aSize(aArray,0)
__aEval(aCopy,{|e|aAdd(aArray,e)})
__aEval(aArray,{|nValor|cMsg+=Str(nValor)+cCRLF})
MsgOut(cMsg,OemToAnsi("Eval|aSort Padrão: Resultado Não Ordenado"),"INFO")
cMsg := ""
__aSort(aArray,NIL,NIL,{|nMenor,nMaior|nMenornMaior})
__aEval(aArray,{|nValor|cMsg+=Str(nValor)+cCRLF})
MsgOut(cMsg,OemToAnsi("__aEval|__aSort Customizadas : Resultado Ordem Decrescente"),"INFO")
cMsg := ""
Return(NIL)
//-----------------------------------------------------------------------------
//Simulando aSort padrao
//-----------------------------------------------------------------------------
Static Function __aSort(aArray,nStart,nCount,bEval)
Local nD
Local nJ
Local uTmp
DEFAULT nStart := 1
DEFAULT nCount := Len( aArray )
For nD := nStart To nCount
For nJ := nD To nCount
IF Eval(bEval,aArray[nJ],aArray[nD])
uTmp := aArray[nD]
aArray[nD] := aArray[nJ]
aArray[nJ] := uTmp
EndIF
Next nJ
Next nI
Return(aArray)
//-----------------------------------------------------------------------------
//Simulando aEval padrao
//-----------------------------------------------------------------------------
Static Function __aEval(aArray,bEval,nStart,nCount)
Local nD
Local nJ
DEFAULT nStart := 1
DEFAULT nCount := Len(aArray)
nJ := nCount
For nD := nStart To nJ
//Função Eval() :: http://tdn.totvs.com.br/pages/viewpage.action?pageId=24346635
Eval(bEval,aArray[nD],nD)
Next nD
Return(aArray)
Beleza Naldo obrigado!
ResponderExcluirVocê poderia montar um post com dicas sobre essas funções que são mais rápidas hein.. hehe
Valeu abs!