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 :: utThread (tBigNThread) : Exemplo de Uso classe em AdvPL

Exemplo de uso para a classe em AdvPL: utThread (ndjlib031.prg).

Obs.: A classe utThread é completamente dependente de tBigNThread (tBigNThread.prg: um vez que deriva desta) então, para executar o exemplo de teste abaixo, compile, também, os programas que se encontram aqui.

Ao exemplo:

#include "tBigNumber.ch"

#define TST_MAXTHREAD 15

user procedure ThreadT1()
local oProcess:=MsNewProcess():New({||thProcess(oProcess)})
oProcess:Activate()
return

static function thProcess(oProcess)
Local oThread:=utThread():New(oProcess)
Local nThread
Local nThreads:=TST_MAXTHREAD
Local nValor1
Local nValor2
Local nTotal
oThread:Start(nThreads)
oProcess:SetRegua1(nThreads)
oProcess:SetRegua2(0)
For nThread:=1 To nThreads
nValor1:=nThread
nValor2:=(nThreads-nThread)
oProcess:IncRegua2()
if ((nThread%2)==0)
oThread:setEvent(nThread,{"u_Sum",nValor1,nValor2})
else
oThread:setEvent(nThread,"u_Sum('"+NToS(nValor1)+"','"+NToS(nValor2)+"')")
endif
oProcess:SetRegua1()
Next nThread
oThread:Notify()
oThread:Wait()
oThread:Join()
aResults:=oThread:getAllResults(.T.)
oThread:Finalize()
nTotal:=0
aEval(aResults,{|r,i|ConOut("Result Index["+NToS(i)+"]",r,Replicate("-",20)),nTotal+=Val(r)})
ConOut("Total:",nTotal)
return

user function Sum(xValor1,xValor2)
local nValor1:=if(valType(xValor1)=="C",Val(xValor1),xValor1)
local nValor2:=if(valType(xValor2)=="C",Val(xValor2),xValor2)
//-----------------------------------------------------------
//OBS.: NAO ESPERE QUE ESSA INFOMACAO SEJA IMPRESSA NA ORDEM
// AFINAL: MT
ConOut(;
Replicate("-",20),;
"[ProcName(2)]",ProcName(2),;
"[ProcName(1)]",ProcName(1),;
"[ProcName(0)]",ProcName(),;
"[ThreadID]",ThreadID(),;
"[nValor1]",nValor1,;
"[nValor2]",nValor2,;
Replicate("-",20);
)
return((nValor1+nValor2))

[]s

иαldσ dj


P.S.: Não entendeu nadinha? Isso não é Problema! Que tal dar uma passadinha antes no TUDO EM ADVPL.

Comentários

Postagens mais visitadas