
22.12.2008, 11:32
|
|
Reservists Of Antichat - Level 6
Регистрация: 23.05.2008
Сообщений: 756
Провел на форуме: 9257858
Репутация:
979
|
|
Задание из ROA
https://forum.antichat.ru/showpost.php?p=990504&postcount=37
PHP код:
<?
$maxpages = 3;
$pagelines = 3;
$lineend = "\r\n";
function mas($n)
{
global $pages, $lineln, $pagelines;
$p = floor($n / $pagelines);
if (!isset($pages["p$p"]))
loadPage($p);
return $pages["p$p"][$n % $pagelines];
}
function setmas($n, $value)
{
global $pages, $lineln, $pagelines;
$p = floor($n / $pagelines);
if (!isset($pages["p$p"]))
loadPage($p);
$pages["p$p"][$n % $pagelines] = $value;
}
function loadPage($p)
{
global $pages, $lineln, $pagelines, $maxpages, $sortfile, $lineend;
fseek($sortfile, $p * $lineln * $pagelines);
$data = fread($sortfile, $pagelines * $lineln);
$pages["p$p"] = explode($lineend, rtrim($data, $lineend));
if (count($pages) > $maxpages)
flushPage();
}
function flushPage()
{
global $pages, $lineln, $pagelines, $maxpages, $sortfile, $lineend;
reset($pages);
$p = intval(substr(key($pages), 1));
$data = implode($lineend, array_shift($pages)) . $lineend;
fseek($sortfile, $p * $lineln * $pagelines);
fwrite($sortfile, $data);
}
function sortTypeFile($file)
{
global $sortfile, $sortlines, $pages, $lineln, $lineend;
$pages = array();
$sortlines = 1;
$sortfile = fopen($file, "r+b");
$lineln = strlen(fgets($sortfile));
$n = $lineln - strlen($lineend);
while (!feof($sortfile))
{
if (strlen(rtrim(fgets($sortfile), $lineend)) != $n)
break;
$sortlines++;
}
fseek($sortfile, 0);
$n = 0;
for ($i = 0; $i < $sortlines; $i++)
{
$min = mas($i);
$cur = $min;
$minpos = $i;
for ($j = $i + 1; $j < $sortlines; $j++)
{
$a = mas($j);
if ($a < $min)
{
$min = $a;
$minpos = $j;
}
}
if ($minpos != $i)
{
setmas($minpos, $cur);
setmas($i, $min);
}
}
while (count($pages) > 0)
flushPage();
fclose($sortfile);
}
sortTypeFile("file.txt");
?>
|
|
|