can it be?? la compression quasi-illimitée sans perte de données
3 réponses
uglyvan
ceci est un programme yabasic;
essayez-le sur de petits fichiers ( genre 1Mo ) parce que sinon, vu que c'e=
st du travail d'amateur, il y a des probl=C3=A8mes d'allocation m=C3=A9moir=
e ou que sais-je encore.
nul doute que tout programmeur de ce nom fera du projet CIL un bijou.
dim t(100000000)
dim u(100000000)
dim v(1500)
i=3D1
open 1,"d:pip\dm.zip","rb"
open 2,"d:pip\dm1.txt","wb"
open 3,"d:pip\dm1_log.txt","w"
apr=C3=A8s chaque execution du programme, crunchez le fichier 2 ( dm1.txt )=
qui deviendra dm1.zip, alors qu'un deuxi=C3=A8me dm2.txt remplace le premi=
er
while(!eof(1))
t(i)=3Dpeek(1)
i=3Di+1
rem print i
wend
close 1
20
print "pass 1..."
j=3D1
k=3D1
o=3D0
m=3D1
if (t(1)-128>=3D0) then
f=3D1
else
f=3D0
endif
while (j<=3Di)
rem print j,t(j)
zz=3D256
while (zz>1)
zz=3Dzz/2
if (t(j)-zz>=3D0) then
40
f=3D1
else
f=3D0
endif
if (f=3D1 and o=3D0) then
k=3Dk+1
u(k)=3D1
o=3D1
else if (f=3D1 and o=3D1) then
u(k)=3Du(k)+1
if (m<u(k)) then
m=3Du(k)
endif
t(j)=3Dt(j)-zz
elseif (f=3D0 and o=3D0) then
u(k)=3Du(k)+1
if (m<u(k)) then
m=3Du(k)
endif
60
elseif (f=3D0 and o=3D1) then
k=3Dk+1
u(k)=3D1
o=3D0
endif
endif
wend
j=3Dj+1
wend
print "almost finished"
print
print m
for l=3D1 to k
poke #2,u(l)
v(u(l))=3Dv(u(l))+1
next l
80
close 2
print "finish"
for m=3D1 to 1500
if (v(m)>0) then
print m,v(m)
r=3Dr+m*v(m)
print #3,m,v(m),m*v(m)
endif
next m
nul doute que tout programmeur de ce nom fera du projet CIL un bijou.
dim t(100000000)
dim u(100000000)
dim v(1500)
i=1
open 1,"d:pipdm.zip","rb"
open 2,"d:pipdm1.txt","wb"
open 3,"d:pipdm1_log.txt","w"
après chaque execution du programme, crunchez le fichier 2 ( dm1.txt ) qui deviendra dm1.zip, alors qu'un deuxième dm2.txt remplace le pre mier
while(!eof(1))
t(i)=peek(1)
i=i+1
rem print i
wend
close 1
20
print "pass 1..."
j=1
k=1
o=0
m=1
if (t(1)-128>=0) then
f=1
else
f=0
endif
while (j<=i)
rem print j,t(j)
zz=256
while (zz>1)
zz=zz/2
if (t(j)-zz>=0) then
40
f=1
else
f=0
endif
if (f=1 and o=0) then
k=k+1
u(k)=1
o=1
else if (f=1 and o=1) then
u(k)=u(k)+1
if (m<u(k)) then
m=u(k)
endif
t(j)=t(j)-zz
elseif (f=0 and o=0) then
u(k)=u(k)+1
if (m<u(k)) then
m=u(k)
endif
60
elseif (f=0 and o=1) then
k=k+1
u(k)=1
o=0
endif
endif
wend
j=j+1
wend
print "almost finished"
print
print m
for l=1 to k
poke #2,u(l)
v(u(l))=v(u(l))+1
next l
80
close 2
print "finish"
for m=1 to 1500
if (v(m)>0) then
print m,v(m)
r=r+m*v(m)
print #3,m,v(m),m*v(m)
endif
next m