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) { if ($level <= 3) { $numbers = range(1, 5); $set_size = rand(3, 4); $subset_size = 2; } elseif ($level <= 6) { $numbers = range(1, 10); $set_size = rand(4, 6); $subset_size = rand(2, 3); } else { $numbers = range(1, 20); $set_size = rand(7, 10); $subset_size = rand(3, 4); } $set = $this->Set($numbers, $set_size); $subset = NumText($subset_size); // // Original exercise // $set_size = 5; // $set = [2,3,5,7,11]; // $subset = 'kettő'; $question = 'Hány darab ' . ($subset == 'kettő' ? 'két' : $subset) . 'elemű részhalmaza van ' . The($set[0]) . ' $\\{' . implode(";", $set) . '\\}$ halmaznak?'; $correct = binomial_coeff(count($set), $subset_size); $hints = $this->Hints($set_size, $subset_size); $solution = '$' . $correct . '$'; return array('question' => $question, 'correct' => $correct, 'solution' => $solution, 'hints' => $hints); }
function Generate($level) { if ($level <= 3) { $questions = rand(2, 3); } elseif ($level <= 6) { $questions = rand(3, 4); } else { $questions = rand(4, 5); } $prize = rand($level, 2 * $level) * pow(10, $questions); $risk_factors = [10, 25, 50, 75, 100]; $factor_no = rand(2, count($risk_factors)); shuffle($risk_factors); $risk_factors = array_splice($risk_factors, 0, $factor_no); sort($risk_factors); // $questions = 5; // $prize = 40000; // $risk_factors = [50, 75, 100]; $question = 'Egy televíziós játékban $' . $questions . '$ kérdést tehet fel a játékvezető. A játék során a versenyző, ha az első kérdésre jól válaszol, $' . BigNum($prize) . '$ forintot nyer. Minden további kérdés esetén döntenie kell, hogy a játékban addig megszerzett pénzének ' . NumArray($risk_factors) . ' százalékát teszi-e fel. Ha jól válaszol, feltett pénzének kétszeresét kapja vissza, ha hibázik, abba kell hagynia a játékot, és a fel nem tett pénzét viheti haza. '; $option = rand(1, 4); if ($option == 1) { $question .= 'Mennyi pénzt visz haza az a játékos, aki mind az ' . NumText($questions) . ' feltett kérdésre jól válaszol, s bátran kockáztatva mindig a legnagyobb tétet teszi meg?'; list($hints, $correct) = $this->Hints($questions, $risk_factors, $prize, $option); } elseif ($option == 2) { $question .= 'Az a játékos, aki mindig helyesen válaszol, de óvatos, és a ' . NumText($questions - 1) . ' utolsó fordulóban pénzének csak $' . min($risk_factors) . '\\%$-át teszi fel, hány forintot visz haza?'; list($hints, $correct) = $this->Hints($questions, $risk_factors, $prize, $option); } elseif ($option == 3) { shuffle($risk_factors); $risk1 = $risk_factors[0]; $risk2 = $risk_factors[1]; if ($risk2 == 100) { list($risk1, $risk2) = [$risk2, $risk1]; } $question .= 'A vetélkedő során az egyik versenyző az első ' . NumText($questions - 1) . ' kérdésre jól válaszolt. A második kérdésnél a pénzének $' . $risk1 . '\\%$-át, a ' . NumArray(range(3, $questions), 'és', '.') . ' kérdés esetén pénzének $' . $risk2 . '\\%$-át tette fel. Az $' . $questions . '.$ kérdésre sajnos rosszul válaszolt. Hány forintot vihetett haza ez a játékos?'; list($hints, $correct) = $this->Hints($questions, $risk_factors, $prize, $option, $risk1, $risk2); } else { $question .= 'Egy versenyző mind ' . The($questions) . ' $' . $questions . '$ fordulóban jól válaszol, és közben minden fordulóban azonos eséllyel teszi meg a játékban megengedett lehetőségek valamelyikét. Mennyi annak a valószínűsége, hogy az elnyerhető maximális pénzt viheti haza?'; $page[] = 'A játékos az első válasz után összesen $' . count($risk_factors) . '$-féle opció közül választhat.'; $page[] = 'Akkor fogja hazavinni a legtöbb pénzt, ha minden kérdés után a pénze lehető legnagyobb részét, azaz $' . max($risk_factors) . '\\%$-át teszi fel.'; for ($i = 1; $i <= $questions - 1; $i++) { $page[] = '<ul><li>Annak a valószínűsége, hogy ' . The($i) . ' ' . OrderText($i) . ' kérdés után ezt az opciót választja, $\\frac{1}{' . count($risk_factors) . '}$.</li></ul>'; } $page[] = '(' . strtoupper(The($questions)) . ' ' . OrderText($questions) . ' kérdés után már nem kell tétet tenni, mert vége van a játéknak.)'; $page[] = 'Ezért annak a valószínűsége, hogy a játékos az elnyerhető maximális pénzt viheti haza, $\\left(\\frac{1}{' . count($risk_factors) . '}\\right)^' . strval($questions - 1) . '=$<span class="label label-success">$\\frac{1}{' . pow(count($risk_factors), $questions - 1) . '}$</span>.'; $hints[] = $page; $correct = [1, pow(count($risk_factors), $questions - 1)]; } if ($option < 4) { $solution = '$' . $correct . '$ Ft'; return array('question' => $question, 'correct' => $correct, 'solution' => $solution, 'labels' => ['right' => 'Ft'], 'hints' => $hints); } else { $solution = '$\\frac{1}{' . $correct[1] . '$'; return array('question' => $question, 'correct' => $correct, 'solution' => $solution, 'type' => 'fraction', 'hints' => $hints); } }
function Generate($level) { $type = rand(2, 5); // number of candle types $mult = rand(2, 4); // number of each type $candles = $type * $mult; // total number of candles $days = $type; // number of pulls $colors = ['piros', 'sárga', 'kék', 'zöld', 'lila']; shuffle($colors); // // Original exercise // $type = 3; // $mult = 2; // $colors = ['piros', 'lila', 'narancssárga']; // $candles = $type*$mult; // $days = $type; $question = 'Zsófi a gyertyák öntéséhez ' . NumText($type) . ' különböző fajta „varázskanócot” használ. Mindegyik fajta „varázskanóc” fehér színű, de meggyújtáskor (a benne lévő anyagtól függően) az egyik fajta ' . $colors[0] . ', a másik ' . $colors[1] . ($type >= 3 ? ', a harmadik ' . $colors[2] : '') . ($type >= 4 ? ', a negyedik ' . $colors[3] : '') . ($type >= 5 ? ', az ötödik ' . $colors[4] : '') . ' lánggal ég. Zsófi hétfőn egy dobozba tesz $' . $candles . '$ darab gyertyát, mind ' . The($type) . ' ' . NumText($type) . ' fajtából ' . NumText($mult) . '-' . NumText($mult) . ' darabot. Keddtől kezdve minden nap véletlenszerűen kivesz egy gyertyát a dobozból, és meggyújtja. Számítsa ki annak a valószínűségét, hogy Zsófi az első ' . NumText($days) . ' nap ' . NumText($days) . ' különböző színű lánggal égő gyertyát gyújt meg!'; $total_options = range($candles, $candles - $days + 1); $total = fact($candles, $candles - $days + 1); $choices = array_fill(0, $days, $mult); $good = fact($type) * pow($mult, $days); $page[] = '(Ha az azonos színű lánggal égőket megkülönböztetjük egymástól, akkor) Zsófi összesen $' . implode('\\cdot', $total_options) . '=' . round2($total) . '$-féleképpen választhatja ki az első ' . NumText($days) . ' gyertyát. Ez lesz az <span class="label label-info">összes</span> esetek száma.'; $page[] = 'A ' . NumText($type) . 'féle szín sorrendje $' . $type . '!=' . fact($type) . '$-féle lehet.'; $page[] = 'Egy adott színsorrend esetén $' . implode('\\cdot', $choices) . '=' . pow($mult, $days) . '$ választási lehetőség van.'; $page[] = 'Ezért a <span class="label label-info">kedvező</span> esetek száma $' . fact($type) . '\\cdot' . pow($mult, $days) . '=' . round2($good) . '$.'; $page[] = 'A keresett valószínűség a kedvező és összes esetek hányadosa, azaz <span class="label label-success">$\\frac{' . round2($good) . '}{' . round2($total) . '}$</span>.'; $hints[] = $page; $correct = [$good, $total]; $solution = '$\\frac{' . $good . '}{' . $total . '}$'; return array('question' => $question, 'correct' => $correct, 'solution' => $solution, 'hints' => $hints, 'type' => 'fraction'); }
function Generate($level) { $q_no = rand(4, 8); $opts_no = rand(2, 5); $ppl = rand(7, 13); $opts_text = range(chr(65), chr(65 + $opts_no - 1)); $max_points = $ppl * $q_no; $points = rand(1, floor($max_points / 5)) * 5; $rand = rand(1, 2); // // Original exercise // $q_no = 6; // $opts_no = 3; // $ppl = 10; // $points = 35; // $rand = 1; if ($rand == 1) { $type = 'jó'; $rate = $points / $max_points; $correct = round($points / $max_points * 360); } else { $type = 'rossz'; $rate = 1 - $points / $max_points; $correct = round((1 - $points / $max_points) * 360); } $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. 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. Ha az összes jó és az összes rossz válasz számából kördiagramot készítünk, mekkora körcikk szemlélteti a ' . $type . ' válaszok számát? <i>(Válaszát egész fokokra kerekítve adja meg!)</i>' . $this->PieChart(); $solution = '$' . $correct . '°$'; $page[] = 'Ha minden diák minden kérdésre jól válaszolt volna, összesen $' . $ppl . '\\cdot' . $q_no . '=' . $max_points . '$ pontot szerzett volna.'; $page[] = 'A ' . NumText($ppl) . ' diák összesen $' . $points . '$ pontot szerzett, ezért a jó válaszok száma $' . $points . '$, a rossz válaszok száma pedig $' . strval($max_points - $points) . '$.'; $page[] = 'A ' . $type . ' válaszok aránya: $$\\frac{' . ($type == 'jó' ? $points : $max_points - $points) . '}{' . $max_points . '}' . (round1($rate) == $rate ? '=' : '\\approx') . round2($rate) . '$$'; $page[] = 'Ezért a kördiagramon a ' . $type . ' válaszokhoz tartozó körcikk nagysága egész fokokra kerekítve $\\frac{' . ($type == 'jó' ? $points : $max_points - $points) . '}{' . $max_points . '}\\cdot360°' . ($rate * 360 == $correct ? '=' : '\\approx') . '$<span class="label label-success">$' . $correct . '$</span>$°$.' . $this->PieChart($correct); $hints[] = $page; return array('question' => $question, 'correct' => $correct, 'solution' => $solution, 'hints' => $hints, 'labels' => ['right' => '$°$']); }
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) { $q_no = rand(5, 7); $opts_no = rand(2, 4); // // Original exercise // $q_no = 6; // $opts_no = 3; $opts_text = range(chr(65), chr(65 + $opts_no - 1)); $prob = 1 - pow(($opts_no - 1) / $opts_no, $q_no); $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. Az egyik diák nem készült fel a tesztre, válaszait tippelve, véletlenszerűen adja meg. Mekkora valószínűséggel lesz legalább egy jó válasza a tesztben? <i>(Válaszát két tizedesjegyre kerekítve adja meg!)</i>'; $page[] = 'Annak a valószínűsége, hogy egy válasz hibás: $$\\frac{' . strval($opts_no - 1) . '}{' . $opts_no . '}$$'; $page[] = 'Annak a valószínűsége, hogy mind ' . The($q_no) . ' ' . NumText($q_no) . ' válasz hibás: $$\\left(\\frac{' . strval($opts_no - 1) . '}{' . $opts_no . '}\\right)^{' . $q_no . '}$$'; $page[] = 'Annak a valószínűsége, hogy legalább az egyik válasz jó: $$1-\\left(\\frac{' . strval($opts_no - 1) . '}{' . $opts_no . '}\\right)^{' . $q_no . '}\\approx' . round2($prob, 4) . '$$'; $page[] = 'Ennek a két tizedesjegyre kerekített értéke <span class="label label-success">$' . round2($prob) . '$</span>.'; $hints[] = $page; $correct = round1($prob, 2); $solution = '$' . round2($prob, 2) . '$'; return array('question' => $question, 'correct' => $correct, 'solution' => $solution, 'hints' => $hints); }
function Generate($level) { $A = rand(2, 3); $B = rand(2, 5); $C = 12 - $A - $B; // // Original exercise // $A = 5; // $B = 4; // $C = 3; $question = 'Az öttusa lovaglás számában egy akadálypályán tizenkét különböző akadályt kell a versenyzőnek átugratnia. Egy akadály a nehézsége alapján három csoportba sorolható: $A$, $B$ vagy $C$ típusú. Ádám a verseny előtti bemelegítéskor először ' . The($A) . ' ' . NumText($A) . ' darab $A$, majd ' . The($B) . ' ' . NumText($B) . ' darab $B$, végül ' . The($C) . ' ' . NumText($C) . ' darab $C$ típusú akadályon ugrat át, mindegyiken pontosan egyszer. Bemelegítéskor az egyes akadálytípusokon belül a sorrend szabadon megválasztható. Számítsa ki, hogy a bemelegítés során hányféle sorrendben ugrathatja át Ádám a tizenkét akadályt!'; $correct = fact($A) * fact($B) * fact($C); $solution = '$' . round2($correct, 0) . '$'; $type = 'int'; $page[] = 'Az $A$ típusú akadályok lehetséges sorrendjeinek a száma $' . $A . '!=' . fact($A) . '$.'; $page[] = 'A $B$ típusú akadályok lehetséges sorrendjeinek a száma $' . $B . '!=' . fact($B) . '$.'; $page[] = 'A $C$ típusú akadályok lehetséges sorrendjeinek a száma $' . $C . '!=' . fact($C) . '$.'; $page[] = 'A $12$ akadály lehetséges sorrendjeinek a száma ezek szorzata.'; $page[] = 'Tehát Ádám összesen $' . fact($A) . '\\cdot' . fact($B) . '\\cdot' . fact($C) . '=$<span class="label label-success">$' . round2($correct, 0) . '$</span> különböző sorrendben ugrathatja át a tizenkét akadályt.'; $hints[] = $page; return array('question' => $question, 'correct' => $correct, 'solution' => $solution, 'type' => $type, 'hints' => $hints); }
function Generate($level) { if ($level <= 3) { $size = rand(4, 5); } elseif ($level <= 6) { $size = rand(5, 6); } else { $size = rand(7, 8); } // // Original exercise // $size = 6; list($graph, $degrees) = $this->Degrees($size); $degrees_known = $degrees; unset($degrees_known[$size - 1]); rsort($degrees_known); $question = 'Egy ' . NumText($size) . 'fős társaságban mindenkit megkérdeztek, hány ismerőse van a többiek között (az ismeretségek kölcsönösek). Az első ' . NumText($size - 1) . ' megkérdezett személy válasza: $' . implode(',', $degrees_known) . '$. Hány ismerőse van ' . The($size) . ' ' . OrderText($size) . ' személynek a társaságban?'; $hints = $this->Hints($graph, $degrees); $correct = $degrees[$size - 1]; $solution = '$' . $correct . '$'; return array('question' => $question, 'correct' => $correct, 'solution' => $solution, 'hints' => $hints); }
function Hints($start, $increase, $years, $percent) { $months = $years * 12; $sum1 = (2 * $start + ($months - 1) * $increase) / 2 * $months; $page[] = 'Az I. ajánlatban Péter havi fizetései egy $' . round2($increase, 0) . '$ differenciájú számtani sorozat egymást követő tagjai, ahol a sorozat első tagja $' . round2($start, 0) . '$.'; $page[] = 'Péter ' . NumText($years) . ' év alatt összesen $' . $years . '\\cdot12=' . $months . '$ fizetést kap.'; $page[] = 'Ez azt jelenti, hogy a számtani sorozat első $' . $months . '$ tagjának összegét kell kiszámolni.'; $page[] = '$$S_{' . $months . '}=\\frac{2\\cdot' . round2($start, 0) . '+' . strval($months - 1) . '\\cdot' . round2($increase, 0) . '}{2}\\cdot' . $months . '=' . round2($sum1, 0) . '\\,\\text{Ft}$$'; $page[] = 'Tehát ha Péter az I. ajánlatot választja, összesen $' . round2($sum1, 0) . '\\,\\text{Ft}$-ot kap.'; $hints[] = $page; $page = []; $ratio = 1 + $percent / 100; $sum2 = round1($start * (pow($ratio, $months) - 1) / ($ratio - 1)); $page[] = 'Az II. ajánlatban Péter havi fizetései egy $' . round2($ratio, 2) . '$ hányadosú mértani sorozat egymást követő tagjai, ahol a sorozat első tagja $' . round2($start, 0) . '$.'; $page[] = 'Az összjövedelem kiszámításához itt is a sorozat első $' . $months . '$ tagjának összegét kell meghatározni.'; $page[] = '$$S_{' . $months . '}\'=' . round2($start, 0) . '\\cdot\\frac{' . round2($ratio, 2) . '^{' . $months . '}-1}{' . round2($ratio, 2) . '-1}\\approx' . round2($sum2, 0) . '\\,\\text{Ft}$$'; $page[] = 'Tehát ha Péter a II. ajánlatot választja, összesen $' . round2($sum2, 0) . '\\,\\text{Ft}$-ot kap.'; $page[] = 'Mivel $' . round2($sum1, 0) . ($sum1 > $sum2 ? '>' : '<') . round2($sum2, 0) . '$, ezért Péternek ' . ($sum1 > $sum2 ? 'az' : 'a') . ' <span class="label label-success">' . ($sum1 > $sum2 ? 'I.' : 'II.') . ' ajánlatot</span> célszerű választani.'; $correct = $sum1 > $sum2 ? 0 : 1; $hints[] = $page; return array($hints, $correct); }
function Generate($level) { $names_all = ['András', 'Béla', 'Csilla', 'János', 'Gergő', 'Nóra']; shuffle($names_all); $names = array_slice($names_all, 0, 3); $abc = rand(0, 3); $ab = rand(0, 3); $bc = rand(0, 3); $ca = rand(0, 3); $single = rand(0, 3); // // Original exercise // $names = ['Éva', 'János', 'Nóra']; // $abc = 1; // $ab = 2; // $bc = 1; // $ca = 0; // $single = 2; $question = $names[0] . ', ' . $names[1] . ' és ' . $names[2] . ' tesztet írnak. A teszt értékelésekor minden helyes válaszra $1$ pont, helytelen válaszra pedig $0$ pont jár. ' . ($abc == 0 ? 'Egyetlen kérdése sem volt,' : NumText($abc, TRUE) . ' olyan kérdés volt,') . ' amelyre mindhárman jól válaszoltak. ' . ($abc + $ab == 0 ? 'Egy kérdés sem volt,' : NumText($abc + $ab, TRUE) . ' olyan kérdés volt,') . ' amit ' . $names[0] . ' és ' . $names[1] . ' is jól válaszolt meg, ' . ($abc + $bc == 0 ? 'egy kérdés sem volt,' : NumText($abc + $bc) . ' olyan kérdés volt,') . ' amit ' . $names[1] . ' és ' . $names[2] . ' is, és ' . ($abc + $ca == 0 ? 'egy sem,' : NumText($abc + $ca) . ' olyan,') . ' amire ' . $names[2] . ' és ' . $names[0] . ' is jó választ adott. ' . ($single == 2 ? 'Két' : NumText($single, TRUE)) . ' olyan kérdés volt, amelyet csak egyvalaki oldott meg helyesen hármuk közül. ' . 'Hány pontot szereztek ők hárman összesen ezen a teszten?'; $correct = 3 * $abc + 2 * ($ab + $bc + $ca) + $single; $hints = $this->Hints($names, $abc, $ab, $bc, $ca, $single, $correct); $solution = '$' . $correct . '$'; return array('question' => $question, 'correct' => $correct, 'solution' => $solution, 'hints' => $hints); }
function Generate($level) { if ($level <= 3) { $male = rand(2, 3); $female = $male + rand(1, 2); } elseif ($level <= 6) { $male = rand(3, 4); $female = $male + rand(2, 3); } else { $male = rand(4, 5); $female = $male + rand(3, 4); } // // Original exercise // $male = 4; // $female = 5; $total = $male + $female; $min = $male - 1; $question = 'Egy állatkert a tigrisek fennmaradása érdekében tenyésztő programba kezd. Beszereznek $' . $male . '$ hím és $' . $female . '$ nőstény kölyöktigrist, melyeket egy kisebb és egy nagyobb kifutóban kívánnak elhelyezni a következő szabályok mindegyikének betartásával: <ol type="I"> <li>' . NumText($min) . By($min) . ' kevesebb tigris egyik kifutóban sem lehet;</li> <li>a nagyobb kifutóba több tigris kerül, mint a kisebbikbe;</li> <li>mindkét kifutóban hím és nőstény tigrist is el kell helyezni;</li> <li>egyik kifutóban sem lehet több hím, mint nőstény tigris.</li> </ol> Hányféleképpen helyezhetik el a $' . $total . '$ tigrist a két kifutóban?<br />(A tigriseket megkülönböztetjük egymástól, és két elhelyezést eltérőnek tekintünk, ha van olyan tigris, amelyik az egyik elhelyezésben más kifutóban van, mint a másik elhelyezésben.)'; for ($i = $min; $i <= $total; $i++) { if ($i == $min) { $page[] = 'Válogassuk szét az eseteket aszerint, hogy a kisebbik kifutóban hány tigris van!'; } else { $page = []; } $page[] = '<b>' . strval($i - $min + 1) . '. eset:</b> a kisebbik kifutóban $' . $i . '$ tigris van, a nagyobbikban pedig $' . strval($total - $i) . '$.' . ($i == $min ? ' (Ennél kevesebb az I) feltétel miatt sehol sem lehet.)' : ''); if ($i >= $total - $i) { $page[] = 'Ez az eset azért <span class="label label-danger">nem jó</span>, mert a II) feltétel szerint a kisebb kifutóban kevesebb tigrisnek kell lennie, mint a nagyobbikban. (És itt meg is állhatunk, mert ha tovább növeljük a tigrisek számát, ez a feltétel úgy sem fog teljesülni.)'; $hints[] = $page; break; } $page[] = 'Most válogassuk szét az eseteket aszerint, hogy ' . The($i) . ' $' . $i . '$ tigris közül hány nőstény!'; for ($j = 0; $j <= $i; $j++) { $text = '<ul><li><i>' . strtoupper(The($i)) . ' $' . $i . '$ tigris közül $' . $j . '$ hím és $' . strval($i - $j) . '$ nőstény.</i><br />'; if ($i == 0 || $j == 0) { $text .= 'Ez az eset azért <span class="label label-danger">nem jó</span>, mert a III) feltétel miatt nősténynek és hímnek is kell lennie a kifutóban.'; } elseif ($j > $i - $j) { $text .= 'Ez az eset azért <span class="label label-danger">nem jó</span>, mert a IV) feltétel miatt nem lehet a kifutóban több hím, mint nőstény.'; } elseif ($male - $j > $female - $i + $j) { $text .= 'Ez az eset azért <span class="label label-danger">nem jó</span>, mert ha ez azt jelentené, hogy a másik kifutóban $' . strval($male - $j) . '$ hím és $' . strval($female - $i + $j) . '$ nőstény van, viszont a IV) feltétel miatt nem lehet a kifutóban több hím, mint nőstény.'; } else { $female_opt = binomial_coeff($female, $i - $j); $male_opt = binomial_coeff($male, $j); $answers[] = $female_opt * $male_opt; $text .= 'Ez az eset <span class="label label-success">jó</span>, mert minden feltételnek megfelel. <ul> <li>$' . $male . '$ hím közül $' . $j . '$-' . Dativ($j) . ' összesen ${' . $male . '\\choose ' . $j . '}=' . $male_opt . '$-féleképpen lehet kiválasztani;</li> <li>$' . $female . '$ nőstény közül $' . strval($i - $j) . '$-' . Dativ($i - $j) . ' összesen ${' . $female . '\\choose ' . strval($i - $j) . '}=' . $female_opt . '$-féleképpen lehet kiválasztani;</li> <li>Ha már tudjuk, hogy a kisebbik kifutóban melyik tigrisek vannak, akkor már azt is tudjuk, hogy a nagyobbikban melyikek vannak, tehát ezt nem kell külön kiszámolni.</li> <li>Ebben az esetben összesen $' . $male_opt . '\\cdot' . $female_opt . '=$<span class="label label-info">$' . strval($female_opt * $male_opt) . '$</span> különböző lehetőség.</li> </ul>'; } $text .= '</li></ul>'; $page[] = $text; } $hints[] = $page; } $page = []; $page[] = 'Tehát összesen $' . implode('+', $answers) . '=$<span class="label label-success">$' . array_sum($answers) . '$</span>-féleképpen lehet elhelyezni a tigriseket a két kifutóban.'; $hints[] = $page; $correct = array_sum($answers); $solution = '$' . $correct . '$'; return array('question' => $question, 'correct' => $correct, 'solution' => $solution, 'hints' => $hints); }