Pular para o conteúdo principal

Postagem em destaque

BlackTDN :: LeetCode :: Comparando Implementações Harbour e TLPP para o Desafio Longest Palindromic Substring

_Créditos das imagens: ChatGPT_ ### LeetCode :: Comparando Implementações Harbour e TLPP para o Desafio Longest Palindromic Substring Resolver o problema do [Longest Palindromic Substring](https://leetcode.com/problems/longest-palindromic-substring/description/) é um exercício clássico de programação, que desafia desenvolvedores a encontrar a maior substring palindrômica dentro de uma string. Recentemente, exploramos soluções tanto em Harbour quanto em TLPP (Total Language Protheus Programming). Neste artigo, comparamos as implementações nessas duas linguagens, destacando suas semelhanças, diferenças e funcionalidades específicas. #### Implementações em Harbour ##### Versão 5.1 Essa solução utiliza a técnica de expansão a partir do centro do palíndromo. Cada caractere ou par de caracteres consecutivos é considerado um possível "centro". O algoritmo expande em ambas as direções enquanto os caracteres forem iguais, retornando o maior palíndromo encontrado. ##### Versão 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