#ЛитКод
Задача: 679. 24 Game
Дан массив целых чисел cards длиной 4. У вас есть четыре карты, каждая из которых содержит число в диапазоне от 1 до 9. Вам нужно расположить числа на этих картах в математическом выражении, используя операторы ['+', '-', '*', '/'] и скобки '(' и ')' так, чтобы получить значение 24.
Вы ограничены следующими правилами:
Оператор деления '/' представляет собой реальное деление, а не целочисленное деление.
Например, 4 / (1 - 2 / 3) = 4 / (1 / 3) = 12.
Каждая операция выполняется между двумя числами. В частности, мы не можем использовать '-' как унарный оператор.
Например, если cards = [1, 1, 1, 1], выражение "-1 - 1 - 1 - 1" не допускается.
Вы не можете объединять числа вместе.
Например, если cards = [1, 2, 1, 2], выражение "12 + 12" недопустимо.
Вернуть true, если вы можете получить такое выражение, которое оценивается в 24, и false в противном случае.
Пример:
👨💻 Алгоритм:
1⃣ Создайте функцию generatePossibleResults(a, b), которая возвращает массив результатов всех возможных математических операций над двумя числами.
2⃣ Создайте функцию checkIfResultReached(list), чтобы проверить, можем ли мы достичь результата 24, используя текущий массив list. Сначала проверьте базовые условия: если размер массива равен 1, верните true, если результат равен 24, иначе верните false.
3⃣ Если размер массива больше 1, выберите любые два числа из списка, выполните все математические операции над ними, создайте новый список с обновленными элементами и снова вызовите рекурсивную функцию с этим новым списком. Если ни одна комбинация не приводит к результату 24, верните false. Вызовите checkIfResultReached с исходным списком карт.
😎 Решение:
👉 Новости 👉 База вопросов
Задача: 679. 24 Game
Дан массив целых чисел cards длиной 4. У вас есть четыре карты, каждая из которых содержит число в диапазоне от 1 до 9. Вам нужно расположить числа на этих картах в математическом выражении, используя операторы ['+', '-', '*', '/'] и скобки '(' и ')' так, чтобы получить значение 24.
Вы ограничены следующими правилами:
Оператор деления '/' представляет собой реальное деление, а не целочисленное деление.
Например, 4 / (1 - 2 / 3) = 4 / (1 / 3) = 12.
Каждая операция выполняется между двумя числами. В частности, мы не можем использовать '-' как унарный оператор.
Например, если cards = [1, 1, 1, 1], выражение "-1 - 1 - 1 - 1" не допускается.
Вы не можете объединять числа вместе.
Например, если cards = [1, 2, 1, 2], выражение "12 + 12" недопустимо.
Вернуть true, если вы можете получить такое выражение, которое оценивается в 24, и false в противном случае.
Пример:
Input: cards = [4,1,8,7]
Output: true
Explanation: (8-4) * (7-1) = 24
class Solution {
function generatePossibleResults($a, $b) {
$res = [$a + $b, $a - $b, $b - $a, $a * $b];
if ($a != 0) $res[] = $b / $a;
if ($b != 0) $res[] = $a / $b;
return $res;
}
function checkIfResultReached($list) {
if (count($list) == 1) return abs($list[0] - 24) <= 0.1;
for ($i = 0; $i < count($list); $i++) {
for ($j = $i + 1; $j < count($list); $j++) {
$newList = [];
for ($k = 0; $k < count($list); $k++) {
if ($k != $i && $k != $j) $newList[] = $list[$k];
}
foreach ($this->generatePossibleResults($list[$i], $list[$j]) as $res) {
$newList[] = $res;
if ($this->checkIfResultReached($newList)) return true;
array_pop($newList);
}
}
}
return false;
}
function judgePoint24($cards) {
return $this->checkIfResultReached(array_map('floatval', $cards));
}
}
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
😊 Общие табличные выражения (CTE) в MySQL позволяют писать более чистые и удобные для поддержки запросы, создавая временные именованные наборы результатов.
Вместо вложенных подзапросов CTE можно использовать во многих случаях
👉 Новости 👉 База вопросов
Вместо вложенных подзапросов CTE можно использовать во многих случаях
Please open Telegram to view this post
VIEW IN TELEGRAM
#Собес
🤔 Как реализовать RESTful API в РНР?
RESTful API строится на основе НТТР-методов (GET, POST, PUT, DELETE) и позволяет управлять ресурсами с помощью URI. В PHP обработка запросов осуществляется через маршруты, где каждый маршрут привязан к определенному ресурсу и методу. Для обеспечения безопасности используются токены, а ответы обычно возвращаются в формате JSON.
👉 Новости 👉 Платформа
RESTful API строится на основе НТТР-методов (GET, POST, PUT, DELETE) и позволяет управлять ресурсами с помощью URI. В PHP обработка запросов осуществляется через маршруты, где каждый маршрут привязан к определенному ресурсу и методу. Для обеспечения безопасности используются токены, а ответы обычно возвращаются в формате JSON.
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
😊 Использование Laravel Tinker в Chrome DevTools
Статья о том, как интегрировать Laravel Tinker с Chrome DevTools для более удобной отладки и тестирования кода прямо в браузере.
Это позволяет быстрее проверять и экспериментировать с кодом Laravel, используя привычные инструменты Chrome.
Читать статью
👉 Новости 👉 База вопросов
Статья о том, как интегрировать Laravel Tinker с Chrome DevTools для более удобной отладки и тестирования кода прямо в браузере.
Это позволяет быстрее проверять и экспериментировать с кодом Laravel, используя привычные инструменты Chrome.
Читать статью
Please open Telegram to view this post
VIEW IN TELEGRAM
#вакансии
👨💻 PHP Developer (Middle/Senior)
200 000 — 400 000 ₽
Удаленно (Москва)
Marfatech — компания, которая разрабатывает собственные высокотехнологичные продукты в сфере Digital-маркетинга, Data Science и BI-аналитики.
Требования
🔵 Знание ООП, PHP, MySQL.
🔵 Опыт работы с Symfony желателен.
🔵 Уверенное владение паттернами проектирования.
🔵 Использование систем контроля версий (Git).
Подробнее о вакансии
👉 Новости 👉 База вопросов
200 000 — 400 000 ₽
Удаленно (Москва)
Marfatech — компания, которая разрабатывает собственные высокотехнологичные продукты в сфере Digital-маркетинга, Data Science и BI-аналитики.
Требования
Подробнее о вакансии
Please open Telegram to view this post
VIEW IN TELEGRAM
getmatch.ru
Вакансия PHP Developer, работа в Marfatech, удалённо, в Москве — getmatch
Вакансия PHP Developer, работа в компании Marfatech, Москва (офис или гибрид) или полная удаленка — на выбор. Зарплата: 200 000 — 400 000 ₽/мес на руки. Дата публикации: 19.06.2025.
#полезное
😊 Новый тренажёр по SQL
Разработчик создал SQL Noir — интерактивную детективную игру, где расследования ведутся с помощью SQL-запросов.
Погружаешься в сюжет и решаешь загадки с реальными SQL-запросами.
Ссылка
👉 Новости 👉 База вопросов
Разработчик создал SQL Noir — интерактивную детективную игру, где расследования ведутся с помощью SQL-запросов.
Погружаешься в сюжет и решаешь загадки с реальными SQL-запросами.
Ссылка
Please open Telegram to view this post
VIEW IN TELEGRAM
#Собес
🤔 Как использовать filter_var в РНР?
👉 Новости 👉 Платформа
filter_var
- это универсальная функция для проверки и фильтрации данных. С её помощью можно валидировать email, URL или IP-адреса, а также очищать строки или числа. Это упрощает защиту приложения от некорректных данных и снижает риск атак.Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
😊 Psl
Современный, централизованный, хорошо типизированный, неблокируемый набор API
Библиотека представляет собой современную, согласованную, централизованную и строго типизированную стандартную библиотеку для PHP. Ее цель — предоставить разработчикам PHP набор неблокирующих API, которые упрощают и стандартизируют выполнение общих задач, таких как работа со строками, массивами, генерация случайных чисел и другие операции.
Использование этой библиотеки может поспособствовать повышению качества и читаемости кода, обеспечивая единообразие и надежность при решении повседневных задач.
Гитхаб
👉 Новости 👉 База вопросов
Современный, централизованный, хорошо типизированный, неблокируемый набор API
Библиотека представляет собой современную, согласованную, централизованную и строго типизированную стандартную библиотеку для PHP. Ее цель — предоставить разработчикам PHP набор неблокирующих API, которые упрощают и стандартизируют выполнение общих задач, таких как работа со строками, массивами, генерация случайных чисел и другие операции.
Использование этой библиотеки может поспособствовать повышению качества и читаемости кода, обеспечивая единообразие и надежность при решении повседневных задач.
Гитхаб
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
👍 Использование хелперов даты в конструкторе запросов Laravel
В Laravel версии 11.42 были добавлены новые методы построителя запросов(Query Builder), позволяющие работать с относительными датами. Эти методы повышают читаемость и упрощают написание условий, связанных с датами, в ваших моделях.
Ранее, для фильтрации записей по дате, приходилось явно указывать операторы сравнения и использовать функции, такие как
Новые методы, такие как
Официальный сайт
👉 Новости 👉 База вопросов
В Laravel версии 11.42 были добавлены новые методы построителя запросов(Query Builder), позволяющие работать с относительными датами. Эти методы повышают читаемость и упрощают написание условий, связанных с датами, в ваших моделях.
Ранее, для фильтрации записей по дате, приходилось явно указывать операторы сравнения и использовать функции, такие как
now()
. Это могло приводить к менее читаемому и более громоздкому коду.Новые методы, такие как
whereNowOrPast
, whereFuture
, whereAfterToday
, orWhereBeforeToday
и другие, позволяют писать более лаконичный и понятный код для работы с датами. Они инкапсулируют логику сравнения дат, делая код более выразительным и легким для понимания.Официальный сайт
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
🤯 Mago
Комплексная цепочка инструментов для PHP, которая помогает разработчикам писать более качественный код.
Вдохновленный экосистемой Rust, Mago привносит удобство, надежность и уникальный опыт разработчиков в PHP-проекты любого размера.
Фишки
🟠 Анализ и подсветка: выявление проблем в коде с помощью настраиваемых правил и плагинов.
🟠 Автоматические исправления: Применяйте исправления к проблемам, связанным с линтингом, для поддержания чистоты кодовой базы.
🟠 Последовательное форматирование: Стандартизируйте стиль кода с помощью мощных инструментов форматирования.
🟠 Семантические проверки: Убедитесь в корректности кода с помощью надежного семантического анализа.
🟠 Визуализация AST: Изучите структуру кода с помощью разбора абстрактного синтаксического дерева (AST).
Установка через curl в одну строку:
Гитхаб
👉 Новости 👉 База вопросов
Комплексная цепочка инструментов для PHP, которая помогает разработчикам писать более качественный код.
Вдохновленный экосистемой Rust, Mago привносит удобство, надежность и уникальный опыт разработчиков в PHP-проекты любого размера.
Фишки
Установка через curl в одну строку:
curl --proto '=https' --tlsv1.2 -sSf https://carthage.software/mago.sh | bash
Гитхаб
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
GitHub - carthage-software/mago: Mago is a toolchain for PHP that aims to provide a set of tools to help developers write better…
Mago is a toolchain for PHP that aims to provide a set of tools to help developers write better code. - carthage-software/mago
#Собес
🤔 Что такое Composer и как его использовать?
Composer - это менеджер зависимостей для РНР, позволяющий добавлять библиотеки в проект и управлять их версиями. Он автоматически загружает нужные пакеты и создаёт автозагрузчик для их использования.
👉 Новости 👉 Платформа
Composer - это менеджер зависимостей для РНР, позволяющий добавлять библиотеки в проект и управлять их версиями. Он автоматически загружает нужные пакеты и создаёт автозагрузчик для их использования.
Please open Telegram to view this post
VIEW IN TELEGRAM
#ЛитКод
Задача: 437. Path Sum III
Дан корень бинарного дерева и целое число targetSum, вернуть количество путей, где сумма значений вдоль пути равна targetSum.
Путь не обязательно должен начинаться или заканчиваться в корне или на листе, но он должен идти вниз (т.е. перемещаться только от родительских узлов к дочерним).
Пример:
👨💻 Алгоритм:
1⃣ Инициализируем счетчик путей в дереве count = 0 и хеш-таблицу h, где ключ - это префиксная сумма, а значение - сколько раз она встречалась. Выполним рекурсивный обход дерева в порядке preorder: узел -> левый -> правый. Функция preorder(node: TreeNode, curr_sum: int) принимает два аргумента: узел дерева и префиксную сумму перед этим узлом. Чтобы запустить рекурсию, вызовем preorder(root, 0).
2⃣ Сначала обновим текущую префиксную сумму, добавив значение текущего узла: curr_sum += node.val. Теперь можно обновить счетчик. Рассмотрим две ситуации. В первой ситуации путь в дереве с целевой суммой начинается с корня. Это означает, что текущая префиксная сумма равна целевой сумме curr_sum == k, поэтому увеличиваем счетчик на 1: count += 1. Во второй ситуации путь с целевой суммой начинается где-то ниже. Это означает, что нужно добавить к счетчику количество раз, когда мы видели префиксную сумму curr_sum - target: count += h[curr_sum - target].
3⃣ Логика проста: текущая префиксная сумма - это curr_sum, а несколько элементов назад префиксная сумма была curr_sum - target. Все элементы между ними суммируются до curr_sum - (curr_sum - target) = target. Теперь обновим хеш-таблицу: h[curr_sum] += 1. Проанализируем левое и правое поддеревья: preorder(node.left, curr_sum), preorder(node.right, curr_sum). После обработки текущего поддерева удалим текущую префиксную сумму из хеш-таблицы, чтобы не смешивать параллельные поддеревья: h[curr_sum] -= 1. Когда обход в порядке preorder завершен, счетчик обновлен. Вернем его.
😎 Решение:
👉 Новости 👉 База вопросов
Задача: 437. Path Sum III
Дан корень бинарного дерева и целое число targetSum, вернуть количество путей, где сумма значений вдоль пути равна targetSum.
Путь не обязательно должен начинаться или заканчиваться в корне или на листе, но он должен идти вниз (т.е. перемещаться только от родительских узлов к дочерним).
Пример:
Input: root = [10,5,-3,3,2,null,11,3,-2,null,1], targetSum = 8
Output: 3
Explanation: The paths that sum to 8 are shown.
class Solution {
function pathSum($root, $sum) {
$count = 0;
$k = $sum;
$h = [];
$preorder = function($node, $curr_sum) use (&$preorder, &$count, &$h, $k) {
if (!$node) return;
$curr_sum += $node->val;
if ($curr_sum == $k) {
$count++;
}
$count += $h[$curr_sum - $k] ?? 0;
$h[$curr_sum] = ($h[$curr_sum] ?? 0) + 1;
$preorder($node->left, $curr_sum);
$preorder($node->right, $curr_sum);
$h[$curr_sum]--;
};
$preorder($root, 0);
return $count;
}
}
Please open Telegram to view this post
VIEW IN TELEGRAM
#статьи
😬 Как организовать структуру приложения
Структура кода — это не просто способ организации файлов и папок в проекте, это фундаментальный аспект разработки, который влияет на её эффективность, качество, и долгосрочную поддержку. Красиво организованный код облегчает понимание, упрощает внедрение новых функций и снижает вероятность ошибок. Независимо от масштаба проекта, будь то небольшое приложение или сложная система, структурированный подход к организации кода способствует снижению рисков, связанных с техническим долгом, и повышает продуктивность команды разработчиков. Однако не все разработчики осознают, насколько велика разница между проектами с хорошо продуманной структурой и хаотично организованной.
В этой статье разбирается, что значит «понятная структура кода», и почему её наличие столь важно для успешной разработки.
Читать статью
👉 Новости 👉 База вопросов
Структура кода — это не просто способ организации файлов и папок в проекте, это фундаментальный аспект разработки, который влияет на её эффективность, качество, и долгосрочную поддержку. Красиво организованный код облегчает понимание, упрощает внедрение новых функций и снижает вероятность ошибок. Независимо от масштаба проекта, будь то небольшое приложение или сложная система, структурированный подход к организации кода способствует снижению рисков, связанных с техническим долгом, и повышает продуктивность команды разработчиков. Однако не все разработчики осознают, насколько велика разница между проектами с хорошо продуманной структурой и хаотично организованной.
В этой статье разбирается, что значит «понятная структура кода», и почему её наличие столь важно для успешной разработки.
Читать статью
Please open Telegram to view this post
VIEW IN TELEGRAM
Хабр
Как организовать структуру приложения
🔔 Введение Структура кода — это не просто способ организации файлов и папок в проекте, это фундаментальный аспект разработки, который влияет на её эффективность, качество, и долгосрочную поддержку....
#статьи
😊 Упакуйте свой код правильно
В предыдущей статье «Как организовать структуру приложения» рассматривались различные подходы к организации кода, включая монолитную архитектуру, многослойную архитектуру и принципы чистой архитектуры. Особое внимание уделялось важности понятной структуры кода, способствующей упрощению его понимания, внедрению новых функций и снижению вероятности ошибок. Были рассмотрены критерии понятности, такие как чёткое назначение файлов и папок, разделение логики по модулям или функциональным зонам, использование самодокументируемых названий и соблюдение стандартов кодирования. Также поднимались проблемы, возникающие при неструктурированной организации кода, включая сложность навигации, отсутствие модульности и нарушение принципов SOLID и GRASP.
Читать полностью
👉 Новости 👉 База вопросов
В предыдущей статье «Как организовать структуру приложения» рассматривались различные подходы к организации кода, включая монолитную архитектуру, многослойную архитектуру и принципы чистой архитектуры. Особое внимание уделялось важности понятной структуры кода, способствующей упрощению его понимания, внедрению новых функций и снижению вероятности ошибок. Были рассмотрены критерии понятности, такие как чёткое назначение файлов и папок, разделение логики по модулям или функциональным зонам, использование самодокументируемых названий и соблюдение стандартов кодирования. Также поднимались проблемы, возникающие при неструктурированной организации кода, включая сложность навигации, отсутствие модульности и нарушение принципов SOLID и GRASP.
Читать полностью
Please open Telegram to view this post
VIEW IN TELEGRAM
Хабр
Упакуйте свой код правильно
В предыдущей статье « Как организовать структуру приложения » обсуждались различные подходы к организации кода, включая монолитную архитектуру, многослойную архитектуру и принципы чистой архитектуры....
#Собес
🤔 Как РНР взаимодействует с базами данных?
PHP взаимодействует с базами данных через MySQLi, PDO или ORM. MySQLi подходит для работы только с MySQL, а PDO поддерживает разные базы данных. ORM (например, Eloquent) позволяет абстрагироваться от SQL-запросов, работая с объектами.
👉 Новости 👉 Платформа
PHP взаимодействует с базами данных через MySQLi, PDO или ORM. MySQLi подходит для работы только с MySQL, а PDO поддерживает разные базы данных. ORM (например, Eloquent) позволяет абстрагироваться от SQL-запросов, работая с объектами.
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
#полезное
😎 navi — утилита для командной строки
Это утилита, которая поможет быстро находить готовые команды для терминала и сразу их выполнять. Вы можете использовать готовые шпаргалки или создать свои, а navi покажет возможные значения аргументов прямо в интерфейсе.
Как использовать
1⃣ Устанавливаем через Homebrew:
2⃣ Запускаем командой:
navi — доступ ко всем шпаргалкам
3⃣ Встраиваем как shell-виджет или tmux-виджет для быстрого доступа
4⃣ Создаем свои шпаргалки или импортируем из других источников (например, tldr или cheat.sh)
Что еще умеет
🟠 Поддерживает кастомные конфиги, цвета и пути для шпаргалок
🟠 Работает в любом терминале или через Tmux
🟠 Можно использовать как скриптовый инструмент или даже через Alfred
Гитхаб
👉 Новости 👉 База вопросов
Это утилита, которая поможет быстро находить готовые команды для терминала и сразу их выполнять. Вы можете использовать готовые шпаргалки или создать свои, а navi покажет возможные значения аргументов прямо в интерфейсе.
Как использовать
brew install navi
navi — доступ ко всем шпаргалкам
Что еще умеет
Гитхаб
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
👍 Как можно получить список маршрутов, зарегистрированных пакетами в ваших Laravel-приложениях?
Вы можете сделать это, выполнив команду:
Это отлично подходит для аудита ваших маршрутов и выявления тех, о которых вы могли не знать, чтобы убедиться, что они защищены и безопасны
👉 Новости 👉 База вопросов
Вы можете сделать это, выполнив команду:
php artisan route:list --only-vendor
Это отлично подходит для аудита ваших маршрутов и выявления тех, о которых вы могли не знать, чтобы убедиться, что они защищены и безопасны
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
😊 Совет по PHP для массовой замены строк
Вы можете использовать
Источник фрагмента кода: GitHub
👉 Новости 👉 База вопросов
Вы можете использовать
str_replace()
, передавая массивы ключей и значений в качестве параметров, без использования циклов.Источник фрагмента кода: GitHub
Please open Telegram to view this post
VIEW IN TELEGRAM
#Собес
🤔 Каковы различия между MySQLi и PDO?
MySQLi - это расширение, предназначенное только для работы с MySQL, оно поддерживает процедурный и объектно-ориентированный стили программирования. PDO (PHP Data Objects) - универсальный инструмент для работы с разными базами данных (MySQL, PostgreSQL, SQLite и др.), который работает только в объектно- ориентированном стиле. PDO предоставляет унифицированный интерфейс и поддерживает именованные параметры в запросах, тогда как MySQLi лучше подходит для специфичных функций MySQL, например, хранимых процедур.
👉 Новости 👉 Платформа
MySQLi - это расширение, предназначенное только для работы с MySQL, оно поддерживает процедурный и объектно-ориентированный стили программирования. PDO (PHP Data Objects) - универсальный инструмент для работы с разными базами данных (MySQL, PostgreSQL, SQLite и др.), который работает только в объектно- ориентированном стиле. PDO предоставляет унифицированный интерфейс и поддерживает именованные параметры в запросах, тогда как MySQLi лучше подходит для специфичных функций MySQL, например, хранимых процедур.
Please open Telegram to view this post
VIEW IN TELEGRAM
#статьи
😊 Автотесты | Как мокировать классы с помощью PHPUnit
Моки — это, по сути, клоны ваших классов. Они переопределяют ваш класс, сохраняя тот же тип и тип возврата, что и исходный класс. Убедиться в правильности возвращаемого типа в процессе создания мока очень важно, в противном случае будут возникать ошибки.
Читать статью
👉 Новости 👉 База вопросов
Моки — это, по сути, клоны ваших классов. Они переопределяют ваш класс, сохраняя тот же тип и тип возврата, что и исходный класс. Убедиться в правильности возвращаемого типа в процессе создания мока очень важно, в противном случае будут возникать ошибки.
Читать статью
Please open Telegram to view this post
VIEW IN TELEGRAM
#полезное
👍 PVM — менеджер версий PHP
Простой bash-скрипт для управления несколькими версиями PHP в Unix-системах(в том числе MacOS).
Установка через Curl:
Гитхаб
👉 Новости 👉 База вопросов
Простой bash-скрипт для управления несколькими версиями PHP в Unix-системах(в том числе MacOS).
Установка через Curl:
curl -o /usr/local/bin/pvm https://raw.githubusercontent.com/smoqadam/pvm/main/pvm
chmod +x /usr/local/bin/pvm
export PATH="$HOME/.pvm/current:$PATH
"Гитхаб
Please open Telegram to view this post
VIEW IN TELEGRAM