3v4l.org

run code in 300+ PHP versions simultaneously
<?php abstract class Question { public $text; // текст вопроса public $points = 5; // число баллов, по умолчанию 5 public $hint; // подсказка } class ChoiceQuestion extends Question { public $options; // варианты ответа public $correctOption; // правильный вариант public function checkAnswers($questions, $answers) { // Проверим, что число ответов равно числу вопросов (защищаемся от ошибки) if (count($questions) != count($answers)) { die("Число ответов и вопросов не совпадает\n"); } $pointsTotal = 0; // сколько набрано баллов // сколько можно набрать баллов при всех правильных ответах $pointsMax = 0; // сколько отвечено верно $correctAnswers = 0; $totalQuestions = count($questions); // Сколько всего вопросов // Цикл для обхода вопросов и ответов for ($i = 0; $i < count($questions); $i++) { $question = $questions[$i]; // Текущий вопрос $answer = $answers[$i]; // текущий ответ // Считаем максимальную сумму баллов $pointsMax += $question->points; // Проверяем ответ if ($answer == $question->correctOption) { // Добавляем баллы $correctAnswers ++; $pointsTotal += $question->points; } else { // Неправильный ответ $number = $i + 1; echo "Неправильный ответ на вопрос №{$number} ({$question->text})\n"; echo "Подсказка: {$question->hint}\n"; } } // Выведем итог echo "Правильных ответов: {$correctAnswers} из {$totalQuestions}, баллов набрано: {$pointsTotal} из {$pointsMax}\n"; } } class NumericQuestion extends Question { public $correctAnswer; // правильный ответ //public $deviation; // допустимая погрешность public function checkAnswers($questions, $answers) { // Проверим, что число ответов равно числу вопросов (защищаемся от ошибки) if (count($questions) != count($answers)) { die("Число ответов и вопросов не совпадает\n"); } $pointsTotal = 0; // сколько набрано баллов // сколько можно набрать баллов при всех правильных ответах $pointsMax = 0; // сколько отвечено верно $correctAnswers = 0; $totalQuestions = count($questions); // Сколько всего вопросов // Цикл для обхода вопросов и ответов for ($i = 0; $i < count($questions); $i++) { $question = $questions[$i]; // Текущий вопрос $answer = $answers[$i]; // текущий ответ // Считаем максимальную сумму баллов $pointsMax += $question->points; // Проверяем ответ if ($answer == $question->correctAnswer) { // Добавляем баллы $correctAnswers ++; $pointsTotal += $question->points; } else { // Неправильный ответ $number = $i + 1; echo "Неправильный ответ на вопрос №{$number} ({$question->text})\n"; echo "Подсказка: {$question->hint}\n"; } } // Выведем итог echo "Правильных ответов: {$correctAnswers} из {$totalQuestions}, баллов набрано: {$pointsTotal} из {$pointsMax}\n"; } } // Функция, создающая массив с вопросами: function createQuestions() { // Создаем пустой массив $questions = []; // Вопрос 1 $q1 = new ChoiceQuestion; $q1->text = "Какая планета располагается четвертой по счету от Солнца?"; $q1->points = 10; // 10 баллов за ответ $q1->options = array('a' => 'Венера', 'b' => 'Марс', 'c' => 'Юпитер', 'd' => 'Меркурий'); // Варианты ответа $q1->correctOption = 'b'; // Правильный ответ $q1->hint = 'Сникерс'; // Подсказка $questions[] = $q1; // Вопрос 2 $q2 = new ChoiceQuestion; $q2->text = 'Какой город является столицей Великобритании?'; $q2->points = 5; $q2->options = array('a' => 'Париж', 'b' => 'Москва', 'c' => 'Нью-Йорк', 'd' => 'Лондон'); $q2->correctOption = 'd'; $q2->hint = 'London is the capital of Great Britain'; // Подсказка $questions[] = $q2; // Вопрос 3 $q3 = new ChoiceQuestion; $q3->text = 'Кто придумал теорию относительности?'; $q3->points = 30; $q3->options = array('a' => 'Джон Леннон', 'b' => 'Джим Моррисон', 'c' => 'Альберт Эйнштейн', 'd' => 'Исаак Ньютон'); $q3->correctOption = 'c'; $q3->hint = 'Какой-то еврей... Подождите... Ох, нет...'; // Подсказка $questions[] = $q3; // Вопрос 4 - с выбором цифры $q4 = new NumericQuestion; $q4->text = 'Напишите число Пи до тысячных или хотя бы сотых.'; $q4->points = 30; $q4->correctAnswer = 3.14; $q4->hint = 'Это 3,14здец какой-то...'; // Подсказка $questions[] = $q4; return $questions; } function printQuestions($questions) { $number = 1; // номер вопроса foreach ($questions as $question) { echo "\n{$number}. {$question->text}\n\n"; if (isset($question->options)) { echo "Варианты ответов:\n"; foreach ($question->options as $letter => $answer) { echo " {$letter}. {$answer}\n"; } } $number++; } } $questions = createQuestions(); $answers = array('b', 'd', 'a', 1); printQuestions($questions); $questions[0]->checkAnswers($questions, $answers);

Here you find the average performance (time & memory) of each version. A grayed out version indicates it didn't complete successfully (based on exit-code).

VersionSystem time (s)User time (s)Memory (MiB)
8.3.60.0140.00416.75
8.3.50.0100.00718.05
8.3.40.0110.00718.76
8.3.30.0040.01118.87
8.3.20.0000.00721.98
8.3.10.0040.00420.55
8.3.00.0040.00423.51
8.2.180.0110.00725.92
8.2.170.0120.00322.96
8.2.160.0070.00722.21
8.2.150.0080.00024.18
8.2.140.0000.00824.66
8.2.130.0000.00820.47
8.2.120.0040.00426.35
8.2.110.0050.00519.27
8.2.100.0100.00317.97
8.2.90.0040.00419.30
8.2.80.0030.00517.97
8.2.70.0040.00417.63
8.2.60.0040.00418.04
8.2.50.0000.00819.25
8.2.40.0030.00620.64
8.2.30.0000.01020.54
8.2.20.0000.00718.08
8.2.10.0030.00618.03
8.2.00.0040.00418.34
8.1.280.0120.00325.92
8.1.270.0000.00823.80
8.1.260.0040.00426.35
8.1.250.0040.00428.09
8.1.240.0100.00322.02
8.1.230.0040.00820.86
8.1.220.0000.00817.74
8.1.210.0030.00518.77
8.1.200.0030.00617.35
8.1.190.0030.00617.38
8.1.180.0030.00518.10
8.1.170.0030.00518.59
8.1.160.0070.00018.94
8.1.150.0040.00420.25
8.1.140.0040.00719.54
8.1.130.0000.00819.01
8.1.120.0000.00717.52
8.1.110.0040.00417.33
8.1.100.0040.00417.56
8.1.90.0030.00617.40
8.1.80.0040.00417.39
8.1.70.0000.00717.51
8.1.60.0000.00817.65
8.1.50.0000.00817.60
8.1.40.0030.00617.57
8.1.30.0080.00017.66
8.1.20.0000.00717.71
8.1.10.0040.00417.55
8.1.00.0060.00317.57
8.0.300.0050.00318.77
8.0.290.0040.00416.88
8.0.280.0030.00418.37
8.0.270.0040.00417.29
8.0.260.0040.00417.18
8.0.250.0030.00317.10
8.0.240.0000.00917.11
8.0.230.0000.00717.05
8.0.220.0040.00416.90
8.0.210.0030.00317.10
8.0.200.0000.00717.02
8.0.190.0080.00016.94
8.0.180.0040.00417.03
8.0.170.0000.00717.05
8.0.160.0000.00816.97
8.0.150.0080.00017.01
8.0.140.0080.00016.90
8.0.130.0030.00313.41
8.0.120.0070.00016.95
8.0.110.0040.00416.80
8.0.100.0050.00217.01
8.0.90.0030.00516.96
8.0.80.0130.00317.02
8.0.70.0070.00016.89
8.0.60.0040.00416.92
8.0.50.0040.00416.79
8.0.30.0110.00817.09
8.0.20.0090.01317.40
8.0.10.0040.00417.18
8.0.00.0160.00816.89
7.4.330.0060.00215.55
7.4.320.0040.00416.60
7.4.300.0060.00016.54
7.4.290.0000.00716.55
7.4.280.0000.00916.63
7.4.270.0040.00416.56
7.4.260.0050.00216.54
7.4.250.0080.00016.60
7.4.240.0040.00416.63
7.4.230.0000.00816.47
7.4.220.0120.00716.48
7.4.210.0060.01016.51
7.4.200.0070.00016.75
7.4.160.0070.00916.55
7.4.150.0060.01217.40
7.4.140.0110.00917.86
7.4.130.0190.00416.60
7.4.120.0070.01416.61
7.4.110.0070.01416.57
7.4.100.0180.00716.61
7.4.90.0140.00616.63
7.4.80.0090.01319.39
7.4.70.0060.01316.74
7.4.60.0070.01116.47
7.4.50.0000.01216.58
7.4.40.0040.01216.57
7.4.30.0090.01016.53
7.4.00.0070.00714.97
7.3.330.0040.00513.30
7.3.320.0000.00513.29
7.3.310.0030.00616.34
7.3.300.0000.00816.38
7.3.290.0120.00316.52
7.3.280.0100.01016.44
7.3.270.0120.00617.40
7.3.260.0110.00616.50
7.3.250.0090.00916.47
7.3.240.0140.00616.58
7.3.230.0110.01316.47
7.3.210.0070.01016.51
7.3.200.0060.01216.64
7.3.190.0130.00316.67
7.3.180.0090.00916.58
7.3.170.0100.00716.41
7.3.160.0190.00416.56
7.3.10.0040.01116.30
7.3.00.0210.00016.20
7.2.330.0100.01016.67
7.2.320.0080.00816.91
7.2.310.0140.00416.57
7.2.300.0060.01316.86
7.2.290.0090.00916.86
7.2.130.0130.00316.34
7.2.120.0150.00816.71
7.2.110.0140.01016.46
7.2.100.0130.00716.39
7.2.90.0190.01016.81
7.2.80.0150.00616.77
7.2.70.0120.01516.33
7.2.60.0110.00816.86
7.2.50.0210.00616.45
7.2.40.0190.00316.41
7.2.30.0150.01116.87
7.2.20.0210.00316.53
7.2.10.0220.00416.66
7.2.00.0160.00616.83
7.1.250.0070.00415.51
7.1.200.0140.00015.72
7.1.70.0060.00317.03
7.1.60.0000.01417.35
7.1.20.0300.09040.48
7.1.10.0070.09022.17
7.1.00.0030.07022.38
7.0.200.0000.01616.83
7.0.160.0100.06721.91
7.0.150.0100.07321.91
7.0.140.0030.06721.90
7.0.130.0070.06721.77
7.0.120.0200.05321.84
7.0.110.0070.06321.74
7.0.100.0100.07021.93
7.0.90.0200.07021.88
7.0.80.0200.07021.93
7.0.70.0130.07721.95
7.0.60.0100.08021.83
7.0.50.0130.05321.91
7.0.40.0230.08021.84
7.0.30.0100.08021.80
7.0.20.0100.06021.79
7.0.10.0130.05721.96
7.0.00.0030.06721.98

preferences:
59.7 ms | 400 KiB | 5 Q