Diskuze: Pomoc s algoritmom
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 15 zpráv z 15.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Prostě můžeš ty směny a volna, tak jak jsi je řekl za sebou skládat za sebe do kalendáře na dané dny? Nebude to zrovna efektivní když vybereš rok 2026, ale za to je to velmi jednoduché.
Co udelat ruzne kalendare? ranni, dopoledni, odpoledni, nocni, dovolena?
Jinak, mi z toho popisu neni jasne, jak to ma fungovat. Co je vstupem. Kdyz tim
program nakrmim, tak, co ma vyprodukovat. Kukurice, sacky, olej, sul, elektrina
- stroj - sacky s popcornem. Nejaky priklad 3 lidi, treba.
Já to pochopil tak, že program jednou na začátku nakrmí sekvencí směn a volna k určitému datumu odkud začíná a pak může jen zadat datum v budoucnosti a dostane odpověď typu noční nebo volno, atp.
'PO-NE 2+2+3, čiže 2 dni ráno, 2dni poobede, 3 dni nočná. Ďalší týždeň 2 dni voľno, 2dni ranná, 3 dni poobedná. Ďalší týždeň 2dni nočná, 2 dni voľno, 3 dni ranná a pod. '
Lojza
po | ut | st | ct | pa | so | ne
rano | rano | odpoledne | odpoledne | noc | noc | noc
volno | volno | rano | rano | odpoledne | odpoledne | odpoledne
noc | noc | volno | volno | rano | rano | rano
Ale, nevim, co s tim. Takhle to zadas do kalendare, takhle to zobrazi. Nebo, potrebujes predvyplnit kalendar? A uvazujes i statni svatky a tak? Protoze to neni tak uplne legrace. Nejspis jsou na to specializovane aplikace za drahe penize.
Jj, uz to taky vidim stejne, asi.
Normalne bych udelal tabulku, kalendar. Vyplnil do ni svatky a pak do ni zacal
tohle vyplnovat. U cloveka bych pak sledoval, ktera vzory jsou komplet vyplnene
a u ktereho diky svatku prisel o den. Ty usporene dny bude treba nejak
resit.
Ale, obecne, tohle je spatne schema. Je to sice ferove takhle smeny rozhodit.
Ale clovek potrebuje pravidelny rezim. A navic je to i v zakone. Na tohle
stridani ti nikdo se zdravym rozumem nepristoupi. Maximalne to vydrzi 1-3
mesice, protoze bude mit tak naruseny spanek, ze se mu nebude darit usinat v
dobe, kdy nema smenu.
Keby si naplnil do poľa tie smeny ako
R, R, O, O, N, N, V... atď
Potom zadáš dátum o ktorom chceš zistiť info odrátaš aktuálny dátum a
zistíš počet dní medzi nimi a tento počet dní pripočítaš k poradiu
aktuálneho dňa (PO 0, NE 6) a dáš modulo o veľkosti tých smien tak
dostaneš index smeny ktorá by mala byť. Nie som si úplne istý píšem
narýchlo z vlaku, sorry ak to bude blbosť (samozrejme so sviatkami
nerátam)
Svátky většinou nikoho nezajímají ve vlivu na směny, projeví se to
akorát ve výplatě. Jinak budeš se divit, ale takhle to chodí i v
některých obřích firmách, mám kamaráda v mezinárodní firmě s
miliardovýma obratama a chudáci tam prostě dělají, 2 dny denní 12 a pak
hned 2 dny noční 12, apod. šílenosti, nechápu jak to někdo může dělat,
přesně jak mluvíš o tom narušeném spánku a všechno prostě. Nicméně to
je offtopic, kterým nemusíme spamovat
Ale tak to přeci nefunguje. U směnných provozů se střídá i doba volna. Nikde nemůžeš mít 7 pracovních dní za sebou, pak mít dva dny volna a pak zas 7 dní práce. Jestli se nepletu, tak se tam musí střídat dlouhý a krátký týden. Viz odkaz na obrázek:
Je to tak ako som napisal. Pondelok utorok jedna zmena, streda stvrtok druha
zmena, piatok, sobota, nedela tretia zmena. Cize to, co vyjde na piatok, plati
cely vikend. Ked nocna, tak nocna. Ked volno, tak volno. Na tomto systeme
funguju vsetky zmeny v chemosvite, cize asi 1500 ludi. Tento ukol je vsak len
cisto pre mna, aby som si vedel vypocitat zmeny. Aby som to nemusel den po dni
zadavat jak blb do kalendara, ked budem chciet vediet, co mi vyjde na stedry
den.
Celkom sa mi paci ten napad s tym polom. Proste by som dajako v cykle daval
datumy a priradzoval im zmeny podla toho, aky je to den v tyzdni.
Nedalo mi to. Je to základ. Dalo by se to upravit do funkce, která by vracela konkrétní den. A musí se to doplnit o startovací směnu
<?php
$klic = array(0,0,1,1,2,2,2);
$smeny = array("ranni","odpoledni","nocni","volno");
$pozice = 0;
$tyden = 1;
$posu = 0;
echo "<table>\n<tr><th>Tyden</th><th>Pondeli</th><th>Utery</th><th>Streda</th><th>Ctvrtek</th><th>Patek</th><th>Sobota</th><th>Nedele</th></tr>\n
<tr><td> $tyden: </td>";
for($a=0;$a<356;$a++)
{
$p = ($klic[$pozice]+(($tyden-1)*3))%4; // lépe jsem to nevymyslel, tohle je klic
echo "<td> ".$smeny[$p]." </td>";
if(($a+1)%7==0 and $a!= 0) echo "</tr>\n<tr><td> ".++$tyden.": </td>";
if($pozice == 6) $pozice = 0;
else $pozice++;
}
echo "</table>";
?>
Pokud jsem to správně pochopil, tak jsou vlastně jen 4 možnosti, jak může týden vypadat:
a takhle se to opakuje dokola.
Takže pokud jde o zjištění směny v daný den, tak mě napadlo něco jako:
<?php
$startDate = new DateTime('2018-08-01');
$targetDate = new DateTime('2018-08-17');
$startDateWeekIndex = 0; //0,1,2 nebo 3
$weeks = [
['R','R','O','O','N','N','N'], //0
['V','V','R','R','O','O','O'], //1
['N','N','V','V','R','R','R'], //2
['O','O','N','N','V','V','V'] //3
];
$date1 = clone $targetDate;
$date2 = clone $startDate;
$date1 = new DateTime($date1->modify('Monday this week')->format('Y-m-d'));
$date2 = new DateTime($date2->modify('Monday this week')->format('Y-m-d'));
$weeksCount = $date2->diff($date1)->d / 7;
$weekIndex = ($weeksCount+$startDateWeekIndex) % 4;
$dayIndex = $targetDate->format('N') - 1;
echo "Směna dne " . $targetDate->format('d.m.Y') . ": " . $weeks[$weekIndex][$dayIndex];
Datumy oba nastavuju na pondělí toho daného týdne, aby se lépe počítal rozdíl.
Fu. No vecer to vyskusam a ak to funguje, tak sa ti klaniam vrucne
Kamarati, ono to uz existuje, aom zistil... https://play.google.com/…apps/details?…
Zobrazeno 15 zpráv z 15.