Пример #1
20
 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);
 }
Пример #2
19
 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);
 }
Пример #3
17
 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);
     }
 }
Пример #4
14
 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');
 }
Пример #5
0
 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' => '$°$']);
 }
Пример #6
0
 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);
 }
Пример #7
0
 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);
 }
Пример #8
0
 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);
 }
Пример #9
0
 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);
 }
Пример #10
0
 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);
 }
Пример #11
0
 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);
 }
Пример #12
0
    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);
    }