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....

Protheus :: ADVPL :: Ponto de Entrada PNMTABC01 (edição do array aTabCalend)

E, pra matar a saudade, … , uma palhinha no SIGAPON.

Exemplo de implementação do Ponto de Entrada PNMTABC01 para a edição do array aTabCalend.

   1: #include "protheus.ch"
   2: #include "poncalen.ch"
   3:  
   4: /*/
   5:     Funcao:  U_PNMTABC01
   6:     Data:    28/12/2011
   7:     Autor:   Marinaldo de Jesus
   8:     Uso:     Ponto de Entrada para edicao do array aTabCalend
   9: */
  10: User Function PNMTABC01()
  11:  
  12:     Local aAfasta      := {}
  13:     Local aTabCalend   := ParamIxb[1]
  14:  
  15:     Local lCriaCalOk  := ParamIxb[2]
  16:     Local lAfastper   := .F.
  17:  
  18:     Local cTipAfas
  19:  
  20:     Local dData:= ( dPerIni - 1 )
  21:     Local dIniAfas
  22:     Local dFimAfas
  23:     
  24:     Local nPosTabIni
  25:     Local nPosTabFim
  26:     
  27:     Local uRet
  28:  
  29:     BEGIN SEQUENCE
  30:  
  31:         IF !( StacksApon() )
  32:             BREAK
  33:         EndIF
  34:  
  35:         IF !( lCriaCalOk )
  36:             BREAK
  37:         EndIF
  38:  
  39:         lAfastper        := SRA->(fAfastaPer(@aAfasta,dPerIni,dPerFim,RA_FILIAL,RA_MAT))
  40:         IF !( lAfastper )
  41:             BREAK
  42:         EndIF
  43:  
  44:         IF !( Type( "aTabPadrao" ) == "A" )
  45:             Private aTabPadrao := {}
  46:         EndIF
  47:  
  48:         While ( ( ++dData ) <= dPerFim )
  49:  
  50:             dIniAfas    := Ctod("//")
  51:             dFimAfas    := Ctod("//")
  52:             lAfast        := SRA->(fAfasta(RA_FILIAL,RA_MAT,dData,@dIniAfas,@dFimAfas,@cTipAfas,aAfasta))
  53:  
  54:             IF (;
  55:                     !( lAfast );
  56:                     .or.;
  57:                     !( cTipAfas == "Y" );
  58:                 )    
  59:                 Loop
  60:             EndIF
  61:  
  62:             uRet    := GetInfoPosTab(;
  63:                         CALEND_POS_TIPO_DIA ,;//01:Posicao em aTabCalend para Obtencao da Informacao
  64:                         "1E"                ,;//02:Flag da Marcacao "1E,1S,..."
  65:                         dData               ,;//03:Data em aTabCalend
  66:                         aTabCalend          ,;//04:Calendario de Marcacoes
  67:                         aTabPadrao          ,;//05:Tabela de Horario Padrao
  68:                         dPerIni             ,;//06:Periodo Inicial de Apontamento
  69:                         dPerFim             ,;//07:Periodo Final de Apontamento    
  70:                         .T.                 ,;//08:Informacao Referente a Funcionario
  71:                         SRA->RA_TNOTRAB     ,;//09:Turno de Trabalho
  72:                         SRA->RA_SEQTURN     ,;//10:Sequencia
  73:                         SRA->RA_FILIAL      ,;//11:Filial
  74:                         .T.                 ,;//12:Carrega Excecoes 
  75:                         NIL                 ,;//13:Bloco para Pesquisa em aTabCalend
  76:                         @nPosTabIni          ;//14:Retorno da Posicao do aTabCalend     
  77:                     )    
  78:  
  79:             IF !( uRet == "N" )
  80:                 Loop
  81:             EndIF
  82:  
  83:             uRet    := GetInfoPosTab(;
  84:                         CALEND_POS_TIPO_DIA ,;//01:Posicao em aTabCalend para Obtencao da Informacao
  85:                         "__LASTMARC__"      ,;//02:Flag da Marcacao "1E,1S,..."
  86:                         dData               ,;//03:Data em aTabCalend
  87:                         aTabCalend          ,;//04:Calendario de Marcacoes
  88:                         aTabPadrao          ,;//05:Tabela de Horario Padrao
  89:                         dPerIni             ,;//06:Periodo Inicial de Apontamento
  90:                         dPerFim             ,;//07:Periodo Final de Apontamento    
  91:                         .T.                 ,;//08:Informacao Referente a Funcionario
  92:                         SRA->RA_TNOTRAB     ,;//09:Turno de Trabalho
  93:                         SRA->RA_SEQTURN     ,;//10:Sequencia
  94:                         SRA->RA_FILIAL      ,;//11:Filial
  95:                         .T.                 ,;//12:Carrega Excecoes 
  96:                         NIL                 ,;//13:Bloco para Pesquisa em aTabCalend
  97:                         @nPosTabFim          ;//14:Retorno da Posicao do aTabCalend     
  98:                     )    
  99:  
 100:             nPosTabIni -= 1
 101:             While ( ( ++nPosTabIni ) <= nPosTabFim )
 102:                 aTabCalend[ nPosTabIni ][ CALEND_POS_TIPO_DIA ] := "S"
 103:                 aTabCalend[ nPosTabIni ][ CALEND_POS_AFAST    ] := .F.
 104:             End While    
 105:  
 106:         End While
 107:  
 108:     END SEQUENCE
 109:  
 110: Return( aTabCalend )
 111:  
 112: /*/
 113:     Funcao: StacksApon
 114:     Data:   28/12/2011
 115:     Autor:  Marinaldo de Jesus
 116:     Uso:    Verifica se esta nas Rotinas de Apontamento de Marcacoes
 117: */
 118: Static Function StacksApon()
 119:  
 120:     Local aStacks    := {}
 121:     
 122:     Local lStack    := .F.
 123:     
 124:     Local nStack
 125:     Local nStacks
 126:  
 127:     aAdd( aStacks , { "PONA040" , .F. } )
 128:     aAdd( aStacks , { "PONA280" , .F. } )
 129:     aAdd( aStacks , { "PONA230" , .F. } )
 130:     aAdd( aStacks , { "PONM010" , .F. } )
 131:  
 132:     nStacks := Len( aStacks )
 133:     For nStack := 1 To nStacks
 134:         lStack                    := IsInCallStack( aStacks[ nStack ][ 1 ] )
 135:         aStacks[ nStack ][ 2 ]    := lStack
 136:         IF ( lStack )
 137:             Exit
 138:         EndIF
 139:     Next nStack
 140:  
 141: Return( lStack )

[]s
иαldσ dj

Comentários

Postagens mais visitadas