1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
|
<?php
/*
+----------------------------------------------------------------------+
| PHP Version 4 |
+----------------------------------------------------------------------+
| Copyright (c) 1997-2004 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.0 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
| available through the world-wide-web at the following url: |
| http://www.php.net/license/3_0.txt. |
| If you did not receive a copy of the PHP license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@php.net so we can mail you a copy immediately. |
+----------------------------------------------------------------------+
| Authors: Mitja Slenc <mitja@php.net> |
+----------------------------------------------------------------------+
$Id: unusedcompress.php,v 1.3 2004/01/01 00:35:41 goba Exp $
*/
$tocomp=implode("", file("prefixcompressed.txt"));
$tocomp=str_replace("\n", "", $tocomp);
$result="";
$allchars="";
for ($a=32; $a<125; $a++)
if (chr($a)!="'" && chr($a)!="\\" && $a!=127)
$allchars.=chr($a);
$acl=strlen($allchars);
function GetUnused($text)
{
global $allchars, $acl;
for ($a=0; $a<$acl; $a++)
if (strpos($text, $allchars[$a])===false)
return $allchars[$a];
return "";
}
while (true) {
$replacewith=GetUnused($tocomp);
if (!strlen($replacewith))
break;
$sc=strlen($tocomp);
$already=array();
$best=0;
$counter=array();
for ($len=2; $len<8; $len++) {
for ($pos=0; $pos<=($sc-$len); $pos++) {
$wh=substr($tocomp, $pos, $len);
if (!isset($counter[$wh])) {
$counter[$wh]=-3;
} else {
$counter[$wh]+=$len-1;
}
}
}
$best=max($counter);
if ($best>0) {
$bestchars=array_search($best, $counter);
$tocomp=str_replace($bestchars, $replacewith, $tocomp);
if ($result)
$result=$replacewith.$bestchars."}".$result;
else
$result=$replacewith.$bestchars;
} else {
break;
}
}
fwrite(fopen("compressed.txt", "w"), $tocomp);
fwrite(fopen("compkey.txt", "w"), $result);
?>
|