ВВЕДЕНИЕ
Три реальных тестовых задания на 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