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 :: Harbour CodeBlock

Observe o fragmento de código abaixo e deleite-se com uma das maravilhas da evolução da sintaxe xBase no Harbour: O CodeBlock é, de fato, um CodeBlock.

   1: METHOD start( xAction, ... ) CLASS THREAD
   2:  
   3:    IF ::active
   4:       RETURN .F.
   5:  
   6:    ELSE
   7:       ::pThreadID := hb_threadStart( HB_THREAD_INHERIT_PUBLIC, ;
   8:             {| ... |
   9:                LOCAL nTime
  10:  
  11:                ThreadObject( Self )
  12:  
  13:                ::active := .T.
  14:                ::startCount++
  15:  
  16:                IF HB_ISNUMERIC( ::startTime )
  17:                   nTime := ::startTime - Seconds()
  18:                   IF nTime < 0
  19:                      nTime += 86400
  20:                   ENDIF
  21:                   hb_idleSleep( nTime )
  22:                   ::startTime := NIL
  23:                ENDIF
  24:  
  25:                ::atStart( ... )
  26:                IF HB_ISBLOCK( ::_atStart )
  27:                   Eval( ::_atStart, ... )
  28:                ENDIF
  29:  
  30:                WHILE .T.
  31:  
  32:                   nTime := hb_MilliSeconds()
  33:  
  34:                   BEGIN SEQUENCE
  35:                      IF ! Empty( xAction ) .AND. ValType( xAction ) $ "CBS"
  36:                         ::result := Do( xAction, ... )
  37:                      ELSE
  38:                         ::result := ::execute( ... )
  39:                      ENDIF
  40:                   ALWAYS
  41:                      __QuitCancel()
  42:                   ENDSEQUENCE
  43:  
  44:                   nTime := Int( ( hb_MilliSeconds() - nTime ) / 10 )
  45:                   ::deltaTime := nTime
  46:  
  47:                   /* TODO: when ::startTime is set execution is suspended
  48:                    *       but I do not know the exact conditions and how
  49:                    *       it can be resumed
  50:                    */
  51:  
  52:                   IF ! HB_ISNUMERIC( ::interval )
  53:                      EXIT
  54:                   ENDIF
  55:  
  56:                   nTime := ::interval - ::deltaTime
  57:                   IF nTime > 0
  58:                      hb_idleSleep( nTime / 100 )
  59:                   ENDIF
  60:                   ::startCount++
  61:  
  62:                ENDDO
  63:  
  64:                ::atEnd( ... )
  65:                IF HB_ISBLOCK( ::_atEnd )
  66:                   Eval( ::_atEnd, ... )
  67:                ENDIF
  68:                ::active := .F.
  69:  
  70:                RETURN NIL
  71:             }, ... )
  72:  
  73:       ::threadID := IIF( ::pThreadID == NIL, 0, hb_threadID( ::pThreadID ) )
  74:  
  75:    ENDIF
  76:  
  77: RETURN .T.

[]s
иαldσ dj

Comentários

Postagens mais visitadas