[ad_1]
Bản thân mã này không nén ..
Nhưng khi được sử dụng cùng với Zlib, nó sẽ nén ..
Xem Compress_loop()
nó bắt đầu ở phần cuối của luồng đầu vào hex và bình phương từng chữ số.
nếu đặt chữ số thập lục phân cuối cùng vào đầu ra và mang phần còn lại sang chữ số đầu vào tiếp theo.
Tôi đang tìm người có thể giải nén đầu ra của nó …
[edit]
Từ OP, được đăng dưới dạng giải pháp:
Trích dẫn:Nguồn được viết bằng FreeBasic
[/edit]
Những gì tôi đã thử:
Declare Function compress_loop( chrs as string ) as string Declare Function decompress_loop( chrs as string ) as string screen 19 '===================================================================== '===================================================================== 'start program '===================================================================== '===================================================================== dim as double time1 , time2 , time3 , time4 do randomize dim as string s = "" For n As Long = 1 To 8 s+=chr(Int(Rnd*256)) Next time1=timer 'begin compress dim as string comp = s 'do ' dim as longint chk = len(comp) - 1 ' comp = compress_loop(comp) ' if len(comp) >= chk then exit do 'loop for a as longint = 1 to 1 step 1 comp = compress_loop(comp) next 'end compress time2 = timer time3=timer 'begin decompress dim as string final_out = comp for a as longint = 1 to 1 step 1 final_out = decompress_loop(final_out) next 'end decompress time4 = timer 'sleep 'cls 'draw string( 0,10) , left(s,100) 'draw string( 0,30) , left(final_out,100) print string(99,"=") print "inp = " ; (s) print string(99,"=") print "out = " ; (final_out) print print "compress time = "; time2-time1 print "decompress time = "; time4-time3 print if s = final_out then print "Decompressed OK" else print "Decompression failed." print string(99,"=") sleep loop until inkey = chr(27) sleep end '=============================================================================== '=============================================================================== 'compress '=============================================================================== '=============================================================================== Function compress_loop( chrs as string ) as string print "c inp = " ; len(chrs) dim as string bits = "" dim as string zeros = string( 2 , "0" ) dim as string n1 dim as ubyte ptr usp = cptr( ubyte ptr , strptr( chrs ) ) for a as longint = 1 to len( chrs ) step 1 n1 = zeros + hex( *usp ) : usp+= 1 n1 = right( n1 , 2 ) bits+= n1 next print "c bin = " ; len(bits) , bits dim as string outs1 = string( len( bits ) , "0" ) dim as string s1 , s2 , s3 dim as longint v1 , v2 , carry zeros = "000" for a as longint = len( bits ) to 1 step - 1 's1 = str( ( val( "&H" + mid( bits , a , 1 ) ) ^ 2 ) + carry ) : carry = 0 's2 = right( "000" + hex( val( s1 ) ) , 3 ) v1 = bits[ a - 1 ] if v1 = 48 then v2 = 000 + carry : goto done if v1 = 49 then v2 = 001 + carry : goto done if v1 = 50 then v2 = 004 + carry : goto done if v1 = 51 then v2 = 009 + carry : goto done if v1 = 52 then v2 = 016 + carry : goto done if v1 = 53 then v2 = 025 + carry : goto done if v1 = 54 then v2 = 036 + carry : goto done if v1 = 55 then v2 = 049 + carry : goto done if v1 = 56 then v2 = 064 + carry : goto done if v1 = 57 then v2 = 081 + carry : goto done if v1 = 65 then v2 = 100 + carry : goto done if v1 = 66 then v2 = 121 + carry : goto done if v1 = 67 then v2 = 144 + carry : goto done if v1 = 68 then v2 = 169 + carry : goto done if v1 = 69 then v2 = 196 + carry : goto done if v1 = 70 then v2 = 225 + carry : goto done done: carry = 0 s2 = zeros + hex( v2 ) s2 = right( s2 , 3 ) carry = val( "&H" + left( s2 , 2 ) ) s3 = right( s2 , 1 ) outs1[ a - 1 ] = s3[ 0 ] 'print v1 , s2 , s3 ', outs1 'sleep 'if inkey = " " then end next if carry > 0 then outs1 = hex( carry ) + outs1 print "c out = " ; len( outs1 ) , outs1 dim as ubyte count = 0 if len( outs1 ) mod 2 = 1 then outs1+= "0" : count = 1 dim as string final = "" for a as longint = 1 to len( outs1 ) step 2 final+= chr( val( "&H" + mid( outs1 , a , 2 ) ) ) next final = chr( count ) + final print "c fin = " ; len(final) return final end function '=============================================================================== '============================================================================ Function decompress_loop( chrs as string ) as string print "dc inp = " ; len(chrs) dim as ubyte count = asc( left( chrs , 1 ) ) chrs = mid( chrs , 2 ) dim as string bits = "" dim as string zeros = string( 2 , "0" ) dim as string n1 dim as ubyte ptr usp = cptr( ubyte ptr , strptr( chrs ) ) for a as longint = 1 to len( chrs ) step 1 n1 = zeros + hex( *usp ) : usp+= 1 n1 = right( n1 , 2 ) bits+= n1 next bits = left( bits , len( bits ) - count ) print "d bin = " ; len(bits) , bits return chrs end function
Giải pháp 2
Sau khi sắp xếp “giải pháp thông tin bổ sung” của bạn, tôi đã xem câu hỏi và …
Không. Nó không hoạt động như vậy. Chúng tôi sẽ không đảo ngược một đoạn mã lớn cho bạn – đó là công việc của bạn và bạn được trả tiền cho nó hoặc đó là một phần bài tập về nhà của bạn và điều đó sẽ không công bằng cho bạn, bạn cùng lớp hoặc tương lai của bạn nhà tuyển dụng.
Chúng tôi không làm công việc của bạn cho bạn.
Nếu bạn muốn ai đó viết mã cho mình, bạn phải trả tiền – tôi khuyên bạn nên truy cập Freelancer.com và hỏi ở đó.
Nhưng hãy lưu ý: bạn nhận được những gì bạn phải trả. Trả đậu phộng, nhận được khỉ.
Ý tưởng về “phát triển” đúng như từ gợi ý: “Việc sử dụng có hệ thống kiến thức khoa học và kỹ thuật để đáp ứng các mục tiêu hoặc yêu cầu cụ thể”. BusinessDictionary.com[^]
Điều đó không giống như “hãy tra google nhanh và bỏ cuộc nếu tôi không thể tìm thấy chính xác mã phù hợp”.
Vì vậy, hãy trả tiền cho người khác để làm việc đó hoặc học cách tự viết nó. Chúng tôi không ở đây để làm điều đó cho bạn.
Giải pháp 3
Có lẽ bạn có thể thử ví dụ Zlib tại đây: fbc/zlib.bas tại master · freebasic/fbc · GitHub[^]
Giải pháp 4
Trích dẫn:Làm cách nào để giải nén mã này?
Khó đoán bạn muốn gì vì mã được cung cấp không được nén và không phải về nén.
Chúng ta phải đoán từ ‘nén’ có nghĩa là gì trong đầu bạn.
Chúng tôi không thể làm gì cho bạn cho đến khi bạn giải thích rõ ràng những gì bạn muốn.
Giải pháp 5
nén def(bản gốc_text):
tổng = 1
trước_char = “”
nén_text=””
cho ký tự trong (origin_text):
nếu ký tự before_char ==:
tổng=tổng+1
nén_text+=ký tự+str(tổng)
in()
khác:
tổng = 1
nén_text+=ký tự+str(tổng)
trước_character=ký tự
trả về(nén_text)
[ad_2]
コメント