#097 10-06-24 Php Игорь Домашние задания

Домашнее задание 18.11

  1. SQL сайт1 и сайт2 – посмотреть
  2. Прочитать документацию по sanctum (любая версия laravel)
  3. Прочитать статью по sanctum – пример проекта
  4. Сделать регистрацию, логин, логаут и роут /user/rand – если пользователь авторизован, то вернуть его данные, иначе вернуть данные случайного пользователя. Добавить к пользователю связь 1 ко многим – cars. Возвращать и его авто (использовать resource и ->whenLoaded())

Домашнее задание 15.11

  1. Регулярные выражения онлайн
  2. Справочник Регулярные выражения
    1. Найти cat
    2. Найти все цифры
    3. Найти cat и cats
    4. Найти все числа от 1000 до 9999
    5. Найти номера вида AAA-BBBB-CCC, A – любая цифра кроме 0, B – 0 или 1, C – любая цифра.
    6. Петя запомнил номер телефона смутно: +3753331133 и далее две цифры. Найти все походящие номера.
    7. Найти ac, abc, abbc, abbbc, … (b – любое кол-во)
    8. Найти все числа от 1000 до 9999 без цифр 5, 6, 7, 8
    9. Найти все числа длиной от 3 до 5, состоят из цифр и точки, которая перед последней цифрой.
    10. Найти все слова от 4 до 15 символов, начинаются с буквы, состоят из букв, цифр и символа _
    11. Найти ссылки: начинаются на https или http, далее  ://www или без www, далее точка, далее только буквы или цифры, далее точка, далее домен из 2 или 3 букв. Например, https://www.site.ru

Домашнее задание 08.11

  1. Тестовое задание про ссылки (скрин в тг) – 2-3 недели
  2. Установить postman
  3. Повторить с урока про api – users index и show
  4. ООП Бугаенко (необязательно)

Домашнее задание 18.10

  1. Дан массив чисел. Определить, отсортирован ли он (по возрастанию или убыванию).
  2. Дан массив чисел. Удалить k наибольших и k наименьших чисел из него. Например, k = 2 и [2, 0, 4, 3, 1, 2, 5, 6, 3, 2] -> [2, 4, 3, 2, 3, 2]
  3. Дано целое число. Вывести все числа, которые получается перестановкой его цифр. Например, 235 -> 235, 253, 532, 523, 325, 352. Гуглить алгоритм генерации перестановок.
  4. Дана строка, которая содержит скобки. Определить, верно ли расставлены скобки, то есть кол-во ( равно кол-ву ) и ) не может быть раньше (. Например, (() – нет, (()))() – нет, (((())))()() – да
  5. Дан массив чисел. Написать быструю сортировку для этого массива. Описание алгоритма загуглить
  6. Дан текст – слова разделены пробелами и точками. Найти самое длинное слово, в котором нет цифр.
  7. Дана матрица  из чисел. Переставить так строки местами, чтобы в первом столбце шли числа по порядку (каждое следующее увеличивалось на 1). Если это невозможно, вывести матрицу без изменений.
  8. Дана строка из цифр. Добавить пробелы через каждые три цифры, начиная справа. Например, ‘23456789’ -> ’23 456 789′
  9. Дана строка, содержащая арифметический пример: числа со знаками плюс или минус без скобок. Вычислить значение. Например, ‘-12+23-13’ равно -2
  10. Написать игру с компьютером (через браузер с формой). По очереди игроки называют числа от 1 до 3 до тех пор, пока сумма всех названных чисел меньше 20. Выигрывает тот, кто сделал последний ход. Можно использовать сессии. Показывать историю ходов для тестирования.
  11. Cоздать матрицу 3 x 4, заполнить ее случайным образом числами 0 и 1 так, чтобы в одной строке была ровно одна единица, и вывести на экран. Использовать mt_rand
  12. Дана строка, содержащая полное имя файла (например, ‘c:\WebServers\home\testsite\www\myfile.txt’). Выделите из этой строки имя файла без расширения.
  13. Дана строка и число. Дополнить строку слева и справа пробелами так, чтобы длина строки стала равна данному числу, а исходный текст строки был в центре итоговой строки. Например, ‘   abc’ и 7 -> слева уже есть 2 пробела, значит, добавляем справа 2 пробела и получаем ‘  abc  ‘.
  14. Создайте массив со случайными числами. Затем между каждой парой элементов этого массива вставьте новый элемент, равный сумме значений соседних элементов.
  15. Сгенерировать случайный номер телефона России. Формат: +7(код)номер, код – задать несколько вариантов (из 3 цифр) в коде и выбирать случайно, номер – 7 цифр.
  16. Написать генерацию числа от 10000 до 99999, в котором должна быть хотя бы одна цифра 8.
  17. Сгенерировать массив из 10 чисел: 7 нулей и 3 единицы. Единицы расположены на случайных местах в списке.
  18. Дан массив чисел. Найти наибольшее кол-во подряд идущих нулей в нем. Например, [0, 1, 0, 0, 0, 2, 3, 0, 0] -> 3
  19. Дана строка. Получить строку из всех букв, которые встречаются в этой строке, без повторов, в алфавитном порядке.
  20. Дан текст в стиле snake, то есть слова в нижнем регистре через нижнее подчеркивание. Написать функцию, которая переводит этот текст в Camel, то есть слова слитно, каждое слово с большой буквы. Например, ‘test_example_case’ => ‘TestExampleCase’

Домашнее задание 05.08

  1. Вычитать тз
  2. Создать приватный репозиторий в github и привязать к локальному с новым проектом laravel 9. Создать новую бд. Настроить подключение к бд.
  3. Спроектировать таблицы. Создать миграции, модели и сидеры.
  4. Сделать главную страницу (шаблон FlexStart).
  5. Установить пакет для авторизации, debugbar.
  6. Создать страницу Мой профиль для администратора.

Домашнее задание 02.08

  1. Дан массив фамилий. Найти кол-во однофамильцев. Например, [‘ivanov’, ‘petrov’, ‘ivanov’, ‘petrov’, ‘ivanov’, ‘petrov’] – 6,  [‘ivanov’, ‘petrov’, ‘ivanov’] – 2, [‘ivanov’, ‘petrov’] – 0
  2. Дан массив, элементами которого являются массивы, содержащие фамилии учеников. Например, a = [[‘ivanov’, ‘petrov’], [‘ivanov’, ‘sidorov’], [‘ivanov’, ‘petrov’, ‘leonov’]]. Найти учеников, которые есть в каждом подмассиве. Найти учеников, которые есть только в одном подмассиве. Найти учеников, которые есть только ровно в 2 подмассивах. Найти учеников, которые есть только в k (k – число дано) подмассивах.
  3. Написать функцию, которая на вход получает две строки с кол-вом часов и минут в формате “2 h 40 min”. Найти результат суммы этих периодов времени в таком же формате. Например, дано: “1 h 40 min”, “0 h 22 min”.  Результат: “2 h 2 min”

Домашнее задание 31.07

  1. Прочитать при желании про паттерны Синглтон, Фабрика, Наблюдатель, Фасад и Стратегия.
  2. Потестировать Observers. Создать Observer к какой-нибудь модели (не User) и протестировать большинство из 15 стандартных событий с помощью info(…) (в .env указать daily для LOG_CHANNEL)
  3. Протестировать Events. Event создать двумя способами: через event:generate и make:event. Событие – пользователь написал сообщение (модели User и Message). Слушатель – получает от события пользователя и сообщение и пишет в лог их id и текст сообщения и далее удаляет сообщение из бд.

Домашнее задание 30.07

  1. Сделать сохранение фильтра (по возможности параметры в сессию как массив)
  2. Рефакторинг контроллера пользователей: сервис
  3. Написать функцию isList(), которая определяет, является ли данный массив строгим массивом, то есть индексы его элементов являются последовательными целыми числами, начиная с нуля. Пример, isList([4, 5, 3]) – true, isList([0 => 3, 2 => 4, 3 => 5]) – false, isList([4, 5, ‘a’ => 5]) – false

Домашнее задание 26.07

  1. Рекомендации по именованию для CRUD
  2. Повтор урока. Создать middleware для проверки роли администратора. Добавить для роутов администратора
  3. Сделать две формы на странице профиля. С полной валидацией и Rule
  4. Сделать выход из личного кабинета
  5. Дан массив из одинаковых по структуре массивов с любым уровнем вложенности. Например, $a = [
    [‘developer’ => [‘id’ => 1, ‘name’ => ‘Ivan’]],
    [‘developer’ => [‘id’ => 2, ‘name’ => ‘Petr’]],
    ]; Написать функцию pluck(), которая из данного массива получается одномерный массив из значений, путь к которым указан в виде строки из ключей через точку. Например, plain($a, ‘developer.name’) вернет массив [‘Ivan’, ‘Petr’]

Домашнее задание 22.07

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

Домашнее задание 19.07

  1. Написать консольную команду, которая удаляет всех мягко удаленных пользователей.
  2. Написать консольную команду, которая добавляет в бд фейковых пользователей. Команда запрашивает у пользователя кол-во пользователей. Сделать проверку на валидность введенного кол-ва (от 1 до 100).
  3. Написать команду, которая удаляет 10 мягко удаленных сущностей. Название сущности передается при вызове команды. Например, php artisan del:soft user Поставить команды в расписание – каждый час. Протестировать. Усовершенствовать команду  – можно передать несколько сущностей при вызове.
  4. Прочитать статьи про исключения: первая и вторая. Поэкспериментировать, проверить какой-нибудь пример из статей.
  5. С прошлого дз – кастомное правило валидации на пароль
  6. Дан массив чисел. Выполнить сортировку по четности, то есть сначала должны идти четные, потом нечетные. Можно использовать usort.
  7. Дан двумерный массив. Например, $a=[[100,100],[1,2,3],[4,5],[0,-1],[1,2,3,4,5]]; Переставить элементы массива $a так, чтобы их суммы чисел возрастали. То есть $a=[[0,-1], [1,2,3],[4,5],[1,2,3,4,5],[100,100]];

Домашнее задание 12.07

  1. Сделать кнопки для мягкого удаления и полного удаления. Показывать всех пользователей (в том числе и удаленных). Для удаленных пользователей кнопка Восстановить.
  2. Написать функцию, которая определяет, является ли пароль простым. Пароль простой, если менее 8 символов, или содержит менее 4 различных символов, или состоит только из цифр, или содержит ‘qwerty’ или ‘password’

Домашнее задание 10.07

  1. Пользователь заходит на страницу и видит кол-во посещений данной страницы и дату и время последнего посещения. Реализовать с помощью сессий и функции date(‘d.m.y H:i:s’) – возвращает строку с текущей датой и временем

Домашнее задание 02.07

  1. Дан двумерный массив чисел. Например, [[1, 2, 3], [4, 5], [6, 7, 8, 9]]; В каждом подмассиве поменять местами наименьший и наибольший элементы.
  2. Известно, что \(a_1 = 0\), \(a_2=2\) и \(a_n=3a_{n-1}-2a_{n-2}+1\). Найдите \(a_{20}\)

Домашнее задание 01.07

  1. Создать массив в php. Перегнать в json и обратно с помощью json_encode/_decode. Вывести промежуточный и итоговый результат.
  2. В произвольной модели создать два аттрибута (getSomeNameAttribute). Протестировать
  3. В модель doctor (из предыдущего дз) добавить soft deleting (добавить через миграцию столбец, добавить трейт). Протестировать: мягко удалить конкретного доктора, удалить доктора из базы, написать два запроса – один с игнорированием удаленных, второй – с учетом удаленных.
  4. Создать trait Nameable с методом, который выводит $this->name большими буквами. Подключить трейт в модели, где есть name. Протестировать.
  5. Протестировать casts для boolean
  6. Дан многомерный массив чисел. Например, [1, 2, [3, [4, 5]], 6, [7], [8, 9]]. Найти кол-во чисел в массиве.

Домашнее задание 29.06

  1. Создать таблицу managers (имя, фамилия, email) и drivers (имя, фамилия, телефон). Таблицу cars использовать старую. Создать связи – у каждого водителя есть один менеджер и одна машина. Добавить менеджера, двух водителей, две машины. Привязать к водителям менеджера и машину. Получить менеджера из бд и показать его водителей. Получить водителя из бд и показать его менеджера и машину
    1. Создать миграцию для таблицы doctors – хранит данные о врачах: фамилия, имя, отчество, год рождения, специальность, кол-во пациентов, кол-во лет работы, описание, created_at, updated_at.
    2. Создать сидер для заполнения таблицы 100 записей.
    3. Создать роут и новый контроллер для запросов
    4. У доктора с id = 5 изменить год рождения на 1975 и кол-во пациентов на 100.
    5. Удалить доктора с id=5
    6. У всех докторов, год рождения которых от 1980 до 1990 включительно обнулить кол-во пациентов
    7. Удалить всех докторов, у которых кол-во пациентов меньше 5
    8. Удалить всех докторов, у которых фамилия заканчивается на ‘ов’ и у которых специальность ‘стоматолог’
    9. Найти кол-во всех докторов
    10. Найти кол-во докторов, у которых стаж работы больше 20 лет
    11. Найти какой наибольший стаж у докторов
    12. Найти среднее кол-во пациентов у докторов специальности ‘хирург’
    13. Найти наименьший год рождения у докторов, у которых пациентов от 10 до 20 и специальность или хирург, или стоматолог

Домашнее задание 26.06

  1. Прочитать про отношения статью и документацию
  2. Прочитать про жадную загрузку (понять +-)
  3. В таблицу students добавить user_id на пользователя через миграцию. То есть несколько студентов привязаны к пользователю (менеджеру). В моделях User и Student добавить отношения. Поэкспериментировать с вызовом отношений и др. свойства (привязка и т.п.) по документации
  4. Добавить таблицы cars и owners. Связать их через pivot-таблицу car_owner. Поэкспериментировать с detach, sync и др.

Домашнее задание 24.06

  1. Carbon – все задачи Документация
  2. Получить всех студентов которые (с фамилией Ivanov или годом 2000) и (id > 3 или id = 1)

Домашнее задание 21.06

  1. Повторить код с урока локально и сделать форму для подписчиков

Домашнее задание 19.06

  1. Глянуть про faker
  2. Книга по php (в тг) Гл.2-4 прочитать
  3. Написать seeder для студентов
  4. Получить из бд список студентов
    1. всех
    2. всех упорядоченных по году
    3. всех упорядоченных по году в обратном порядке
    4. первые три студента, у которых год равен 2000
    5. первый студент, у которого год от 2020 до 2023
    6. все студенты с фамилией Ivanov и годом 2020
    7. количество студентов с фамилией Ivanov и годом 2020
    8. существует ли студент с фамилией Ivanov
    9. наибольший год у студентов с фамилией Ivanov
    10. студента у которого id равен 5
    11. все студентов у которых id < 10 или id < 4
    12. студентов с 3 по 7 с фамилией Ivanov и годом 2020

Домашнее задание 17.06

  1. По диагонали глянуть статью про миграции (или найти в русской документации)
  2. Создать миграцию для таблицы students. Таблица содержит столбцы name – имя студента, surname – фамилия, year – год рождения, address – адрес. Для выполнения миграции использовать команду php artisan migrate Файл миграции можно создать как копию файла миграции users и изменить в названии файла дату. Миграции находятся в database/migrations
  3. Создать модель Student. Модели находятся в app/Models.
  4. Создать роут и контроллер. Добавить несколько студентов в бд через Eloquent. Получить из бд а) всех студентов б) всех студентов 1995 года рождения.

Домашнее задание 14.06

  1. Прочитать бегло статьи про массивы и строки
  2. Задачи 42, 44, 45, 77
  3. Задачи на строки 8, 16, 32, 36, 44

Домашнее задание 12.06

  1. Статья про MVC
  2. Дорешать задачи с прошлого дз. Каждая задача с отдельным роутом и контроллером

Домашнее задание 10.06

  1. Посмотреть по диагонали статью про сравнение
  2. Задачи 42, 44
  3. Задачи 25, 27, 33, 38, 51, 52
  4. Задачи 8, 30