#!/usr/bin/env php 1: y 1>0: y 2>3: y 3>2: y 1>3: x 3>1: x 0>2: x 2>0: x 0>3: z 3>0: z 1>2: z 2>1: z */ $spalNa = array( 0 => 0, 1 => 0, 2 => 0, 3 => 0 ); $nazadnjeSpalNa = 0; function ObrniJogi($n) { $GLOBALS['spalNa'][$GLOBALS['nazadnjeSpalNa']] += $n; // dodamo passano spanje med globalne variable $obrniNa = $GLOBALS['nazadnjeSpalNa']; // po defaultu ne obracamo for($iter = 0; $iter < 4; $iter++) { // za vsako mozno pozicijo if($GLOBALS['spalNa'][$iter] < $GLOBALS['spalNa'][$GLOBALS['nazadnjeSpalNa']]) { // ce je katera manj obrabljena $obrniNa = $iter; // se hocemo obniti nanjo break; // ne potrebujemo drugih. dovolj je, da je manj obrabljena, z leti se skompenzira. } } if($obrniNa == $GLOBALS['nazadnjeSpalNa']) { // če ni potrebno obračati return "n"; } $joinaniPoziciji = strval($GLOBALS['nazadnjeSpalNa']).strval($obrniNa); // damo skupaj v string, da lahko izvedemo ... $GLOBALS['nazadnjeSpalNa'] = $obrniNa; // nastavimo nazadnje spal na, dokler še lahko switch ($joinaniPoziciji) { // ... veliko hitrejši switch od drugih stvari case "01": // vnaprej zračunani obrati, bolje od računanje kasneje return "y"; break; case "10": return "y"; break; case "23": return "y"; break; case "32": return "y"; break; case "13": return "x"; break; case "31": return "x"; break; case "02": return "y"; break; case "20": return "y"; break; case "03": return "z"; break; case "30": return "z"; break; case "12": return "z"; break; case "21": return "z"; break; } } ?>