Занимательные задачи PHP
353 subscribers
1 photo
15 links
Ваша цель: решить задачу максимально изящно и просто. Предлагайте свои варианты решения в комментариях. Задачи выходят по будням в 14.00.
Download Telegram
Задача 194
Текст по файлам

Дан файл с текстом. Напишите код, который разложит части этого текста по файлам. Положите первые 10 строк текста в файл 1.txt, вторые 10 строк в файл 2.txt и так далее.
Задача 195
Сумма чисел из файла

Дан файл с текстом. В этом тексте встречаются числа. Найдите эти числа и запишите их в новый файл, каждое число на своей строке.
Задача 196
Емейлы из файла

Дан файл с текстом. В этом тексте встречаются емейлы. Найдите эти емейлы и запишите их в новый файл, каждый емейл на своей строке.
Задача 197
Перестановка рядов матрицы

Дан произвольный двухмерный массив: [ [11, 12, 13, 14, 15], [21, 22, 23, 24, 25], [31, 32, 33, 34, 35], [41, 42, 43, 44, 45], [51, 52, 53, 54, 55], ]

Переставьте местами два заданных ряда:
[
[51, 52, 53, 54, 55],
[21, 22, 23, 24, 25],
[31, 32, 33, 34, 35],
[41, 42, 43, 44, 45],
[11, 12, 13, 14, 15],
]
Задача 198
Перестановка столбцов матрицы

Дан произвольный двухмерный массив: [ [11, 12, 13, 14, 15], [21, 22, 23, 24, 25], [31, 32, 33, 34, 35], [41, 42, 43, 44, 45], [51, 52, 53, 54, 55], ]

Переставьте местами два заданных столбца:
[
[11, 15, 13, 14, 12],
[21, 25, 23, 24, 22],
[31, 35, 33, 34, 32],
[41, 45, 43, 44, 42],
[51, 55, 53, 54, 52],
]
Задача 199
Перестановка элементов

Дан произвольный двухмерный массив: [ [11, 32, 13, 44, 55], [31, 42, 53, 66, 75], [12, 26, 33, 45, 52], [15, 22, 35, 64, 57], [21, 52, 32, 44, 38], ]

Найдите максимальный и минимальный элементы и поменяйте их местами.
Задача 200
Сборка счастливого билета

Дан массив из шести цифр. Проверьте, можно ли собрать из этих цифр счастливый билет.
🔥1
Задача 201
Добавление ряда и колонки в матрицу

Дан произвольный двухмерный массив: [ [11, 12, 13], [21, 22, 23], [31, 32, 33], ]

Напишите код, который добавит в него еще один ряд и еще один столбец, заполненные случайными значениями:
[
[11, 12, 13, 14],
[21, 22, 23, 24],
[31, 32, 33, 34],
[41, 42, 43, 44],
]
Задача 202
Обнуление столбца

Дан произвольный двухмерный массив: [ [11, 12, 13, 14, 15], [21, 22, 23, 24, 25], [31, 32, 33, 34, 35], [41, 42, 43, 44, 45], [51, 52, 53, 54, 55], ]

Напишите код, который будет обнулять заданный столбец:
[
[11, 12, 0, 14, 15],
[21, 22, 0, 24, 25],
[31, 32, 0, 34, 35],
[41, 42, 0, 44, 45],
[51, 52, 0, 54, 55],
]
Задача 203
Столбец матрицы

Дан произвольный двухмерный массив: [ [11, 12, 13, 14, 15], [21, 22, 23, 24, 25], [31, 32, 33, 34, 35], [41, 42, 43, 44, 45], [51, 52, 53, 54, 55], ]

Напишите код, который получит массив значений заданного столбца:
[
13, 23, 33, 43, 54
]
👻1
Задача 204
Получение заданного элемента

Дан многомерный массив произвольного уровня вложенности: [ 'a' => [ 'b' => [ 'c' => '+++' ] ], ]

Сделайте функцию, которая будет возвращать элементы массива, параметром получая строку с ключами массива, разделенными точками:
func('a.b.c'); // вернет '+++'
Задача 205
Транспонирование матрицы

Дан произвольный двухмерный массив: [ [11, 12, 13, 14, 15], [21, 22, 23, 24, 25], [31, 32, 33, 34, 35], [41, 42, 43, 44, 45], [51, 52, 53, 54, 55], ]

Выполните его транспонирование:
[
[11, 21, 31, 41, 51],
[12, 22, 32, 42, 52],
[13, 23, 33, 43, 53],
[14, 24, 34, 44, 54],
[15, 25, 35, 45, 55],
]
Задача 206
Конверсия времени

Дана переменная, содержащая некоторое количество секунд. Получите сколько дней, часов, минут и секунд содержится в этой переменной. Имеется ввиду, что сначала нужно выделить целое количество дней, из остатка выделить целое количество часов, из остатка выделить целое минут, а затем останется количество секунд. Результат представьте в виде ассоциативного массива.
Задача 207
Сжатие смежных чисел

Дан массив чисел. Замените все последовательности смежных одинаковых чисел на их количество и значение.

Пример:
[1, 1, 1, 2, 3, 3, 4, 4, 4, 4] → [[3, 1], [1, 2], [2, 3], [4, 4]]
Задача 208
Валидация математического выражения

Дана строка с математическим выражением, содержащим числа, операторы +-*/ и скобки. Проверьте корректность расстановки операторов: - два оператора не могут стоять подряд - после открывающей скобки не может быть оператора (кроме унарного минуса) - перед закрывающей скобкой не может быть оператора - выражение должно начинаться и заканчиваться числом или скобкой

Пример:
"2*(3+4)-5/2" → true
"2*+3" → false
Задача 209
Генерация всех подмассивов с условием

Дан массив чисел. Сгенерируйте все возможные подмассивы, сумма элементов которых не превышает заданное число N. Выведите их в порядке увеличения длины.

Пример:
массив: [1, 2, 3], N: 4
результат: [[1], [2], [3], [1,2], [1,3]]
(подмассив [2,3] не выводится, так как сумма 5 > 4)
Задача 210
Проверка периодичности последовательности

Дана последовательность чисел. Определите, является ли она периодической (повторяется ли некий паттерн целиком от начала до конца последовательности). Если да, найдите длину наименьшего периода.

Примеры:
[1, 2, 1, 2, 1, 2] → true, период 2 (паттерн [1, 2])
[1, 2, 3, 1, 2, 3, 1] → true, период 3 (паттерн [1, 2, 3])
[1, 2, 3, 1, 2, 4] → false (нет полного повторения паттерна)
Задача 211
Определение типа последовательности

Дан массив чисел. Определите, является ли последовательность: 1) Арифметической прогрессией (постоянная разность между элементами) 2) Геометрической прогрессией (постоянное отношение между элементами) 3) Ни тем, ни другим

Верните строку: "арифметическая", "геометрическая" или "нет прогрессии".

Примеры:
[1, 3, 5, 7, 9] → "арифметическая" (разность 2)
[2, 4, 8, 16, 32] → "геометрическая" (отношение 2)
[1, 2, 3, 5, 8] → "нет прогрессии"
[5, 5, 5, 5, 5] → "арифметическая" (разность 0) и "геометрическая" (отношение 1)

Примечание: если массив подходит под оба типа, верните "арифметическая"
(приоритет у арифметической прогрессии).
Задача 212
Перестановка максимального и минимального элементов

Дан массив чисел. Найдите в массиве максимальный и минимальный элементы и поменяйте их местами. Если максимальных или минимальных элементов несколько, поменяйте местами первые из найденных.

Примеры:
[3, 7, 2, 8, 5] → [3, 7, 8, 2, 5] (2 и 8 поменялись)
[1, 1, 4, 4, 2] → [4, 1, 4, 1, 2] (первая 1 и первая 4 поменялись)
[5, 5, 5, 5] → [5, 5, 5, 5] (массив не изменился)
Задача 213
Сумма цифр числа до однозначного

Дано целое положительное число. Найдите сумму его цифр. Если полученная сумма больше 9, повторяйте процесс, пока не получите однозначное число (цифру от 1 до 9).

Примеры:
123 → 1+2+3 = 6 → 6
987 → 9+8+7 = 24 → 2+4 = 6 → 6
999 → 9+9+9 = 27 → 2+7 = 9 → 9
38 → 3+8 = 11 → 1+1 = 2 → 2

Этот процесс иногда называют "цифровым корнем" числа.
Задача 214
Чередование четных и нечетных

Дан массив чисел. Проверьте, чередуются ли в нем четные и нечетные числа. Массив считается "чередующимся", если каждый следующий элемент имеет противоположную четность предыдущему.

Примеры:
[1, 2, 3, 4, 5] → true (нечетное, четное, нечетное, четное, нечетное)
[2, 4, 6, 8] → false (все четные)
[1, 3, 2, 4, 7] → false (1→3: оба нечетные)
[10, 5, 8, 3, 2] → true (четное, нечетное, четное, нечетное, четное)
[] → true (пустой массив считается чередующимся)
[7] → true (один элемент всегда чередуется)