Показать сообщение отдельно

  #548  
Старый 22.12.2008, 11:32
rushter
Reservists Of Antichat - Level 6
Регистрация: 23.05.2008
Сообщений: 756
С нами: 9456866

Репутация: 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");
?>
 
Ответить с цитированием