Тестовые задания PHP
 
ВВЕДЕНИЕ
Три реальных тестовых задания на PHP, хочу поделиться своими решениями
 

Найдите сумму простых чисел в массиве

 

Задание 1:

Дан массив [[399, 9160, 144, 3230, 407, 8875, 1597, 9835], [2093, 3279, 21, 9038, 918, 9238, 2592, 7467], [3531, 1597, 3225, 153, 9970, 2937, 8, 807], [7010, 662, 6005, 4181, 3, 4606, 5, 3980], [6367, 2098, 89, 13, 337, 9196, 9950, 5424], [7204, 9393, 7149, 8, 89, 6765, 8579, 55], [1597, 4360, 8625, 34, 4409, 8034, 2584, 2], [920, 3172, 2400, 2326, 3413, 4756, 6453, 8], [4914, 21, 4923, 4012, 7960, 2254, 4448, 1]]. Среди его ячеек некоторые числа являются простыми числами. Найдите сумму простых чисел в этом массиве.

 

Решение:

<?php
//исходный массив
$arr = array([[399, 9160, 144, 3230, 407, 8875, 1597, 9835], 
[2093, 3279, 21, 9038, 918, 9238, 2592, 7467], 
[3531, 1597, 3225, 153, 9970, 2937, 8, 807], 
[7010, 662, 6005, 4181, 3, 4606, 5, 3980], 
[6367, 2098, 89, 13, 337, 9196, 9950, 5424], 
[7204, 9393, 7149, 8, 89, 6765, 8579, 55], 
[1597, 4360, 8625, 34, 4409, 8034, 2584, 2], 
[920, 3172, 2400, 2326, 3413, 4756, 6453, 8], 
[4914, 21, 4923, 4012, 7960, 2254, 4448, 1]]);

//инициализируем переменную общей суммы
$full=0;

//функция проверки является ли число простым

	function numSimple($num){
		if ($num == 1){
			return 0;
		}
		for ($i = 2; $i <= sqrt($num); $i++){
			if ($num % $i == 0){
				return 0;
			}
		}
		return 1;
	}

//объединяем массив
    $iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($arr));
    $arrsum = iterator_to_array($iterator, false);


//находим простые числа и прибавляем их к переменной $full
	foreach($arrsum as $item){
		$num=$item;
		$ans=numSimple($num);
		if($ans==1){
			$full=$full+$num;
		}
	}
//выводим сумму
	echo $full;
?> 

 

 

Быки и коровы

 

Задание 2:

Задание на базе игры "Быки и коровы". Суть игры состоит в том, что ведущий загадывает четырехзначное число, а игрок пытается его угадать. Игрок на каждом ходу сообщает ведущему свое предположение (четырехзначное число, тот в свою очередь отвечает ему: "ты угадал столько-то букв, из них столько-то на своем месте").

Например: если ведущий загадал число 3810, а игрок предположил "0856", то ведущий должен ответить "угадал 2 цифры, из них на своем месте 1 цифра". Итак задание: ваша программа является ведущим в этой игры. Загадано число "3810". Программа должна последовательно вывести ответы на следующие числа: 2679, 1234, 5678, 0183, 3801, 3810. Каждый ответ должен быть на новой строке и должен быть записан в формате "x-x", где первое число это количество совпавших цифр, а второе — кол-во совпавших цифр, находящихся на своей позиции.

 

Решение:

<?php
//входное число, преобразуем в строку
$ved=3810;
$ved=(string)$ved;

//массив с числами, сразу записали числа как строки
$arr = array('2679', '1234', '5678', '0183', '3801', '3810');

//перебираем массив в переменную $item
foreach($arr as $item){
	$var=$item;
	
	//преобразуем строки в массивы
	$arr1 = str_split($ved);
	$arr2 = str_split($var);
	
	//находим схождения массивов, подсчитываем количество
	$diff = array_intersect($arr1, $arr2); 
	$sum1=count($diff);
	
	//то же самое но с проверкой индексов
	$result_array = array_intersect_assoc($arr1, $arr2);
	$sum2=count($result_array);
	
	//выводим результат построчно
        // так как я - выводить не нужно)))

	echo '<pre>';
		print_r($sum1 . ' - ' . $sum2);
	echo '</pre>';
}

?> 

 

 

Сумма оставшихся чисел

 

Задание 3:

Возьмите все числа от 1 до 1000 (включительно). Выбросьте из этой последовательности все числа, где одна и та же цифра встречается более, чем 1 раз. Найдите сумму оставшихся чисел.

 

Решение:

<?php
	$arr=[];
	$arr2=[];

	for ($i = 1; $i <= 1000; $i++) {
		array_push($arr, $i);
	}

	for ($i = 0; $i <= 10; $i++) {
		array_push($arr2, $i);
	}
	
	foreach($arr as $item){
		foreach($arr2 as $key){
			if(substr_count($item, $key)>1){
				$key_bad = array_search($item, $arr);
					unset($arr[$key_bad]);
			}
		}	
	}

	$summ=0;

	foreach($arr as $value){
		$summ=$summ+$value;
	}

	echo $summ;

?> 

 

Примечание 1: сами по себе решения - стопроцентно верные, вопросы могут быть только к качеству кода, поэтому если у кого будут замечания/пожелания - пишите, буду исправлять

Примечание 2: все три задания - реальные тестовые задания на позицию junior PHP

Примечание 3: все примечания - пронумерованы

 

 

 


 

Напоминаю, что вопросы можно задать в группе https://t.me/newqosgroup