ã¿ã€ãTRLEEncodedString = ãã€ãã® é å ã颿° RLEEncode ïŒ InMsg ïŒ ShortString ïŒ ïŒ TRLEEncodedString ;varMatchFl ïŒ ããŒã«å€ ;MatchCount ïŒ shortint ;EncodedString ïŒ TRLEEncodedString ;N ã i ïŒ ãã€ã ãå§ããN ïŒ = 0 ;SetLength ïŒ EncodedString ã 2 *é·ãïŒ InMsg ïŒ ïŒ ;äžæ¹ãé·ãïŒ InMsg ïŒ > = 1 doå§ããMatchFl ïŒ = ïŒé·ãïŒ InMsg ïŒ > 1 ïŒ ããã³ ïŒ InMsg [ 1 ] = InMsg [ 2 ] ïŒ ;MatchCount ïŒ = 1 ;while ïŒ MatchCount < = 126 ïŒ and ïŒ MatchCount <length ïŒ InMsg ïŒ ïŒ and ïŒ ïŒ InMsg [ MatchCount ] = InMsg [ MatchCount + 1 ] ïŒ = MatchFl ïŒ doMatchCount ïŒ = MatchCount + 1 ;MatchFlã®å Žåå§ããN ïŒ = N + 2 ;EncodedString [ N - 2 ] ïŒ = MatchCount + 128 ;EncodedString [ N - 1 ] ïŒ = ord ïŒ InMsg [ 1 ] ïŒ ;çµããä»ã«å§ããMatchCount <>é·ãïŒ InMsg ïŒã® å ŽåMatchCount ïŒ = MatchCount - 1 ;N ïŒ = N + 1 + MatchCount ;EncodedString [ N - 1 - MatchCount ] ïŒ = -MatchCount + 128 ;for i ïŒ = 1 ãã MatchCount ãžEncodedString [ N - 1 - MatchCount + i ] ïŒ = ord ïŒ InMsg [ i ] ïŒ ;çµãã ;åé€ïŒ InMsg ã 1 ã MatchCount ïŒ ;çµãã ;SetLength ïŒ EncodedString ã N ïŒ ;RLEEncode ïŒ = EncodedString ;çµãã ;
ã¿ã€ãTRLEEncodedString = ãã€ãã® é å ã颿° RLEDecode ïŒ InMsg ïŒ TRLEEncodedString ïŒ ïŒ ShortString ;varRepeatCount ïŒ shortint ;i ã j ïŒ åèª ãOutMsg ïŒ ShortString ;å§ããOutMsg ïŒ = '' ;i ïŒ = 0 ;äžæ¹ã i <é·ãïŒ InMsg ïŒ ã¯å§ããRepeatCount ïŒ = InMsg [ i ] -128 ;i ïŒ = i + 1 ;RepeatCount < 0ã® å Žåå§ããRepeatCount ïŒ = abs ïŒ RepeatCount ïŒ ;for j ïŒ = i to i + RepeatCount - 1 doOutMsg ïŒ = OutMsg + chr ïŒ InMsg [ j ] ïŒ ;i ïŒ = i + RepeatCount ;çµããä»ã«å§ããfor j ïŒ = 1 to RepeatCount doOutMsg ïŒ = OutMsg + chr ïŒ InMsg [ i ] ïŒ ;i ïŒ = i + 1 ;çµãã ;çµãã ;RLEDecode ïŒ = OutMsg ;çµãã ;
constEOMsg = '|' ;颿° BWTEncode ïŒ InMsg ïŒ ShortString ïŒ ïŒ ShortString ;varOutMsg ïŒ ShortString ;ShiftTable ïŒ ShortStringã®é å ãLastChar ïŒ ANSIChar ;N ã i ïŒ åèª ãå§ããInMsg ïŒ = InMsg + EOMsg ;N ïŒ =é·ãïŒ InMsg ïŒ ;SetLength ïŒ ShiftTable ã N + 1 ïŒ ;ShiftTable [ 1 ] ïŒ = InMsg ;for i ïŒ = 2 ãã Nå§ããLastChar ïŒ = InMsg [ N ] ;InMsg ïŒ = LastChar + copy ïŒ InMsg ã 1 ã N - 1 ïŒ ;ShiftTable [ i ] ïŒ = InMsg ;çµãã ;ãœãŒãïŒ ShiftTable ïŒ ;OutMsg ïŒ = '' ;for i ïŒ = 1 ãã NOutMsg ïŒ = OutMsg + ShiftTable [ i ] [ N ] ;BWTEncode ïŒ = OutMsg ;çµãã ;
constEOMsg = '|' ;颿° BWTDecode ïŒ InMsg ïŒ ShortString ïŒ ïŒ ShortString ;varOutMsg ïŒ ShortString ;ShiftTable ïŒ ShortStringã®é å ãN ã i ã j ïŒ åèª ãå§ããOutMsg ïŒ = '' ;N ïŒ =é·ãïŒ InMsg ïŒ ;SetLength ïŒ ShiftTable ã N + 1 ïŒ ;for i ïŒ = 0 ãã NShiftTable [ i ] ïŒ = '' ;for i ïŒ = 1 ãã Nå§ããjã®å ŽåïŒ = 1 ãã NShiftTable [ j ] ïŒ = InMsg [ j ] + ShiftTable [ j ] ;ãœãŒãïŒ ShiftTable ïŒ ;çµãã ;for i ïŒ = 1 ãã NShiftTable [ i ] [ N ] = EOMsgã®å ŽåOutMsg ïŒ = ShiftTable [ i ] ;åé€ïŒ OutMsg ã N ã 1 ïŒ ;BWTDecode ïŒ = OutMsg ;çµãã ;
ã¿ã€ãTDictionary = ã¬ã³ãŒãWordCount ïŒ ãã€ã ;åèªïŒ æååã® é å ;çµãã ;
constMAX_DICT_LENGTH = 256 ;颿° FindInDict ïŒ D ïŒ TDictionary ; str ïŒ ShortString ïŒ ïŒ æŽæ° ;varr ïŒ æŽæ° ;i ïŒ æŽæ° ;fl ïŒ ããŒã«å€ ;å§ããr ïŒ = - 1 ;Dã®å Žå WordCount > 0 thenå§ããi ïŒ = D WordCountfl ïŒ = false ;while ïŒ not fl ïŒ and ïŒ i> = 0 ïŒ doå§ããi ïŒ = i - 1 ;fl ïŒ = D åèª [ i ] = str ;çµãã ;çµãã ;ãããªããªãr ïŒ = i ;FindInDict ïŒ = r ;çµãã ;ããã·ãŒãžã£ AddToDict ïŒ var D ïŒ TDictionary ; str ïŒ ShortString ïŒ ;å§ããDã®å Žå WordCount <MAX_DICT_LENGTH ãã®åŸå§ããD. WordCount ïŒ = D WordCount + 1 ;SetLength ïŒ D. ã¯ãŒã ã Dã ã¯ãŒãã«ãŠã³ãïŒ ;D. èšè [ D. WordCount - 1 ] ïŒ = str ;çµãã ;çµãã ;
颿° LZWEncode ïŒ InMsg ïŒ ShortString ïŒ ïŒ TEncodedString ;varOutMsg ïŒ TEncodedString ;tmpstr ïŒ ShortString ;D ïŒ TDictionary ;i ã N ïŒ ãã€ã ãå§ããSetLength ïŒ OutMsg ãé·ãïŒ InMsg ïŒ ïŒ ;N ïŒ = 0 ;InitDict ïŒ D ïŒ ;äžæ¹ãé·ãïŒ InMsg ïŒ > 0 doå§ããtmpstr ïŒ = InMsg [ 1 ] ;while ïŒ FindInDict ïŒ D ã tmpstr ïŒ > = 0 ïŒ ããã³ ïŒ length ïŒ InMsg ïŒ > length ïŒ tmpstr ïŒ ïŒ dotmpstr ïŒ = tmpstr + InMsg [é·ãïŒ tmpstr ïŒ + 1 ] ;FindInDict ïŒ D ã tmpstr ïŒ < 0ã® å Žååé€ïŒ tmpstr ãé·ãïŒ tmpstr ïŒ ã 1 ïŒ ;OutMsg [ N ] ïŒ = FindInDict ïŒ D ã tmpstr ïŒ ;N ïŒ = N + 1 ;åé€ïŒ InMsg ã 1 ãé·ãïŒ tmpstr ïŒ ïŒ ;é·ãïŒ InMsg ïŒ > 0ã® å ŽåAddToDict ïŒ D ã tmpstr + InMsg [ 1 ] ïŒ ;çµãã ;SetLength ïŒ OutMsg ã N ïŒ ;LZWEncode ïŒ = OutMsg ;çµãã ;
颿° LZWDecode ïŒ InMsg ïŒ TEncodedString ïŒ ïŒ ShortString ;varD ïŒ TDictionary ;OutMsg ã tmpstr ïŒ ShortString ;i ïŒ ãã€ã ;å§ããOutMsg ïŒ = '' ;tmpstr ïŒ = '' ;InitDict ïŒ D ïŒ ;for i ïŒ = 0 ãã length ïŒ InMsg ïŒ -1 doå§ããInMsg [ i ] > = Dã®å Žå ã¯ãŒãã«ãŠã³ãtmpstr ïŒ = Dã åèª [ InMsg [ i - 1 ] ] + D èšè [ InMsg [ i - 1 ] ] [ 1 ]ä»ã«tmpstr ïŒ = Dã èšè [ InMsg [ i ] ] ;OutMsg ïŒ = OutMsg + tmpstr ;i> 0ã® å ŽåAddToDict ïŒ D ã D. ã¯ãŒã [ InMsg [ i - 1 ] ] + tmpstr [ 1 ] ïŒ ;çµãã ;LZWDecode ïŒ = OutMsg ;çµãã ;
Source: https://habr.com/ru/post/J251295/More articles:ïŒãããªïŒHP Helionãã¬ãŒã³ããŒã·ã§ã³å€ãã®ITã¹ã¿ãããMacOSã奜ãŸãªãçç±éçJavaScriptã¢ãã©ã€ã¶ãŒãšãåŠç¿ã«åœ¹ç«ã€ãšã©ãŒïŒããŒã1ïŒ2æ2æMicrosoft Azureãã©ãããã©ãŒã ã¢ããããŒãã®æŠèŠLibreOffceã¯PVS-Studioã§ã©ã®ãããªãã°ãçºèŠããŸãããïŒEkspozzer-ãããªããããã©ããäœæãããããªã¹ããªãŒã ãå¹³ååãã倩æ°äºå ±ã©ã³ãIBMã¯ãSoftlayer IntroductionããŠã§ãããŒã«æåŸ ããŸãWi-Fiã¯è¯ãã§ãããæ®éã§ãã ãªãã£ã¹ã©ãã«ã¹ã®ç·Žç¿Wordpressã®å©ç¹All Articles