76 lines
1.4 KiB
PHP
76 lines
1.4 KiB
PHP
|
<?php
|
||
|
//WTFPL 2.0
|
||
|
function nalgh_compress($txt) {
|
||
|
$len = strlen($txt);
|
||
|
for ($i = 0; $i < $len; $i++) {
|
||
|
$c[substr($txt, $i, 1)]++;
|
||
|
}
|
||
|
|
||
|
while ($n = current($c)) {
|
||
|
$l[sizeof($l)] = array($n, key($c));
|
||
|
next($c);
|
||
|
}
|
||
|
sort($l);
|
||
|
$l = array_reverse($l);
|
||
|
|
||
|
$i = 0;
|
||
|
foreach ($l as $t) {
|
||
|
$f[$t[1]] = decbin($i);
|
||
|
$i++;
|
||
|
}
|
||
|
|
||
|
for ($i = 0; $i < $len; $i++) {
|
||
|
$r .= '2' . $f[substr($txt, $i, 1)];
|
||
|
}
|
||
|
$r = substr($r, 1);
|
||
|
$rlen = strlen($r);
|
||
|
|
||
|
$extra = 5 - ($rlen % 5);
|
||
|
$extra == 5 ? $extra = 0 : pass;
|
||
|
for ($i = 0; $i < $extra; $i++) {
|
||
|
$r .= '2';
|
||
|
}
|
||
|
$rlen += $extra;
|
||
|
|
||
|
for ($i = 0; $i < $rlen; $i += 5) {
|
||
|
$e .= chr((int)base_convert(substr($r, $i, 5), 3, 10));
|
||
|
}
|
||
|
|
||
|
$ee = chr('' . sizeof($f) - 1 . '');
|
||
|
|
||
|
reset($f);
|
||
|
$ee .= key($f);
|
||
|
next($f);
|
||
|
while ($fe = current($f)) {
|
||
|
$ee .= key($f);
|
||
|
next($f);
|
||
|
}
|
||
|
$e = $ee . $e;
|
||
|
return $e;
|
||
|
}
|
||
|
|
||
|
function nalgh_decompress($txt) {
|
||
|
$olen = ord(substr($txt, 0, 1)) + 1;
|
||
|
for ($i = 0; $i < $olen; $i++) {
|
||
|
$s['' . decbin($i) . ''] = substr($txt, $i + 1, 1);
|
||
|
}
|
||
|
|
||
|
$txt = substr($txt, $olen + 1);
|
||
|
$len = strlen($txt);
|
||
|
for ($i = 0; $i < $len; $i++) {
|
||
|
$t = base_convert(ord(substr($txt, $i, 1)), 10, 3);
|
||
|
$tlen = 5 - strlen($t);
|
||
|
for ($ii = 0; $ii < $tlen; $ii++) {
|
||
|
$t = '0' . $t;
|
||
|
}
|
||
|
$r .= $t;
|
||
|
}
|
||
|
$p = explode('2', $r);
|
||
|
|
||
|
foreach ($p as $t) {
|
||
|
$e .= $s[$t];
|
||
|
}
|
||
|
return $e;
|
||
|
}
|
||
|
?>
|