_siikais_ Posted September 3, 2012 Report Share Posted September 3, 2012 tātad mēģinu ar eregi pārbaudīt stringu: eregi('^0+[0-1]+[0-1]+[0-1]+[0-1]+[0-1]+[0-1]+[0-1]+0+[0-1]+[0-1]+[0-1]+[0-1]+[0-1]+[0-1]+[0-1]+0+[0-1]+[0-1]+[0-1]+[0-1]+[0-1]+[0-1]+[0-1]+0', '0111001101110000000100000') un protams dabūnu atbilstību, bet par cik eregi ir deprecated, mēģinu to pārveidot uz preg_match preg_match('/^0+[0-1]+[0-1]+[0-1]+[0-1]+[0-1]+[0-1]+[0-1]+0+[0-1]+[0-1]+[0-1]+[0-1]+[0-1]+[0-1]+[0-1]+0+[0-1]+[0-1]+[0-1]+[0-1]+[0-1]+[0-1]+[0-1]+0/i', '0111001101110000000100000') bet kā par nelaimi viņš sūta dillēs. Kur un kas tieši būtu jāpalabo lai šī nezvēru rinda izpildītos un dabūtu atbilstību? Paldies. ;) Quote Link to comment Share on other sites More sharing options...
briedis Posted September 3, 2012 Report Share Posted September 3, 2012 Kas tas ir par stringu, ko gribi pārbaudīt? Varbūt ir kāds racionālāgs regexps iespējams? Quote Link to comment Share on other sites More sharing options...
_siikais_ Posted September 3, 2012 Author Report Share Posted September 3, 2012 (edited) ir laukums no 120 kvadrātiem dimensijā 8x16 (kolonas x rindas). viņš var būt aizpildīts ar kvadrātiem dažādās dimensijās 1x1, 1x2, 2x2, 2x4, u.t.t. Pārbaudot eksistējošu kvadrātu atrašanās vietas un pozīcijas, vajag atrast brīvu vietu piemēram laukam 1x4. tā nu viņš saģenerē skatoties pēc aizpildījumiem eregi patternu un meklējamo stringu, un ja sakrīt tad izdod pozīciju kurā mēs varam ievietot jauno bloku. Var jau būt ka ir kāds tiešām super racionālāks veids kā to īstenot, tad nu lūgtum hintus studijā ;) Edited September 4, 2012 by _siikais_ Quote Link to comment Share on other sites More sharing options...
marrtins Posted September 3, 2012 Report Share Posted September 3, 2012 (edited) Tas ir kāds uzdevums treniņiem/sacensībām? Kur ir pilns tā teksts? Vai tad kvadrāts var būt 1:2? Edited September 3, 2012 by marrtins Quote Link to comment Share on other sites More sharing options...
daGrevis Posted September 3, 2012 Report Share Posted September 3, 2012 ~~~ ^0+[0-1]{7,}0+[0-1]{7,}0+[0-1]{7,}0+$ ~~~ _Verbose version_: ~~~ ^ 0+ [0-1]{7,} 0+ [0-1]{7,} 0+ [0-1]{7,} 0+ $ ~~~ Quote Link to comment Share on other sites More sharing options...
marrtins Posted September 3, 2012 Report Share Posted September 3, 2012 (edited) 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 Edited September 3, 2012 by marrtins Quote Link to comment Share on other sites More sharing options...
_siikais_ Posted September 4, 2012 Author Report Share Posted September 4, 2012 (edited) daGrevis patterns var atšķirties garumā un izskatā, jo viņš tiek ģenerēts atkarībā no esošo kvadrātu/laukumu izvietojumam marrtins tas ir mēģinājums priekš klienta reanimēt spēles scriptu kas meklē vietu iekš bankas jaunu mantu. p.s. tūlīt patestēšu tavu piemēru. p.s.s. īsti tomēr kkas ņepašet, $tofind="2x2", viņš parāda row=3, col=2, bet ja izmantojam in.txt datus tad vajadzētu būt row=0, col=3 ne ta? Edited September 4, 2012 by _siikais_ Quote Link to comment Share on other sites More sharing options...
marrtins Posted September 4, 2012 Report Share Posted September 4, 2012 Nu tas atkarībā, no kuras puses sāk meklēt :) Var jau samaklēt arī visus iespējamos variantus ;) 2x2 der "daaaaaaaaadz" variantos šajā piemērā. Quote Link to comment Share on other sites More sharing options...
_siikais_ Posted September 4, 2012 Author Report Share Posted September 4, 2012 njā my bad, testēšu tālāk ;) Quote Link to comment Share on other sites More sharing options...
_siikais_ Posted September 4, 2012 Author Report Share Posted September 4, 2012 (edited) Paldies par padomiem, bet noīstenoju pa savam: 1) viss saturs lielā garā virknē ar 1 un 0; 2) cheko pēc kārtas katru pozīciju un substringso konkrēti vajadzīgo garumu attiecīgi tik daudz līnijās cik ir augstums, līdz ar to ja izgriestais strings ir visas 0 tad konkrētajā slotā var ievietot ;) 2 for cikli, 3 ifi un substring, tagad tik atliek uztaisīt pašas eksistējošo mantu string virkni un smartsearch gatavs :) Edited September 4, 2012 by _siikais_ Quote Link to comment Share on other sites More sharing options...
marrtins Posted September 4, 2012 Report Share Posted September 4, 2012 Iepostē kodu. Quote Link to comment Share on other sites More sharing options...
_siikais_ Posted September 4, 2012 Author Report Share Posted September 4, 2012 kods http://paste.php.lv/c3da42addae07aa30b2e7eacac807386?lang=php esošo $string virkni neizvadīs slotu, jo divas pēc kārtas esošās nulles ir katra savā līnijā. Quote Link to comment Share on other sites More sharing options...
marrtins Posted September 4, 2012 Report Share Posted September 4, 2012 Tobiš, kods nedarbojas? :) Quote Link to comment Share on other sites More sharing options...
daGrevis Posted September 4, 2012 Report Share Posted September 4, 2012 > // ja OOP tad return ;) Meh... Quote Link to comment Share on other sites More sharing options...
_siikais_ Posted September 4, 2012 Author Report Share Posted September 4, 2012 kods darbojas, tieši tā kā tam ir jāstrādā, vnk paskaidroju kāpēc ir tāds $string mainīgais un kāpēc neizvada slotu (ja nu kādam ienāktu prāta testēt ar esošajiem mainīgajirem). Ja pirm divām 0 to prieksā viņam vieninieku aizstāsi ar 0, tad iegūsi slota izvadi. ;) Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.