function Generate($level) { $q_no = rand(5, 7); $opts_no = rand(2, 4); $ppl = rand(7, 14); $freq = $this->Frequencies($q_no, $opts_no, $ppl); $freq_max = array_map('max', $freq); $points = array_sum($freq_max) + rand(0, 1); // // Original exercise // $q_no = 6; // $opts_no = 3; // $ppl = 10; // $freq = [ // 0 => [1,4,5], // 1 => [6,3,1], // 2 => [4,0,6], // 3 => [7,2,1], // 4 => [6,3,1], // 5 => [1,6,3] // ]; // $freq_max = array_map('max', $freq); // $points = 35; $opts_text = range(chr(65), chr(65 + $opts_no - 1)); $question = 'Egy ' . NumText($q_no) . 'kérdéses tesztben minden kérdésnél a megadott ' . NumText($opts_no) . ' lehetőség (' . StringArray($opts_text, 'és') . ') közül kellett kiválasztani a helyes választ. A tesztet ' . NumText($ppl) . ' diák írta meg. Az alábbi diagram az egyes feladatokra adott válaszok eloszlását mutatja. A teszt értékelésekor minden helyes válaszra $1$ pont, helytelen válaszra pedig $0$ pont jár. Tudjuk, hogy a ' . NumText($ppl) . ' diák összesen $' . $points . '$ pontot szerzett. Igaz-e, hogy minden kérdésre az a jó válasz, amit a legtöbben jelöltek be?' . $this->Diagram($freq, $q_no, $opts_no); $options = ['Igaz', 'Hamis']; $correct = $freq_max == $points ? 0 : 1; $solution = $options[$correct]; for ($i = 0; $i < $q_no; $i++) { // Define most frequent options $max = []; for ($j = 0; $j < $opts_no; $j++) { if ($freq[$i][$j] == $freq_max[$i]) { $max[] = $opts_text[$j]; } } $max_text = count($max) == 1 ? $max[0] : StringArray($max, 'és'); $page[] = The($i + 1, TRUE) . ' ' . OrderText($i + 1) . ' kérdésre legtöbben ' . ($max[0] == 'A' ? 'az' : 'a') . ' ' . $max_text . ' választ jelölték meg, összesen $' . $freq_max[$i] . '$-' . On2($freq_max[$i]) . '.'; } if (array_sum($freq_max) == $points) { $page[] = 'Ezeknek a számoknak az összege $' . implode('+', $freq_max) . '=' . array_sum($freq_max) . '$, ami pont ugyanannyi, mint amennyi a feladatban szerepel, ezért az állítás <span class="label label-success">igaz</span>.'; } else { $page[] = 'Ha igaz lenne az állítás, akkor ezeknek a számoknak az összege $' . $points . '$ lenne. Viszont az összeg $' . implode('+', $freq_max) . '=' . array_sum($freq_max) . '$, ezért az állítás <span class="label label-danger">hamis</span>.'; } $hints[] = $page; return array('question' => $question, 'options' => $options, 'correct' => $correct, 'solution' => $solution, 'hints' => $hints); }
function Generate($level) { $d = pow(-1, rand(1, 2)) * rand($level, 2 * $level); $a0 = rand(-2 * $level, 2 * $level); $pos = rand($level + 2, $level + 4); // // Original exercise // $d = -12; // $pos = 5; // $a0 = 43; $a1 = $a0 + ($pos - 2) * $d; $a2 = $a0 + ($pos - 1) * $d; $question = 'Egy számtani sorozat ' . OrderText($pos - 1) . ' tagja $' . $a1 . '$, ' . OrderText($pos) . ' tagja $' . $a2 . '$. Határozza meg a sorozat első tagját!'; $correct = $a0; $solution = '$' . $correct . '$'; $page[] = 'Tudjuk, hogy a $a_{' . strval($pos - 1) . '}=' . $a1 . '$, és $a_{' . $pos . '}=' . $a2 . '$.'; $page[] = 'A differencia a szomszédos tagok különbsége:$$\\begin{eqnarray}a_{' . strval($pos - 1) . '}+d&=&a_{' . $pos . '}\\\\ d&=&a_{' . $pos . '}-a_{' . strval($pos - 1) . '}\\\\ d&=&' . $a2 . '-' . ($a1 > 0 ? $a1 : '(' . $a1 . ')\\\\ d&=&' . $a2 . '+' . abs($a1)) . '=' . $d . '\\end{eqnarray}$$'; $page[] = '<div class="alert alert-info"><strong>Sorozat $n.$ tagja:</strong><br />Ha egy sorozat első eleme $a_1$, és a differenciája $d$, akkor a sorozat $n.$ tagja a következő képlettel számítható:$$a_n=a_1+(n-1)\\cdot d$$</div>'; $hints[] = $page; $temp = ($pos - 1) * $d; $page = []; $page[] = 'Írjuk fel ezt az összefüggést $n=' . $pos . '$-' . On($pos) . '!$$a_{' . $pos . '}=a_1+(' . $pos . '-1)\\cdot ' . ($d > 0 ? $d : '(' . $d . ')') . '$$'; $page[] = 'Helyettesítsük be $a_{' . $pos . '}$-' . Dativ($pos) . ', és számoljuk ki a jobb oldali kifejezést:$$' . $a2 . '=a_1+' . strval($pos - 1) . '\\cdot ' . ($d > 0 ? $d : '(' . $d . ')') . '=a_1' . ($temp > 0 ? '+' . $temp : $temp) . '$$'; if ($temp < 0) { $page[] = 'Adjunk hozzá mindkét oldalhoz $' . abs($temp) . '$-' . Dativ($temp) . '!$$' . $a2 . '+' . abs($temp) . '=a_1$$'; } elseif ($temp > 0) { $page[] = 'Vonjunk ki mindkét oldalból $' . $temp . '$-' . Dativ($temp) . '!$$' . $a2 . '-' . $temp . '=a_1$$'; } $page[] = 'Tehát az $a_1$ értéke <span class="label label-success">$' . $a0 . '$</span>.'; $hints[] = $page; return array('question' => $question, 'correct' => $correct, 'solution' => $solution, 'hints' => $hints); }
function Generate($level) { $length = 1 + $level; // // Original exercise // $length = 3; $question = 'Hány olyan ' . ($length == 2 ? 'két' : NumText($length)) . 'jegyű pozitív egész szám van, amelynek minden számjegye különböző?'; $num_list = range(9, 9 - $length + 2); $correct = 9 * array_product($num_list); $solution = '$' . $correct . '$'; $page[] = 'Összesen $10$ számjegy van: $0,1,2,3,4,5,6,7,8,9$.'; $page[] = 'Az első számjegy helyére a $0$-n kívül bármelyik számjegy kerülhet, ami összesen $10-1=9$ lehetőség.'; for ($i = 1; $i < $length; $i++) { $page[] = The($i + 1, TRUE) . ' ' . OrderText($i + 1) . ' számjegy helyére bármelyik számjegy kerülhet, de mivel már felhasználtunk $' . $i . '$ darab számjegyet, már csak $10-' . $i . '=' . strval(10 - $i) . '$ számjegy közül választhatunk.'; } $page[] = 'A megoldást úgy kapjuk meg, ha a lehetőségeket összeszorozzuk:$$9\\cdot' . implode('\\cdot', $num_list) . '=' . $correct . '$$'; $page[] = 'Tehát a megoldás <span class="label label-success">$' . $correct . '$</span>.'; $hints[] = $page; return array('question' => $question, 'correct' => $correct, 'solution' => $solution, 'hints' => $hints); }
function Generate($level) { $colors = rand(1, 2) == 1 ? ['fekete', 'fehér'] : ['fehér', 'fekete']; $type = rand(0, 3); $ind = range(0, 3); shuffle($ind); // // Original exercise // $colors = ['fekete', 'fehér']; // $type = 0; // $ind = range(0,3); if ($type == 0) { $question = 'Egy fiókban néhány sapka van. Tekintsük a következő állítást:<br /> <i>„A fiókban minden sapka ' . $colors[0] . '.”</i> <br />Válassza ki az alábbiak közül az összes állítást, amely tagadása a fentinek!'; $page[] = 'Az eredeti állítás azt jelenti, hogy a fiókban <i>mindegyik</i> sapka színe ' . $colors[0] . '.'; $page[] = 'Ez az állítás akkor nem teljesül, ha van <i>legalább egy</i> olyan sapka a fiókban, ami <i>nem</i> ' . $colors[0] . '.'; $page[] = 'Nézzük meg, hogy melyik állítás jelenti ugyanezt!'; $opt[$ind[0]] = '<i>„A fiókban minden sapka ' . $colors[1] . '.”</i>'; $opt[$ind[1]] = '<i>„A fiókban nincs ' . $colors[1] . ' sapka.”</i>'; $opt[$ind[2]] = '<i>„A fiókban van olyan sapka, amely nem ' . $colors[0] . '.”</i>'; $opt[$ind[3]] = '<i>„A fiókban nem minden sapka ' . $colors[0] . '.”</i>'; $page[3 + $ind[0]] = The($ind[0] + 1, TRUE) . ' <b>' . OrderText($ind[0] + 1) . '</b> állítás azt jelenti, hogy a fiókban <i>mindegyik</i> sapka színe ' . $colors[1] . ', ami nem ugyanazt jelenti, mint az állítás ellentéte, ezért <span class="label label-danger">hamis</span>.'; $page[3 + $ind[1]] = The($ind[1] + 1, TRUE) . ' <b>' . OrderText($ind[1] + 1) . '</b> állítás azt jelenti, hogy a sapkák közül <i>egyik sem</i> ' . $colors[1] . ', ami nem ugyanazt jelenti, mint az állítás ellentéte, ezért <span class="label label-danger">hamis</span>.'; $page[3 + $ind[2]] = The($ind[2] + 1, TRUE) . ' <b>' . OrderText($ind[2] + 1) . '</b> állítás azt jelenti, hogy a sapkák közül van <i>legalább egy</i>, ami <i>nem</i> ' . $colors[0] . ', ami ugyanazt jelenti, mint az állítás ellentéte, ezért <span class="label label-success">igaz</span>.'; $page[3 + $ind[3]] = The($ind[3] + 1, TRUE) . ' <b>' . OrderText($ind[3] + 1) . '</b> állítás azt jelenti, hogy a sapkák közül van <i>legalább egy</i>, ami <i>nem</i> ' . $colors[0] . ', ami ugyanazt jelenti, mint az állítás ellentéte, ezért <span class="label label-success">igaz</span>.'; $hints[] = $page; $correct[$ind[0]] = FALSE; $correct[$ind[1]] = FALSE; $correct[$ind[2]] = TRUE; $correct[$ind[3]] = TRUE; $ind1 = min($ind[2], $ind[3]); $ind2 = max($ind[2], $ind[3]); $solution = The($ind1, TRUE) . ' ' . OrderText($ind1) . ' és ' . The($ind2) . ' ' . OrderText($ind2) . ' állítás igaz, a többi hamis.'; } elseif ($type == 1) { $question = 'Egy fiókban néhány sapka van. Tekintsük a következő állítást:<br /> <i>„A fiókban nincs ' . $colors[1] . ' sapka.”</i> <br />Válassza ki az alábbiak közül az összes állítást, amely tagadása a fentinek!'; $page[] = 'Az eredeti állítás azt jelenti, hogy a sapkák közül <i>egyik sem</i> ' . $colors[1] . '.'; $page[] = 'Ez az állítás akkor nem teljesül, ha van <i>legalább egy</i> olyan sapka, ami ' . $colors[1] . '.'; $page[] = 'Nézzük meg, hogy melyik állítás jelenti ugyanezt!'; $opt[$ind[0]] = '<i>„A fiókban minden sapka ' . $colors[0] . '.”</i>'; $opt[$ind[1]] = '<i>„A fiókban nincs ' . $colors[0] . ' sapka.”</i>'; $opt[$ind[2]] = '<i>„A fiókban van olyan sapka, amelyik ' . $colors[1] . '.”</i>'; $opt[$ind[3]] = '<i>„A fiókban nem minden sapka ' . $colors[0] . '.”</i>'; $page[3 + $ind[0]] = The($ind[0] + 1, TRUE) . ' <b>' . OrderText($ind[0] + 1) . '</b> állítás azt jelenti, hogy a fiókban <i>mindegyik</i> sapka színe ' . $colors[0] . ', ami nem ugyanazt jelenti, mint az állítás ellentéte, ezért <span class="label label-danger">hamis</span>.'; $page[3 + $ind[1]] = The($ind[1] + 1, TRUE) . ' <b>' . OrderText($ind[1] + 1) . '</b> állítás azt jelenti, hogy a sapkák közül <i>egyik sem</i> ' . $colors[0] . ', ami nem ugyanazt jelenti, mint az állítás ellentéte, ezért <span class="label label-danger">hamis</span>.'; $page[3 + $ind[2]] = The($ind[2] + 1, TRUE) . ' <b>' . OrderText($ind[2] + 1) . '</b> állítás azt jelenti, hogy a sapkák közül van <i>legalább egy</i>, ami ' . $colors[1] . ', ami ugyanazt jelenti, mint az állítás ellentéte, ezért <span class="label label-success">igaz</span>.'; $page[3 + $ind[3]] = The($ind[3] + 1, TRUE) . ' <b>' . OrderText($ind[3] + 1) . '</b> állítás azt jelenti, hogy a sapkák közül van <i>legalább egy</i>, ami <i>nem</i> ' . $colors[0] . ', ami nem ugyanazt jelenti, mint az állítás ellentéte, ezért <span class="label label-danger">hamis</span>.'; $hints[] = $page; $correct[$ind[0]] = FALSE; $correct[$ind[1]] = FALSE; $correct[$ind[2]] = TRUE; $correct[$ind[3]] = FALSE; $solution = The($ind[2], TRUE) . ' ' . OrderText($ind[2]) . ' állítás igaz, a többi hamis.'; } elseif ($type == 2) { $question = 'Egy fiókban néhány sapka van. Tekintsük a következő állítást:<br /> <i>„A fiókban van olyan sapka, amelyik ' . $colors[1] . '.”</i> <br />Válassza ki az alábbiak közül az összes állítást, amely tagadása a fentinek!'; $page[] = 'Az eredeti állítás azt jelenti, hogy a sapkák közül <i>legalább az egyik</i> ' . $colors[1] . '.'; $page[] = 'Ez az állítás akkor nem teljesül, ha a sapkák közül <i>egyik sem</i> ' . $colors[1] . '.'; $page[] = 'Nézzük meg, hogy melyik állítás jelenti ugyanezt!'; $opt[$ind[0]] = '<i>„A fiókban minden sapka ' . $colors[0] . '.”</i>'; $opt[$ind[1]] = '<i>„A fiókban nincs ' . $colors[1] . ' sapka.”</i>'; $opt[$ind[2]] = '<i>„A fiókban van olyan sapka, amelyik ' . $colors[0] . '.”</i>'; $opt[$ind[3]] = '<i>„A fiókban nem minden sapka ' . $colors[1] . '.”</i>'; $page[3 + $ind[0]] = The($ind[0] + 1, TRUE) . ' <b>' . OrderText($ind[0] + 1) . '</b> állítás azt jelenti, hogy a fiókban <i>mindegyik</i> sapka színe ' . $colors[0] . ', ami nem ugyanazt jelenti, mint az állítás ellentéte, ezért <span class="label label-danger">hamis</span>.'; $page[3 + $ind[1]] = The($ind[1] + 1, TRUE) . ' <b>' . OrderText($ind[1] + 1) . '</b> állítás azt jelenti, hogy a sapkák közül <i>egyik sem</i> ' . $colors[1] . ', ami ugyanazt jelenti, mint az állítás ellentéte, ezért <span class="label label-success">igaz</span>.'; $page[3 + $ind[2]] = The($ind[2] + 1, TRUE) . ' <b>' . OrderText($ind[2] + 1) . '</b> állítás azt jelenti, hogy a sapkák közül van <i>legalább egy</i>, ami ' . $colors[0] . ', ami nem ugyanazt jelenti, mint az állítás ellentéte, ezért <span class="label label-danger">hamis</span>.'; $page[3 + $ind[3]] = The($ind[3] + 1, TRUE) . ' <b>' . OrderText($ind[3] + 1) . '</b> állítás azt jelenti, hogy a sapkák közül van <i>legalább egy</i>, ami <i>nem</i> ' . $colors[1] . ', ami nem ugyanazt jelenti, mint az állítás ellentéte, ezért <span class="label label-danger">hamis</span>.'; $hints[] = $page; $correct[$ind[0]] = FALSE; $correct[$ind[1]] = TRUE; $correct[$ind[2]] = FALSE; $correct[$ind[3]] = FALSE; $solution = The($ind[1], TRUE) . ' ' . OrderText($ind[1]) . ' állítás igaz, a többi hamis.'; } elseif ($type == 3) { $question = 'Egy fiókban néhány sapka van. Tekintsük a következő állítást:<br /> <i>„A fiókban nem minden sapka ' . $colors[1] . '.”</i> <br />Válassza ki az alábbiak közül az összes állítást, amely tagadása a fentinek!'; $page[] = 'Az eredeti állítás azt jelenti, hogy a sapkák közül <i>legalább</i> az egyik <i>nem</i> ' . $colors[1] . '.'; $page[] = 'Ez az állítás akkor nem teljesül, ha a sapkák közül <i>egyik sem</i> ' . $colors[1] . '.'; $page[] = 'Nézzük meg, hogy melyik állítás jelenti ugyanezt!'; $opt[$ind[0]] = '<i>„A fiókban minden sapka ' . $colors[0] . '.”</i>'; $opt[$ind[1]] = '<i>„A fiókban nincs ' . $colors[1] . ' sapka.”</i>'; $opt[$ind[2]] = '<i>„A fiókban van olyan sapka, amelyik ' . $colors[0] . '.”</i>'; $opt[$ind[3]] = '<i>„A fiókban nem minden sapka ' . $colors[1] . '.”</i>'; $page[3 + $ind[0]] = The($ind[0] + 1, TRUE) . ' <b>' . OrderText($ind[0] + 1) . '</b> állítás azt jelenti, hogy a fiókban <i>mindegyik</i> sapka színe ' . $colors[0] . ', ami nem ugyanazt jelenti, mint az állítás ellentéte, ezért <span class="label label-danger">hamis</span>.'; $page[3 + $ind[1]] = The($ind[1] + 1, TRUE) . ' <b>' . OrderText($ind[1] + 1) . '</b> állítás azt jelenti, hogy a sapkák közül <i>egyik sem</i> ' . $colors[1] . ', ami ugyanazt jelenti, mint az állítás ellentéte, ezért <span class="label label-success">igaz</span>.'; $page[3 + $ind[2]] = The($ind[2] + 1, TRUE) . ' <b>' . OrderText($ind[2] + 1) . '</b> állítás azt jelenti, hogy a sapkák közül van <i>legalább egy</i>, ami ' . $colors[0] . ', ami nem ugyanazt jelenti, mint az állítás ellentéte, ezért <span class="label label-danger">hamis</span>.'; $page[3 + $ind[3]] = The($ind[3] + 1, TRUE) . ' <b>' . OrderText($ind[3] + 1) . '</b> állítás azt jelenti, hogy a sapkák közül van <i>legalább egy</i>, ami <i>nem</i> ' . $colors[1] . ', ami <i>nem</i> ugyanazt jelenti, mint az állítás ellentéte, ezért <span class="label label-danger">hamis</span>.'; $hints[] = $page; $correct[$ind[0]] = FALSE; $correct[$ind[1]] = TRUE; $correct[$ind[2]] = FALSE; $correct[$ind[3]] = FALSE; $solution = The($ind[1], TRUE) . ' ' . OrderText($ind[1]) . ' állítás igaz, a többi hamis.'; } $options[] = $opt[0]; $options[] = $opt[1]; $options[] = $opt[2]; $options[] = $opt[3]; return array('question' => $question, 'correct' => $correct, 'solution' => $solution, 'options' => $options, 'type' => 'multi', 'hints' => $hints); }
function Hints($graph, $degrees) { $size = count($graph); $hints[][] = 'Rajzoljunk annyi kört, ahány fős a társaság! Ha két ember ismeri egymást, akkor a nekik megfelelő két kört össze fogjuk kötni. Ha valakinek már minden ismerősét bejelöltük, akkor vele "végeztünk", úgyhogy zöldre színezzük a neki megfelelő kört:' . $this->Graph($graph, 0); for ($node = 0; $node < $size - 1; $node++) { if (isset($graph[$node])) { $prev_degree = 0; foreach ($graph as $prev_node => $prev_edges) { if (in_array($node, $prev_edges)) { $prev_degree++; } if ($prev_node == $node) { break; } } $degree_left = $degrees[$node] - $prev_degree; $hints[][] = 'Most vizsgáljuk meg azt a személyt, akinek $' . $degrees[$node] . '$ ismerőse van. Mivel őt ' . ($prev_degree == 0 ? 'még senkivel nem kötöttük össze' : 'már $' . $prev_degree . '$ személlyel összekötöttük') . ($degree_left > 0 ? ', és összesen $' . $degree_left . '$ olyan személy maradt, akivel még nem végeztünk, ez azt jelenti, hogy minden lehetséges emberrel össze kell kötnünk őt:' : ', ez azt jelenti, hogy az összes ismerősét bejelöltük:') . $this->Graph($graph, $node + 1); } else { $hints[][] = 'Most vizsgáljuk meg azt a személyt, akinek $' . $degrees[$node] . '$ ismerőse van.Mivel őt már $' . $degrees[$node] . '$ emberrel összekötöttük, ez azt jelenti, hogy az összes ismerősét bejelöltük:' . $this->Graph($graph, $node + 1); } } $hints[][] = 'Az ábráról leolvasható, hogy ' . The($size) . ' ' . OrderText($size) . ' személynek <span class="label label-success">$' . $degrees[count($degrees) - 1] . '$</span> ismerőse van.' . $this->Graph($graph, $size); return $hints; }
function Hints($questions, $risk_factors, $prize, $option, $risk1 = NULL, $risk2 = NULL) { $money = 0; $remain = 0; $page[] = 'A játékosnak kezdetben $0$ Ft-ja van. Nézzük meg lépésenként, hogy mennyi pénze lesz az egyes kérdések után!'; for ($i = 0; $i < $questions; $i++) { // Did player win round? if ($option == 1 || $option == 2) { $correct = TRUE; } elseif ($option == 3) { if ($i < $questions - 1) { $correct = TRUE; } else { $correct = FALSE; } } if ($correct) { $total = $money + ($i == 0 ? $prize : 2 * $prize); $page[] = '<b>' . strval($i + 1) . '. kérdés</b><br />A játékos az ' . OrderText($i + 1) . ' kérdésre jól válaszolt, ezért ' . ($i == 0 ? '$' . BigNum($prize) . '$ Ft-ot kap.' : 'az előzőleg feltett pénze kétszeresét, azaz $2\\cdot' . BigNum($prize) . '=' . BigNum(2 * $prize) . '$ Ft-ot nyer vissza.'); if ($i == $questions - 1) { $hints[] = $page; $page = []; $page[] = 'Tehát a játékos nyereménye összesen $' . BigNum($money) . '+' . BigNum($i == 0 ? $prize : 2 * $prize) . '=$<span class="label label-success">$' . BigNum($total) . '$</span> Ft.'; } else { if ($option == 1) { $risk = max($risk_factors); } elseif ($option == 2) { $risk = min($risk_factors); } elseif ($option == 3) { if ($i == 0) { $risk = $risk1; } else { $risk = $risk2; } } $bet = $total * $risk / 100; $remain = $total - $bet; $page[] = 'Ezért az ' . OrderText($i + 1) . ' kérdés után $' . BigNum($money) . '+' . BigNum($i == 0 ? $prize : 2 * $prize) . '=' . BigNum($total) . '$ Ft-ja van.'; $page[] = 'Ennek a $' . $risk . '\\%$-át, azaz $' . ($risk != 100 ? BigNum($total) . '\\cdot' . round2($risk / 100) . '=' : '') . BigNum($bet) . '$ Ft-ot tesz fel a következő kérdésnél, ' . ($remain == 0 ? 'magának pedig nem tart meg semmit.' : '$' . BigNum($remain) . '$ Ft-ot pedig megtart magának.'); } } else { $page[] = '<b>' . strval($i + 1) . '. kérdés</b><br />A játékos az ' . OrderText($i + 1) . ' kérdésre rosszul válaszolt, ezért az előzőleg feltett pénzét elvesztette, és ' . ($remain == 0 ? '' : 'mindössze') . ' <span class="label label-success">$' . BigNum($remain) . '$</span> Ft-ja maradt.'; } $money = $remain; $prize = $bet; $hints[] = $page; $page = []; } // print_r($hints); return array($hints, $total); }