Jump to content
php.lv forumi

marrtins

Reģistrētie lietotāji
  • Posts

    1,570
  • Joined

  • Last visited

Posts posted by marrtins

  1. Īsti nesapratu, kāpēc lai 2x1 nevarētu ietilpt tajā vietā (row=7,col=0)? Tev orientācija meklējamam laukumam ir svarīga? Tas laukums sanāk šāds:

    11111111
    11111111
    11111111
    11111111
    11111111
    11111111
    11111111
    01111110
    01111111
    11111111
    11111111
    11111111
    11111111
    11111111
    11111110
    

  2. Mans variants:

    <?php
    
    error_reporting(E_ALL);
    
    define('BOARD_MAXW', 8);
    define('BOARD_MAXH', 16);
    
    $tofind = "16x1";
    
    $board = array();
    list($W, $H) = split('x', $tofind);
    $data = file('in.txt');
    foreach($data as $line){
       $board[] = ~bindec(trim($line)); # invertē, lai 1 apzīmētu tukšumus
    }
    
    function board_search($board, $W, $H)
    {
       if(($W > BOARD_MAXW) || ($H > BOARD_MAXH)){
           return false;
       }
    
       foreach($board as $ri=>$row){
           $mask = pow(2, $W) - 1;
           for($x = 0; $x < BOARD_MAXW - $W + 1; $x++){
      	     $rowmatch = 0;
      	     # Ja konkrētajā vietā rindā ir brīva vieta, pētam nākamajās rindās
      	     if(($row & $mask) == $mask){
      		     $rowmatch++;
      		     for($ri2 = $ri + 1; $ri2 < BOARD_MAXH; $ri2++){
      			     $row2 = $board[$ri2];
      			     if(($row2 & $mask) == $mask) {
      				     $rowmatch++;
      			     } else {
      				     break;
      			     }
      		     }
      		     if($rowmatch == $H){
      			     return array($ri, BOARD_MAXW - $W - $x);
      		     }
      	     }
      	     $mask <<= 1; # "pabīdam" pa kreisi
           }
       }
       return false;
    }
    
    if(($ret = board_search($board, $W, $H)) !== false){
       print "FOUND at row=".$ret[0].", col=".$ret[1]."\n";
    } elseif(($ret = board_search($board, $H, $W)) !== false){ # "parotējam" meklējamo laukumu
       print "FOUND at row=".$ret[0].", col=".$ret[1]."\n";
    } else {
       print "NOT FOUND";
    }
    

     

    Nav baisi testēts, kā arī laukuma dimensijām jābūt mazākiem par CPU vai PHP integer bitiem (vairs neatminos, kā tur PHP mainījās max integers atkarībā no 32 bai 64 bit OS/CPU), bet uz šāda maza laukumiņa jau pietiks :D

     

    Ā, piemirsu in.txt

    11001000
    11001000
    00001000
    00001000
    00000000
    01111000
    01111000
    01111000
    01111000
    01111000
    00000000
    00000000
    00100110
    00000110
    00000000
    00000000
    

  3. Nepatīk man šādi pārmudrītie freimworki, aļa Zend

    Tas Our motivation arī izstiepts, piemēram,

    1) If a bytecode cache (like APC) isn’t used, syntax checking is performed every time for every file in the request

    2) Many files with classes and functions are read on every request made. Disk reading is expensive in terms of performance, especially when the file structure includes deep folders

    1) Kurš pie pilna prāta lieto PHP bez APC vai tamldz?

    2) Tam ir domāts diska cache (jebkurā normālā OS tas ir). Ja fails nemainās, tad faktiski nākamo reiz tas tiek lasīts no RAM.

  4. lai kods būtu lasāmāk un nebūtu tik daudz jākomentē, varētu darīt šādi:

    function sendMessageUser($user_id,$message){
       blabla
    }
    function sendMessageUserMulti(Array $user_ids,$message){
       loop
       sendMessageUser($user_id, $message);
       /loop
    }
    

    Un, ja valoda to atļauj, overloadojam

    function sendMessage($users,$message){
       if(is_array($users)){
           loop
           sendMessageUser($user_id, $message);
           /loop
       } elseif(super_struktūra) {
           superojam sendMessageUser
       } else {
           sendMessageUser($user, $message);
       }
    }
    

     

    OOP variantā f-iju nosaukumos attiecīgi atmetam vai nu send vai message vai user un variējam parametrus.

×
×
  • Create New...