diff options
author | emkael <emkael@tlen.pl> | 2014-07-03 02:57:26 +0200 |
---|---|---|
committer | emkael <emkael@tlen.pl> | 2014-07-03 02:57:26 +0200 |
commit | eb426459388941ca9728147905e9e8325675dfe0 (patch) | |
tree | f76ce0721d40357bf7b1aa8f8c64e28ae4ca4d32 | |
parent | cca2ddd51a8fca2685799cc03399fc19c8d09ada (diff) |
documentation
-rw-r--r-- | how.php | 42 |
1 files changed, 31 insertions, 11 deletions
@@ -1,31 +1,50 @@ <?php +/** + * Skrypt parsuj¹cy KoPS-owy plik HOWELL.DAT do JSONa ³ykalnego przez aplikacjê. + * + * Format pliku movements.json: + * - s³ownik klucz-wartoœæ + * - klucz s³ownika: X-Y (X - liczba sto³ów, Y - liczba rund; umowne, parsowane dla menu) + * - wartoœci - struktura: + * - tables: INT, liczba sto³ów + * - rounds: INT, liczba rund + * - sets: ARRAY[INT], pocz¹tkowe numery sto³ów dla kolejnych kompletów + * - movement: ARRAY[STRING], ruch pary nr 1 (pierwszej z par ruchomych), okreœlony kolejnymi pozycjami formatu /[0-9][NE]/ + * - positions: ARRAY[INT], pocz¹tkowe numery par na kolejnych pozycjach + **/ + +// Dzielimy plik po liniach "*-----..." $file = preg_split('/\*-+/', file_get_contents('howell.dat')); $movements = []; for ($i = 0; $i < count($file); $i++) { + // segmenty o nieparzystym indeksie (drugi, czwarty itp.) to dane rotacji + // parsowane s¹ zawsze PO sparsowaniu segmentu o parzystym indeksie, wiêc poni¿ej jest trochê zmiennych ustawianych jeszcze ni¿ej if ($i%2) { $matches = []; - preg_match_all('/(\d+)/', $file[$i], $matches); - $sets = array_fill(0, $rounds, 0); + preg_match_all('/(\d+)/', $file[$i], $matches); // wyci¹gamy wszystkie liczby z rotacji (numery par) + $sets = array_fill(0, $rounds, 0); // tablica kompletów rozdañ $positions = []; $table = 1; $set = 0; for ($j = 0; $j < count($matches[1]); $j++) { - if ((int)$matches[1][$j]) { - $sets[$set++] = $table++; - $positions[] = (int)($matches[1][$j++]); - $positions[] = (int)($matches[1][$j]); + if ((int)$matches[1][$j]) { // mamy niezerowy numerek, wiêc jest para + $sets[$set++] = $table++; // zestaw zaczyna na kolejnym stole + $positions[] = (int)($matches[1][$j++]); // ustawiamy dwa kolejne numery par + $positions[] = (int)($matches[1][$j]); } - else { - $sets[$set++] = 0; + else { // mamy zerowy numerek, wiêc jest zbiornica + $sets[$set++] = 0; // zestaw nie zaczyna na ¿adnym stole } } $movement = []; $lines = ['N','E']; - for ($j = $rounds; $j >= 1; $j--) { - $pos = array_search($j, $positions); - $movement[] = ceil(($pos+1)/2).$lines[$pos%2]; + for ($j = $rounds; $j >= 1; $j--) { // tyle par ruchomych, ile rund + $pos = array_search($j, $positions); // odnajdujemy pary ruchome w kolejnoœci X, X-1, ..., 2, 1 + $movement[] = ceil(($pos+1)/2).$lines[$pos%2]; // i ich pozycjê w tablicy $positions t³umaczymy na pozycjê na sali (xN/E), tworz¹c wstêgê rotacji } + // pozosta³e pary - z automatu stacjonarne + // kompilujemy strukturê $movements[$id] = [ 'tables' => $tables, 'rounds' => $rounds, @@ -34,6 +53,7 @@ for ($i = 0; $i < count($file); $i++) { 'positions' => $positions ]; } + // segmenty nieparzyste to dane ogólne - liczba rund i sto³ów else { $matches = []; preg_match('/.*(-\d+).*RUNDY.*?(\d+).*STOLIKI.*/s', $file[$i], $matches); |