• We are trusted partners of:
Fun

O noua provocare PHP

By July 22, 2013 2 Comments

Să presupunem că avem la dispoziție un calculator cu putere de procesare nelimitată, dar cu foarte puțină memorie RAM. Ne propunem să optimizăm memoria printr-un script ce presupune crearea a două funcții: una de “arhivare” a unui array și a doua de căutare în acest array.

Avem și câteva reguli pe care vă rugăm să le respectați:
1: Se va utiliza doar PHP
2: Se va modifica doar în cele două funcții
3: Nu se vor folosi: Memcached, apc, files, alt thread…. ETC.
4: Nu trișați!
5: Fiecare poate afișa noul record ori de câte ori… obține unul!


function getMem() {
$mem = memory_get_usage(true) / 1024;
return $mem;
}
$array = range(1,1000000);
shuffle($array);
$mem = getMem();
$string = compress($array);
echo 'You used : ',getMem() - $mem,' Kb',PHP_EOL;
function compress($array){
/** TODO create a compress function**/
return implode(',',$array);
}


function get($nr,$string) {
/** TODO create get function**/
$x = explode(',',$string);
return $x[$nr];
}


for($i = 0;$i <100; $i++) {
$test = rand(0,1000000-1);
if($array[$test] != get($test,$string)) {
try {
throw New Exception('You failed!!!');
} catch(Exception $e) {
echo $e->getMessage();die;
}
}
}
echo 'You Win',PHP_EOL;
echo date('Y-m-d H:i:s'),PHP_EOL;

Acest test a fost propus de Alin, Team Leader @INNOBYTE.

Care este al vostru?

INNOBYTE

Author INNOBYTE

More posts by INNOBYTE

Join the discussion 2 Comments

  • Emil [carco] Sirbu says:

    Mda, eu recunosc, am incercat ceva (sa scriu numerele in binar apoi sa folosesc RLE) dar nu a iesit nimic cat de cat aproape de recordul vostru (sau macar decent) si… n-am mai insistat.

    Insa, mor de curiozitate sa vad algoritmul ala cu care ziceati ca ati ajuns la 512kb.

    • andreea.paraschiv says:

      Emil, noi (alin) a doborat orice record cu secventa:

      function get($nr,$string) {
      $x = floor($nr / 1000) + 1;
      $y = $nr % 1000;
      $rgb = imagecolorat($string, $x, $y);
      return $rgb;

Leave a Reply