## Squares

General FreeBASIC programming questions.
albert
Posts: 5916
Joined: Sep 28, 2006 2:41
Location: California, USA

### Re: Squares

I think i got it corrected...

20,000 compresses 6% after 100 loops... Under 20,000 it expands..
100,000 compresses to 79%
1,000,000 compresses to 95% after 100 loops...Takes 50 to 60 seconds.

v = chrs[ a - 1 ]

n1 = ""

if v > 127 then v-= 128 : n1+= "0"

if v > 063 then v-= 064 : n1+= "1"

if v > 031 then v-= 032 : n1+= "11"

if v > 015 then v-= 016 : n1+= "10"

if n1 = "" then n1 = "00"

bits1+= right( "0000" + bin( v ) , 4 )
bits2+= n1 + "0"

Each set ends with a "0"

I put the 10 at the end..
So now , if there's a 10 , it would come out to 100

Code: Select all

`Declare Function      compress_loop( chrs as string ) as stringDeclare Function decompress_loop( chrs as string ) as stringscreen 19'====================================================================='====================================================================='start program'====================================================================='=====================================================================dim as double time1 , time2 , time3 , time4do       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            '    if inkey = chr( 27 ) then end            '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       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)sleepend'==============================================================================='==============================================================================='compress'==============================================================================='===============================================================================Function compress_loop( chrs as string ) as string       print "c inp = " ; len(chrs) ' , chrs        dim as string bits1 = ""    dim as string bits2 = ""    dim as string n1    dim as longint v    for a as longint = 1 to len( chrs ) step 1                v = chrs[ a - 1 ]                n1 = ""                if v > 127 then v-= 128 : n1+= "0"                if v > 063 then v-= 064 : n1+= "1"                if v > 031 then v-= 032 : n1+= "11"                if v > 015 then v-= 016 : n1+= "10"                if n1 = "" then n1 = "00"                bits1+= right( "0000" + bin( v ) , 4 )        bits2+= n1 + "0"        next        print "c out = " ; len( bits1 ) , bits1    print "c out = " ; len( bits2 ) , bits2        dim as ubyte count1    dim as string str1    dim as ubyte dec1    do        str1 = str( len( bits2 ) / 8 )        dec1 = instr( 1 , str1 , "." )        if dec1 <> 0 then bits2+= "0" : count1+= 1    loop until dec1 = 0        dim as string final = ""    for a as longint = 1 to len( bits1 ) step 8        final+= chr( val( "&B" + mid( bits1 , a , 8 ) ) )    next    final+= "END"    for a as longint = 1 to len( bits2 ) step 8        final+= chr( val( "&B" + mid( bits2 , a , 8 ) ) )    next        final = chr( count1 ) + final        print "c fin = " ; len(final)       return final   end function'==============================================================================='============================================================================Function decompress_loop( chrs as string ) as string        print    print "d inp = " ; len( chrs )        dim as ubyte count1 = asc( left( chrs , 1 ) ) : chrs = mid( chrs , 2 )        dim as longint place = instr( 1 , chrs , "END" ) - 1        dim as string bits1 = left( chrs , place )    dim as string bits2 = mid( chrs , place + 4 )        dim as string zeros = string( 8 , "0" )    dim as string n1        dim as string outs1 = ""    for a as longint = 1 to len( bits1 ) step 1        n1 = zeros + bin( bits1[ a - 1 ] )        n1 = right( n1 , 8 )        outs1+= n1    next        dim as string outs2 = ""    for a as longint = 1 to len( bits2 ) step 1        n1 = zeros + bin( bits2[ a - 1 ] )        n1 = right( n1 , 8 )        outs2+= n1    next    outs2 = left( outs2 , len( outs2 ) - count1 )        print "d bit = " ; len( outs1 ) , outs1    print "d bit = " ; len( outs2 ) , outs2                return chrs   end function`
albert
Posts: 5916
Joined: Sep 28, 2006 2:41
Location: California, USA

### Re: Squares

Now i got the problem of 00 , 000

Back to the drawing board....
albert
Posts: 5916
Joined: Sep 28, 2006 2:41
Location: California, USA

### Alter-Bin

@Richard
@Dodicat
@StoneMonkey
@angros47

I got it this time....Using an altered binary..

n1 = mid( bits , a , 6 )

v1 = 0
if mid( n1 , 1 , 1 ) = "1" then v1+= 1
if mid( n1 , 2 , 1 ) = "1" then v1+= 2
if mid( n1 , 3 , 1 ) = "1" then v1+= 5

if mid( n1 , 4 , 1 ) = "1" then v1+= 9
if mid( n1 , 5 , 1 ) = "1" then v1+= 13
if mid( n1 , 6 , 1 ) = "1" then v1+= 26

outs+= chr( v1 )

Compresses 100,000 to 94% after 100 loops.. Takes 7 seconds
1,000,000 takes like 120 seconds.. So i got to speed it up somehow..

I got the idea from a dream last night , about picking lottery numbers...( !!~~ I hit the jackpot~~!! )

Code: Select all

`Declare Function   compress_loop( chrs as string ) as stringDeclare Function decompress_loop( chrs as string ) as stringNamespace Zlibrary#inclib "zlib"Extern "C"    Declare Function compressBound(Byval sourceLen As Ulong) As Ulong    Declare Function uncompress(Byval dest As Ubyte Ptr, Byval destLen As Uinteger Ptr, Byval source As  Ubyte Ptr, Byval sourceLen As Ulong) As Long    Declare Function compress(Byval dest As Ubyte Ptr, Byval destLen As Uinteger Ptr, Byval source As  Ubyte Ptr, Byval sourceLen As Ulong) As LongEnd ExternFunction getpassedinfo(text As String,Byref passed_length As Integer) As String    Dim As String var1,var2    Dim As Integer pst    #macro splice(stri,char,var1,var2)    pst=Instr(stri,char)    var1="":var2=""    If pst<>0 Then        var1=Mid(stri,1,pst-1)        var2=Mid(stri,pst+1)    Else        var1=stri    End If    #endmacro    splice(text,"|",var1,var2)    text=var2    passed_length=Valint(var1)    Return textEnd Function'=================   UNPACK ===============Function unpack(file As String) As String    Dim As Integer passed_length    Dim As String text=getpassedinfo(file,passed_length)    Dim As Integer stringlength,destinationlength    stringlength=Len(text)    destinationlength =passed_length    Dim As Ubyte Ptr source    Dim As Ubyte Ptr  destination =Callocate(destinationlength,1)    source=@text    Var mistake=uncompress(destination,@destinationlength, source, stringlength)    If mistake<>0 Then Print "There was an error":Sleep:End    Dim As String uncompressed    uncompressed=String(destinationlength,0)    For i As Integer = 0 To destinationlength- 1        uncompressed[i]=(destination[i])    Next    Deallocate destination    Return uncompressedEnd Function'===================  PACK ============Function pack(file As String) As String    Dim As String text=file    Dim As Integer stringlength,destinationlength    stringlength=Len(text)    destinationlength = compressBound(stringlength)    Dim As Ubyte Ptr source    Dim As Ubyte Ptr destination =Callocate(destinationlength,1)    source=@text    Var mistake=compress(destination, @destinationlength, source, stringlength)    If mistake <>0 Then Print "There was an error"    Dim As String compressed    compressed=String(destinationlength,0)    For n As Integer=0 To destinationlength-1        compressed[n]=destination[n]    Next n    compressed=stringlength &"|"+compressed    Deallocate destination    Return compressedEnd FunctionEnd Namespace'=================================================================='=================================================================='test zipper'=================================================================='==================================================================screen 19Dim Shared As String sRandomizes=""dim as string check=""dim as string compare=""dim as longint length = 0dim as double compression = 0dim as longint loops = 0dim as double time1 , time2time1 = timerdo       loops+=1       'one time run , create initial string    if loops = 1 then        For n As Long = 1 To 100000            s+=chr(Int(Rnd*256))'+48        Next        compare =  s        length = len(s)    else        'modify compression to make further compression possible               s = compress_loop(s)        end if    check = s    compression = (100 - ( 100 / ( length / len(check) ) ))       Print "original string"    Print Len(s)    Print       Dim As String compressed=Zlibrary.pack(s)    s = compressed       Print "packed string "    Print Len(compressed)    Print       Dim As String uncompressed=Zlibrary.unpack(compressed)       Print "Retrieve"    Print Len(uncompressed)    Print    'Print "compression ratio  "; 100 - ( 100 / ( Len(s) / len(compressed) ) ) ; "%"    Print "compression ratio  "; 100 - ( 100 / ( length / len(s) ) ) ; "%"    Print Iif(uncompressed=check,"OK","ERROR")    Print "-------------------------------"       'sleep 1000       'if loops > 2 and (100 - ( 100 / ( length / len(s) ) )) < compression then exit do       print "press esc to exit."    print    print "press a key for next compression." ; " loops = " ; loops ; " out of 100."    'sleep        if inkey = chr(27) then exit do   loop until loops = 100time2 = timerprintprint  "Compress time = " ; time2 - time1printprint "Press a key to decompress."sleeps = str(loops) + "_" + s ' save as an output file...'=================================================================='decompress'==================================================================dim as longint dec = instr(1,s,"_")dim as longint count = val(left(s,dec-1))dim as string comp = mid(s,dec+1)dim as string val1dim as string outsfor a as longint = count to 2 step -1    s = Zlibrary.unpack(comp)    outs = decompress_loop(s)    comp = outsnextcomp = Zlibrary.unpack(comp)printprint "input = "; length , "output = " ; len(comp) , "compression ratio  "; 100 - ( 100 / ( length / len(s) ) ) ; "%"printif comp = compare then print "Decompression successful." else print "ERROR"printprintPrint "!!~~Done~~!!"Sleepend'==============================================================================='============================,==================================================='begin functions'==============================================================================='================='==============================================================Function compress_loop( chrs as string ) as string       print "c inp = " ; len(chrs) ' , chrs        dim as string bits = ""    dim as string n1    for a as longint = 1 to len( chrs ) step 1        n1 = right( "00000000" + bin( chrs[ a - 1 ] ) , 8 )        bits+= n1    next        print "c bit =  "; len( bits) ' , bits        dim as string outs = ""    dim as longint v1 , v2    for a as longint = 1 to len( bits ) step 6                n1 = mid( bits , a , 6 )                v1 = 0        if mid( n1 , 1 , 1 ) = "1" then v1+= 1        if mid( n1 , 2 , 1 ) = "1" then v1+= 2        if mid( n1 , 3 , 1 ) = "1" then v1+= 5                if mid( n1 , 4 , 1 ) = "1" then v1+= 9        if mid( n1 , 5 , 1 ) = "1" then v1+= 13        if mid( n1 , 6 , 1 ) = "1" then v1+= 26                outs+= chr( v1 )            next        print "c out = " ; len( outs ) ' , outs        dim as string final = outs    'for a as longint = 1 to len( outs ) step 8    '    final+= chr( val( "&B" + mid( outs , a , 8 ) ) )    'next        print "c fin = " ; len(final)       return final   end function'==============================================================================='============================================================================Function decompress_loop( chrs as string ) as string        print    print "d inp = " ; len( chrs )        return chrs    `
albert
Posts: 5916
Joined: Sep 28, 2006 2:41
Location: California, USA

### Re: Squares

I did it again!!! Stupid mistake....
I did this routine a few pages back , and there's values that add up to other values..

So it doesn't work....

I've done so many formulas that ; i revisit some , without remembering it..
albert
Posts: 5916
Joined: Sep 28, 2006 2:41
Location: California, USA

### Re: Squares

dim as string outs = ""
dim as longint v1
for a as longint = 1 to len( bits ) step 6

n1 = mid( bits , a , 6 )

v1 = 0
if mid( n1 , 1 , 1 ) = "1" then v1+= 1
if mid( n1 , 2 , 1 ) = "1" then v1+= 2
if mid( n1 , 3 , 1 ) = "1" then v1+= 3

if mid( n1 , 4 , 1 ) = "1" then v1+= 7
if mid( n1 , 5 , 1 ) = "1" then v1+= 14
if mid( n1 , 6 , 1 ) = "1" then v1+= 28

outs+= chr( v1 )

next

Compresses 92% after 100 loops... just telling 2 - 1 = 3 from 3 ?
albert
Posts: 5916
Joined: Sep 28, 2006 2:41
Location: California, USA

### Alter-Bin

I think I've got it worked out..

Again Altered Binary..

n1 = mid( bits , a , 8 )

count = 0
v1 = 0
if n1[ 0 ] = 49 then v1+= 96 : count+= 1
if n1[ 1 ] = 49 then v1+= 48 : count+= 1
if n1[ 2 ] = 49 then v1+= 24 : count+= 1
if n1[ 3 ] = 49 then v1+= 12 : count+= 1

if n1[ 4 ] = 49 then v1+= 06 : count+= 1
if n1[ 5 ] = 49 then v1+= 03 : count+= 1
if n1[ 6 ] = 49 then v1+= 02 : count+= 1
if n1[ 7 ] = 49 then v1+= 01 : count+= 1

if count = 1 then count = 0 else count = 1

outs1+= chr( v1 )
outs2+= bin( count )

Each digit is the sum of the previous digits...
Then you have the count... if only 1 bit is set the count = 0 else it equals 1 ( to specify zero or multiple digits. )

For 100 loops:
10,000 bytes in expands
20,000 bytes in compresses to 25% : takes 7 seconds
100,000 bytes compresses to 70%.: takes 22 seconds.
1,000,000 bytes in compresses to 87% : takes 155 seconds.
10,000,000 bytes in compresses to 90% : takes 1420 seconds.. Way to slow.. Got to speed it up..

Code: Select all

`Declare Function   compress_loop( chrs as string ) as stringDeclare Function decompress_loop( chrs as string ) as stringNamespace Zlibrary#inclib "zlib"Extern "C"    Declare Function compressBound(Byval sourceLen As Ulong) As Ulong    Declare Function uncompress(Byval dest As Ubyte Ptr, Byval destLen As Uinteger Ptr, Byval source As  Ubyte Ptr, Byval sourceLen As Ulong) As Long    Declare Function compress(Byval dest As Ubyte Ptr, Byval destLen As Uinteger Ptr, Byval source As  Ubyte Ptr, Byval sourceLen As Ulong) As LongEnd ExternFunction getpassedinfo(text As String,Byref passed_length As Integer) As String    Dim As String var1,var2    Dim As Integer pst    #macro splice(stri,char,var1,var2)    pst=Instr(stri,char)    var1="":var2=""    If pst<>0 Then        var1=Mid(stri,1,pst-1)        var2=Mid(stri,pst+1)    Else        var1=stri    End If    #endmacro    splice(text,"|",var1,var2)    text=var2    passed_length=Valint(var1)    Return textEnd Function'=================   UNPACK ===============Function unpack(file As String) As String    Dim As Integer passed_length    Dim As String text=getpassedinfo(file,passed_length)    Dim As Integer stringlength,destinationlength    stringlength=Len(text)    destinationlength =passed_length    Dim As Ubyte Ptr source    Dim As Ubyte Ptr  destination =Callocate(destinationlength,1)    source=@text    Var mistake=uncompress(destination,@destinationlength, source, stringlength)    If mistake<>0 Then Print "There was an error":Sleep:End    Dim As String uncompressed    uncompressed=String(destinationlength,0)    For i As Integer = 0 To destinationlength- 1        uncompressed[i]=(destination[i])    Next    Deallocate destination    Return uncompressedEnd Function'===================  PACK ============Function pack(file As String) As String    Dim As String text=file    Dim As Integer stringlength,destinationlength    stringlength=Len(text)    destinationlength = compressBound(stringlength)    Dim As Ubyte Ptr source    Dim As Ubyte Ptr destination =Callocate(destinationlength,1)    source=@text    Var mistake=compress(destination, @destinationlength, source, stringlength)    If mistake <>0 Then Print "There was an error"    Dim As String compressed    compressed=String(destinationlength,0)    For n As Integer=0 To destinationlength-1        compressed[n]=destination[n]    Next n    compressed=stringlength &"|"+compressed    Deallocate destination    Return compressedEnd FunctionEnd Namespace'=================================================================='=================================================================='test zipper'=================================================================='==================================================================screen 19Dim Shared As String sRandomizes=""dim as string check=""dim as string compare=""dim as longint length = 0dim as double compression = 0dim as longint loops = 0dim as double time1 , time2time1 = timerdo       loops+=1       'one time run , create initial string    if loops = 1 then        For n As Long = 1 To 100000            s+=chr(Int(Rnd*256))'+48        Next        compare =  s        length = len(s)    else        'modify compression to make further compression possible               s = compress_loop(s)        end if    check = s    compression = (100 - ( 100 / ( length / len(check) ) ))       Print "original string"    Print Len(s)    Print       Dim As String compressed=Zlibrary.pack(s)    s = compressed       Print "packed string "    Print Len(compressed)    Print       Dim As String uncompressed=Zlibrary.unpack(compressed)       Print "Retrieve"    Print Len(uncompressed)    Print    'Print "compression ratio  "; 100 - ( 100 / ( Len(s) / len(compressed) ) ) ; "%"    Print "compression ratio  "; 100 - ( 100 / ( length / len(s) ) ) ; "%"    Print Iif(uncompressed=check,"OK","ERROR")    Print "-------------------------------"       'sleep 1000       'if loops > 2 and (100 - ( 100 / ( length / len(s) ) )) < compression then exit do       print "press esc to exit."    print    print "press a key for next compression." ; " loops = " ; loops ; " out of 100."    'sleep        if inkey = chr(27) then exit do   loop until loops = 100time2 = timerprintprint  "Compress time = " ; time2 - time1printprint "Press a key to decompress."sleeps = str(loops) + "_" + s ' save as an output file...'=================================================================='decompress'==================================================================dim as longint dec = instr(1,s,"_")dim as longint count = val(left(s,dec-1))dim as string comp = mid(s,dec+1)dim as string val1dim as string outsfor a as longint = count to 2 step -1    s = Zlibrary.unpack(comp)    outs = decompress_loop(s)    comp = outsnextcomp = Zlibrary.unpack(comp)printprint "input = "; length , "output = " ; len(comp) , "compression ratio  "; 100 - ( 100 / ( length / len(s) ) ) ; "%"printif comp = compare then print "Decompression successful." else print "ERROR"printprintPrint "!!~~Done~~!!"Sleepend'==============================================================================='============================,==================================================='begin functions'==============================================================================='================='==============================================================Function compress_loop( chrs as string ) as string       print "c inp = " ; len(chrs) ' , chrs        dim as string bits = ""    dim as string zeros = string( 8 , "0" )    dim as string n1    dim as ubyte ptr ulp = cptr( ubyte ptr , strptr( chrs ) )    for a as longint = 1 to len( chrs ) step 1        n1 = zeros + bin( *ulp ) : ulp+= 1        n1 = right( n1 , 8 )        bits+= n1    next        print "c bit =  "; len( bits) ' , bits        dim as string outs1 = ""    dim as string outs2 = ""    dim as longint v1 , count    for a as longint = 1 to len( bits ) step 8                n1 = mid( bits , a , 8 )                count = 0        v1 = 0         if n1[ 0 ] = 49 then v1+= 96 : count+= 1        if n1[ 1 ] = 49 then v1+= 48 : count+= 1        if n1[ 2 ] = 49 then v1+= 24 : count+= 1        if n1[ 3 ] = 49 then v1+= 12 : count+= 1                if n1[ 4 ] = 49 then v1+= 06 : count+= 1        if n1[ 5 ] = 49 then v1+= 03 : count+= 1        if n1[ 6 ] = 49 then v1+= 02 : count+= 1        if n1[ 7 ] = 49 then v1+= 01 : count+= 1                if count = 1 then count = 0 else count = 1                outs1+= chr( v1 )        outs2+= bin( count )            next        print "c out = " ; len( outs1 ) ' , outs1    print "c out = " ; len( outs2 ) ' , outs2        dim as string final = outs1 + "END"    for a as longint = 1 to len( outs2 ) step 8        final+= chr( val( "&B" + mid( outs2 , a , 8 ) ) )    next        print "c fin = " ; len(final)       return final   end function'==============================================================================='============================================================================Function decompress_loop( chrs as string ) as string        print    print "d inp = " ; len( chrs )        return chrs   end function`

( !!~~ EDITED ~~!! )

( !!~~ EDITED ~~!! ) a second time, i got it sped up...

Now :
100,000 takes 4 to 5 seconds..
1,000,000 takes 60 seconds..
10,000,000 takes 480 seconds..
Last edited by albert on Jan 11, 2020 18:56, edited 1 time in total.
albert
Posts: 5916
Joined: Sep 28, 2006 2:41
Location: California, USA

### Alter-Bin

I need some help with the decompression....

Here's the Test-Bed where i write the de-compressor...

Code: Select all

`Declare Function      compress_loop( chrs as string ) as stringDeclare Function decompress_loop( chrs as string ) as stringscreen 19'====================================================================='====================================================================='start program'====================================================================='=====================================================================dim as double time1 , time2 , time3 , time4do       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            '    if inkey = chr( 27 ) then end            '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       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)sleepend'==============================================================================='==============================================================================='compress'==============================================================================='===============================================================================Function compress_loop( chrs as string ) as string       print "c inp = " ; len(chrs) ' , chrs        dim as string bits = ""    dim as string zeros = string( 8 , "0" )    dim as string n1    dim as ubyte ptr ubp = cptr( ubyte ptr , strptr( chrs ) )    for a as longint = 1 to len( chrs ) step 1        n1 = zeros + bin( *ubp ) : ubp+= 1        n1 = right( n1 , 8 )        bits+= n1    next        print "c bit = " ; len( bits) , bits        dim as string outs1 = ""    dim as string outs2 = ""    dim as longint v1 , count    for a as longint = 1 to len( bits ) step 8                n1 = mid( bits , a , 8 )                count = 0        v1 = 0         if n1[ 0 ] = 49 then v1+= 96 : count+= 1        if n1[ 1 ] = 49 then v1+= 48 : count+= 1        if n1[ 2 ] = 49 then v1+= 24 : count+= 1        if n1[ 3 ] = 49 then v1+= 12 : count+= 1                if n1[ 4 ] = 49 then v1+= 06 : count+= 1        if n1[ 5 ] = 49 then v1+= 03 : count+= 1        if n1[ 6 ] = 49 then v1+= 02 : count+= 1        if n1[ 7 ] = 49 then v1+= 01 : count+= 1                if count = 1 then count = 0 else count = 1                outs1+= chr( v1 )        outs2+= bin( count )            next        print "c out = " ; len( outs1 ) ' , outs1    print "c out = " ; len( outs2 ) , outs2        dim as ubyte count1 = 0    dim as string str1    dim as ubyte dec1    do        str1 = str( len( outs2 ) / 8 )        dec1 = instr( 1 , str1 , "." )        if dec1 <> 0  then outs2+= "0" : count1+= 1    loop until dec1 = 0        dim as string final = outs1 + "END"    for a as longint = 1 to len( outs2 ) step 8        final+= chr( val( "&B" + mid( outs2 , a , 8 ) ) )    next        final = chr( count1 ) + final        print "c fin = " ; len(final)       return final   end function'==============================================================================='============================================================================Function decompress_loop( chrs as string ) as string        print    print "d inp = " ; len( chrs )        dim as ubyte count1 = asc( left( chrs , 1 ) )    chrs = mid( chrs , 2 )        dim as longint place = instr( 1 , chrs , "END" ) - 1    dim as string outs1 = left( chrs , place )    dim as string outs2 = mid( chrs , place + 4 )            dim as string bits1 = ""    dim as string n1    for a as longint = 1 to len( outs1 ) step 1        n1 = "000" + str( outs1[ a - 1 ] )        n1 = right( n1 , 3 )        bits1+= n1 + "-"    next        dim as string bits2 = ""    dim as string zeros = string( 8 , "0" )    for a as longint = 1 to len( outs2 ) step 1        n1 = zeros+ bin( outs2[ a - 1 ] )        n1 = right( n1 , 8 )        bits2+= n1    next    bits2 = left( bits2 , len( bits2 ) - count1 )        print "d bit = " ; len( bits1 ) , bits1    print "d bit = " ; len( bits2 ) , bits2                    return chrs   end function`
albert
Posts: 5916
Joined: Sep 28, 2006 2:41
Location: California, USA

### Re: Squares

@Dodicat
@StoneMonkey

I got the decompression written... I'm getting errors..

It sometimes decompresses okay , but mostly not.. Just keep pressing a key or esc to exit..

===========================================
Could someone go over it and see where i got errors???
Or , why it's not decompressing properly.
===========================================

Code: Select all

`Declare Function      compress_loop( chrs as string ) as stringDeclare Function decompress_loop( chrs as string ) as stringscreen 19'====================================================================='====================================================================='start program'====================================================================='=====================================================================dim as double time1 , time2 , time3 , time4do       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            '    if inkey = chr( 27 ) then end            '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       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)sleepend'==============================================================================='==============================================================================='compress'==============================================================================='===============================================================================Function compress_loop( chrs as string ) as string       print "c inp = " ; len(chrs) ' , chrs        dim as string bits = ""    dim as string zeros = string( 8 , "0" )    dim as string n1    dim as ubyte ptr ubp = cptr( ubyte ptr , strptr( chrs ) )    for a as longint = 1 to len( chrs ) step 1        n1 = zeros + bin( *ubp ) : ubp+= 1        n1 = right( n1 , 8 )        bits+= n1    next        print "c bit = " ; len( bits) , bits        dim as string outs1 = ""    dim as string outs2 = ""    dim as longint v1 , count    for a as longint = 1 to len( bits ) step 8                n1 = mid( bits , a , 8 )                count = 0        v1 = 0         if n1[ 0 ] = 49 then v1+= 96 : count+= 1        if n1[ 1 ] = 49 then v1+= 48 : count+= 1        if n1[ 2 ] = 49 then v1+= 24 : count+= 1        if n1[ 3 ] = 49 then v1+= 12 : count+= 1                if n1[ 4 ] = 49 then v1+= 06 : count+= 1        if n1[ 5 ] = 49 then v1+= 03 : count+= 1        if n1[ 6 ] = 49 then v1+= 02 : count+= 1        if n1[ 7 ] = 49 then v1+= 01 : count+= 1                if count = 1 then count = 0 else count = 1                outs1+= chr( v1 )        outs2+= bin( count )            next        print "c out = " ; len( outs1 )  , 'outs1    for a as longint = 1 to len( outs1 ) step 1        n1 = "000" + str( outs1[ a - 1 ] )        n1 = right( n1 , 3 ) + "-"        print n1 ;     next    print    print "c out = " ; len( outs2 ) , outs2        dim as ubyte count1 = 0    dim as string str1    dim as ubyte dec1    do        str1 = str( len( outs2 ) / 8 )        dec1 = instr( 1 , str1 , "." )        if dec1 <> 0  then outs2+= "0" : count1+= 1    loop until dec1 = 0        dim as string final = outs1 + "END"    for a as longint = 1 to len( outs2 ) step 8        final+= chr( val( "&B" + mid( outs2 , a , 8 ) ) )    next        final = chr( count1 ) + final        print "c fin = " ; len(final)       return final   end function'==============================================================================='============================================================================Function decompress_loop( chrs as string ) as string        print    print "d inp = " ; len( chrs )        dim as ubyte count1 = asc( left( chrs , 1 ) )    chrs = mid( chrs , 2 )        dim as longint place = instr( 1 , chrs , "END" ) - 1    dim as string outs1 = left( chrs , place )    dim as string outs2 = mid( chrs , place + 4 )            dim as string bits1 = ""    dim as string n1    for a as longint = 1 to len( outs1 ) step 1        n1 = "000" + str( outs1[ a - 1 ] )        n1 = right( n1 , 3 )        bits1+= n1 + "-"    next        dim as string bits2 = ""    dim as string zeros = string( 8 , "0" )    for a as longint = 1 to len( outs2 ) step 1        n1 = zeros+ bin( outs2[ a - 1 ] )        n1 = right( n1 , 8 )        bits2+= n1    next    bits2 = left( bits2 , len( bits2 ) - count1 )        print "d bit = " ; len( bits1 ) , bits1    print "d bit = " ; len( bits2 ) , bits2        dim as string outs = ""    dim as string  n2    place = 1    dim as longint v1 , v2    for a as longint = 1 to len( bits1 ) step 4                n1 = mid( bits1 , a , 4 )        n1 = left( n1 , 3 )                v1 = val( mid( bits2 , place , 1 ) ) : place+= 1                v2 = val( n1 )                if v1 = 1 and v2 = 00 then n2 = "00000000" : goto done        if v1 = 0 and v2 = 01 then n2 = "00000001" : goto done        if v1 = 0 and v2 = 02 then n2 = "00000010" : goto done        if v1 = 0 and v2 = 03 then n2 = "00000100" : goto done        if v1 = 0 and v2 = 06 then n2 = "00001000" : goto done        if v1 = 0 and v2 = 12 then n2 = "00010000" : goto done        if v1 = 0 and v2 = 24 then n2 = "00100000" : goto done        if v1 = 0 and v2 = 48 then n2 = "01000000" : goto done        if v1 = 0 and v2 = 96 then n2 = "10000000" : goto done                if v1 = 1 and v2 = 96 then n2 = "01111111" : goto done        if v1 = 1 and v2 = 48 then n2 = "00111111" : goto done        if v1 = 1 and v2 = 24 then n2 = "00011111" : goto done        if v1 = 1 and v2 = 12 then n2 = "00001111" : goto done        if v1 = 1 and v2 = 06 then n2 = "00000111" : goto done        if v1 = 1 and v2 = 03 then n2 = "00000011" : goto done                n2 = ""        if v2 >= 96 then n2+= "1" : v2-= 96 else n2+= "0"        if v2 >= 48 then n2+= "1" : v2-= 48 else n2+= "0"        if v2 >= 24 then n2+= "1" : v2-= 24 else n2+= "0"        if v2 >= 12 then n2+= "1" : v2-= 12 else n2+= "0"        if v2 >= 06 then n2+= "1" : v2-= 06 else n2+= "0"        if v2 >= 03 then n2+= "1" : v2-= 03 else n2+= "0"        if v2 >= 02 then n2+= "1" : v2-= 02 else n2+= "0"        if v2 >= 01 then n2+= "1" : v2-= 01 else n2+= "0"                done:                outs+= n2            next        dim as string final = ""    for a as longint = 1 to len( outs ) step 8        final+= chr( val( "&B" + mid( outs , a , 8 ) ) )    next        return final   end function`
albert
Posts: 5916
Joined: Sep 28, 2006 2:41
Location: California, USA

### Re: Squares

Never mind , i did it again , stupid mistake... 6 = 321 ..

With only 1 bit of count, you can't tell them apart...
if you add in the full bit count , it doesn't compress.

Back to the drawing board....
albert
Posts: 5916
Joined: Sep 28, 2006 2:41
Location: California, USA

### Re: Squares

Here's another attempt at compression..

it steps by 8 bits binary..

Sums 1'st 3 bits , 00 01 10 11
Sums 2nd 3 bits , 00 01 10 11
Sums last 2 bits , 00 01 10

Then it mods the 8 bits by 4

=====================================================
''PUT 3 COUNTS INTO OUTPUT
outs1+= right( "00" + bin( v1 ) , 2 )
outs1+= right( "00" + bin( v2 ) , 2 )
outs1+= right( "00" + bin( v3 ) , 2 )

outs1+= right( "00" + bin( val( "&B" + n1 ) mod 4 ) , 2 ) + "-"
====================================================

Knowing the number of set bits in each group and the final mod 4 , can it be solved???

Here's the Test-Bed

Code: Select all

`Declare Function      compress_loop( chrs as string ) as stringDeclare Function decompress_loop( chrs as string ) as stringscreen 19'====================================================================='====================================================================='start program'====================================================================='=====================================================================dim as double time1 , time2 , time3 , time4do       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            '    if inkey = chr( 27 ) then end            '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       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)sleepend'==============================================================================='==============================================================================='compress'==============================================================================='===============================================================================Function compress_loop( chrs as string ) as string        print    print "c inp = " ; len(chrs) ' , chrs        dim as string bits = ""    dim as string zeros = string( 8 , "0" )    dim as string n1    dim as ubyte ptr ulp = cptr( ubyte ptr , strptr( chrs ) )    for a as longint = 1 to len( chrs ) step 1        n1 = zeros + bin( *ulp ) : ulp+= 1        n1 = right( n1 , 8 )        bits+=n1 + "-"    next        print "c bin = " ; len( bits ) , bits        dim as string show = "3b3b2bmd-"    dim as string outs1 = ""    dim as ubyte v1 , v2 , v3 , v4    for a as longint = 1 to len( bits ) step 9        n1 = mid( bits , a , 9 )        n1 = left( n1 , 8 )                'COUNT FIRST 3 BITS        v1 = 0        if n1[ 0 ] = 49 then v1+= 1        if n1[ 1 ] = 49 then v1+= 1        if n1[ 2 ] = 49 then v1+= 1                'COUNT SECOND 3 BITS        v2 = 0        if n1[ 3 ] = 49 then v2+= 1        if n1[ 4 ] = 49 then v2+= 1        if n1[ 5 ] = 49 then v2+= 1                'COUNT LAST 2 BITS        v3 = 0        if n1[ 6 ] = 49 then v3+= 1        if n1[ 7 ] = 49 then v3+= 1            ''PUT 3 COUNTS INTO OUTPUT        outs1+= right( "00" + bin( v1 ) , 2 )        outs1+= right( "00" + bin( v2 ) , 2 )        outs1+= right( "00" + bin( v3 ) , 2 )                'ADD 8 BITS MOD 4'        outs1+= right( "00" + bin( val( "&B" + n1 ) mod 4 ) , 2 ) + "-"                show+=left( show , 9 )                'print n1 , v1 , v2 , v3 , val( "&B" + n1 ) mod 4        'sleep        'if inkey = " " then end            next        show = left( show , len( show ) - 9 )        print "c out = " ; len( outs1 ) , outs1    print "c sho = "; len( show ) , show        print    print "3b = sum of three bits"    print "2b = sum of two bits"    print "md = val of 8 bits mod 4"    print    print        dim as string final = ""    'for a as longint = 1 to len( outs1 ) step 8    '    final+= chr( val( "&B" + mid( outs1 , a , 8 ) ) )    'next        'print "c fin = " ; len(final)       return final   end function'==============================================================================='============================================================================Function decompress_loop( chrs as string ) as string        'print    'print "d inp = " ; len( chrs )        return chrs   end function`

If it can be solved ??? : It compresses 90+% after 10 loops..
albert
Posts: 5916
Joined: Sep 28, 2006 2:41
Location: California, USA

### Re: Squares

I wrote a scanner to go through all 256 values , and compare the outputs...

It can't be solved...

Maybe trying other lengths of bits???

Code: Select all

`Declare Function   compress_loop( chrs as string ) as stringDeclare Function decompress_loop( chrs as string ) as stringNamespace Zlibrary#inclib "zlib"Extern "C"    Declare Function compressBound(Byval sourceLen As Ulong) As Ulong    Declare Function uncompress(Byval dest As Ubyte Ptr, Byval destLen As Uinteger Ptr, Byval source As  Ubyte Ptr, Byval sourceLen As Ulong) As Long    Declare Function compress(Byval dest As Ubyte Ptr, Byval destLen As Uinteger Ptr, Byval source As  Ubyte Ptr, Byval sourceLen As Ulong) As LongEnd ExternFunction getpassedinfo(text As String,Byref passed_length As Integer) As String    Dim As String var1,var2    Dim As Integer pst    #macro splice(stri,char,var1,var2)    pst=Instr(stri,char)    var1="":var2=""    If pst<>0 Then        var1=Mid(stri,1,pst-1)        var2=Mid(stri,pst+1)    Else        var1=stri    End If    #endmacro    splice(text,"|",var1,var2)    text=var2    passed_length=Valint(var1)    Return textEnd Function'=================   UNPACK ===============Function unpack(file As String) As String    Dim As Integer passed_length    Dim As String text=getpassedinfo(file,passed_length)    Dim As Integer stringlength,destinationlength    stringlength=Len(text)    destinationlength =passed_length    Dim As Ubyte Ptr source    Dim As Ubyte Ptr  destination =Callocate(destinationlength,1)    source=@text    Var mistake=uncompress(destination,@destinationlength, source, stringlength)    If mistake<>0 Then Print "There was an error":Sleep:End    Dim As String uncompressed    uncompressed=String(destinationlength,0)    For i As Integer = 0 To destinationlength- 1        uncompressed[i]=(destination[i])    Next    Deallocate destination    Return uncompressedEnd Function'===================  PACK ============Function pack(file As String) As String    Dim As String text=file    Dim As Integer stringlength,destinationlength    stringlength=Len(text)    destinationlength = compressBound(stringlength)    Dim As Ubyte Ptr source    Dim As Ubyte Ptr destination =Callocate(destinationlength,1)    source=@text    Var mistake=compress(destination, @destinationlength, source, stringlength)    If mistake <>0 Then Print "There was an error"    Dim As String compressed    compressed=String(destinationlength,0)    For n As Integer=0 To destinationlength-1        compressed[n]=destination[n]    Next n    compressed=stringlength &"|"+compressed    Deallocate destination    Return compressedEnd FunctionEnd Namespace'=================================================================='=================================================================='test zipper'=================================================================='==================================================================screen 19Dim Shared As String sRandomizes=""dim as string check=""dim as string compare=""dim as longint length = 0dim as double compression = 0dim as longint loops = 0dim as double time1 , time2time1 = timerdo       loops+=1       'one time run , create initial string    if loops = 1 then        For n As Long = 1 To 100000            s+=chr(Int(Rnd*256))'+48        Next        compare =  s        length = len(s)    else        'modify compression to make further compression possible               s = compress_loop(s)        end if    check = s    compression = (100 - ( 100 / ( length / len(check) ) ))       Print "original string"    Print Len(s)    Print       Dim As String compressed=Zlibrary.pack(s)    s = compressed       Print "packed string "    Print Len(compressed)    Print       Dim As String uncompressed=Zlibrary.unpack(compressed)       Print "Retrieve"    Print Len(uncompressed)    Print    'Print "compression ratio  "; 100 - ( 100 / ( Len(s) / len(compressed) ) ) ; "%"    Print "compression ratio  "; 100 - ( 100 / ( length / len(s) ) ) ; "%"    Print Iif(uncompressed=check,"OK","ERROR")    Print "-------------------------------"       'sleep 1000       'if loops > 2 and (100 - ( 100 / ( length / len(s) ) )) < compression then exit do       print "press esc to exit."    print    print "press a key for next compression." ; " loops = " ; loops ; " out of 10."    'sleep        if inkey = chr(27) then exit do   loop until loops = 10time2 = timerprintprint  "Compress time = " ; time2 - time1printprint "Press a key to decompress."sleeps = str(loops) + "_" + s ' save as an output file...'=================================================================='decompress'==================================================================dim as longint dec = instr(1,s,"_")dim as longint count = val(left(s,dec-1))dim as string comp = mid(s,dec+1)dim as string val1dim as string outsfor a as longint = count to 2 step -1    s = Zlibrary.unpack(comp)    outs = decompress_loop(s)    comp = outsnextcomp = Zlibrary.unpack(comp)printprint "input = "; length , "output = " ; len(comp) , "compression ratio  "; 100 - ( 100 / ( length / len(s) ) ) ; "%"printif comp = compare then print "Decompression successful." else print "ERROR"printprintPrint "!!~~Done~~!!"Sleepend'==============================================================================='============================,==================================================='begin functions'==============================================================================='================='==============================================================Function compress_loop( chrs as string ) as string       print "c inp = " ; len(chrs) ' , chrs        dim as string bits = ""    dim as string zeros = string( 8 , "0" )    dim as string n1    dim as ubyte ptr ulp = cptr( ubyte ptr , strptr( chrs ) )    for a as longint = 1 to len( chrs ) step 1        n1 = zeros + bin( *ulp ) : ulp+= 1        n1 = right( n1 , 8 )        bits+=n1    next        print "c bit = " ; len( bits ) ' , bits        dim as string outs1 = ""    dim as ubyte v1 , v2 , v3 , v4 , md1    for a as longint = 1 to len( bits ) step 8        n1 = mid( bits , a , 8 )                v1 = 0        if n1[ 0 ] = 49 then v1+= 1        if n1[ 1 ] = 49 then v1+= 1        if n1[ 2 ] = 49 then v1+= 1                v2 = 0        if n1[ 3 ] = 49 then v2+= 1        if n1[ 4 ] = 49 then v2+= 1        if n1[ 5 ] = 49 then v2+= 1                v3 = 0        if n1[ 6 ] = 49 then v3+= 1        if n1[ 7 ] = 49 then v3+= 1            outs1+= right( "00" + bin( v1 ) , 2 )        outs1+= right( "00" + bin( v2 ) , 2 )        outs1+= right( "00" + bin( v3 ) , 2 )                md1 = val( "&B" + n1 ) mod 4                outs1+= right( "00" + bin( md1 ) , 2 )                dim as ubyte s1 , s2 , s3 , s4 , md2 , value        dim as string n2        for b as longint = 0 to 255 step 1            n2 = right( "00000000" + bin( b) , 8 )                        s1 = 0            if n2[ 0 ] = 49 then s1+= 1            if n2[ 1 ] = 49 then s1+= 1            if n2[ 2 ] = 49 then s1+= 1                        s2 = 0            if n2[ 3 ] = 49 then s2+= 1            if n2[ 4 ] = 49 then s2+= 1            if n2[ 5 ] = 49 then s2+= 1                        s3 = 0            if n2[ 6 ] = 49 then s3+= 1            if n2[ 7 ] = 49 then s3+= 1                        md2 = b mod 4                        if s1 = v1 and s2 = v2 and s3 = v3 and md2 = md1 then value = b : exit for                 next                print val( "&B" + n1 ) , value        sleep        if inkey = " " then end                    next        dim as string final = ""    for a as longint = 1 to len( outs1 ) step 8        final+= chr( val( "&B" + mid( outs1 , a , 8 ) ) )    next        print "c fin = " ; len(final)       return final   end function'==============================================================================='============================================================================Function decompress_loop( chrs as string ) as string        print    print "d inp = " ; len( chrs )        return chrs   end function`
angros47
Posts: 1673
Joined: Jun 21, 2005 19:04

### Re: Squares

Albert, I would recommend you to try a simple thing: write all numbers from 0 to 15 (since each of them can represent a different nibble, and they represent all possible nibbles). Then, , write all the possible combinations of three bits, and count them. Then, try to match every three bit sequence to a number, if you can, avoiding every duplicate.

If you can do it, you will have solved your problem.
albert
Posts: 5916
Joined: Sep 28, 2006 2:41
Location: California, USA

### Re: Squares

Here's an interesting bit of code.... comparing mods..

The only thing is ; it requires 9 bits per byte , so it doesn't compress..

All 256 values can be represented by mod 3 , mod 8 , mod 11...

Code: Select all

`screen 19dim as longint v , v1 , v2 , v3do        randomize        v = int( rnd * 256 )                v1 = v mod 3    '<---- 2 bits        v2 = v mod 8    '<---- 3 bits        v3 = v mod 11  '<---- 4 bits                dim as longint s , s1 , s2 , s3 , value        for b as longint = 0 to 255 step 1            s = b            s1 = s mod 3            s2 = s mod 8            s3 = s mod 11            if s1 = v1 and s2 = v2 and s3 = v3 then value = b : exit for        next                print v , value , "press a key for next , press esc to exit.."        sleep        loop until inkey = chr( 27 )sleepend`
dodicat
Posts: 6687
Joined: Jan 10, 2006 20:30
Location: Scotland

### Re: Squares

Hi Albert.
Looks like an example of the Chinese remainder theorem.

Code: Select all

`Function HCF(a As Integer, b As Integer) As Integer    If b=0 Then Return a Else Return HCF(b,a Mod b)End FunctionFunction TestPairwiseCoprime(array() As Integer) As Integer    For p1 As Integer  = Lbound(array) To Ubound(array) - 1        For p2 As Integer  = p1 + 1 To Ubound(array)            if array(p1)=1 or array(p2)=1 then print " element 1":return 0            If HCF(array(p1),array(p2))<>1 Then  print"element", array(p1),array(p2): Return 0         Next p2    Next p1    Return -1End FunctionFunction Cremainder(coprimes() As Integer,remainders() As Integer) As longint    #macro minv(a1,b1,ans)    Scope        Dim As longint a=a1,b=b1        Dim As longint Cb=b,t,Div        Dim As longint Starter = 0, Result = 1        If (b=1) Then return 1        While (a > 1)            If b=0 Then Print "No can do":Exit Function            Div = a\b            t=b:b=a Mod b:a=t            t=Starter:Starter=Result-Div*Starter:Result=t        Wend        If (Result<0) Then Result+=Cb        ans=Result    End Scope    #endmacro    Dim As longint p,Product =1,sum=0,ans    For i as integer =Lbound(coprimes) To Ubound(coprimes):Product*=coprimes(i):Next        For j as integer=Lbound(coprimes) To Ubound(coprimes)            p=Product\coprimes(j)            minv(p,coprimes(j),ans)            sum+=remainders(j)*ans*p        Next j        Return sum Mod Product    End Function     '====================== EXAMPLE =====================================  screen 19 randomize 1 do    var  v = int( rnd * 256 )    var v1=v mod 3    var v2=v mod 8    var v3=v mod 11     print    Dim As Integer mods(1 To ...)       = {3,8,11}    Dim As Integer remainders(1 To ...) = {v1,v2,v3}            if TestPairwisecoprime(mods()) then    Var ans= Cremainder(mods(),remainders())'<------- result        'displaying and checking only    dim as longint prod=1    color 2    print "Result = ";ans    color 15    print "Mods array:"    'color 3    print "(";    for z as integer=lbound(mods) to ubound(mods)        print mods(z);",";        prod*=mods(z)    next z   ' color 15    print ")"    print    print "remainders array (v1,v2,v3):"    print "(";    for z as integer=lbound(remainders) to ubound(remainders)        print ans mod mods(z);",";    next z    print ")"    print    print "I.E.:"    for z as integer=lbound(remainders) to ubound(remainders)        print ans;" mod ";mods(z);" = ";remainders(z)    next z    print    print ans; " <"; prod;" ( product of the mods array) --It should be!";    print " ---> ";ans<prod    print "Press a key"    print "_______________________"    else    print "Array is not pairwise co-prime via at least these elements"    end if    Sleep    loop until inkey=chr(27)           `
albert
Posts: 5916
Joined: Sep 28, 2006 2:41
Location: California, USA

### Re: Squares

@Dodicat

What's the < 264 ???