🤔 Какой из перечисленных типов данных в PHP не является скалярным?
Anonymous Quiz
0%
Integer
17%
String
67%
Array
17%
Float
#ЛитКод
Задача: 353. Design Snake Game
Разработайте игру "Змейка", которая играется на устройстве с экраном размером height x width. Поиграйте в игру онлайн, если вы не знакомы с ней.
Змейка изначально находится в верхнем левом углу (0, 0) с длиной в 1 единицу.
Вам дан массив food, где food[i] = (ri, ci) представляет собой строку и столбец позиции пищи, которую змейка может съесть. Когда змейка съедает кусочек пищи, ее длина и очки игры увеличиваются на 1.
Каждый кусочек пищи появляется по очереди на экране, то есть второй кусочек пищи не появится, пока змейка не съест первый кусочек пищи.
Когда кусочек пищи появляется на экране, гарантируется, что он не появится на блоке, занятом змейкой.
Игра заканчивается, если змейка выходит за пределы экрана (врезается в стену) или если ее голова занимает пространство, которое занимает ее тело после движения (например, змейка длиной 4 не может врезаться в себя).
Реализуйте класс SnakeGame:
SnakeGame(int width, int height, int[][] food) Инициализирует объект с экраном размером height x width и позициями пищи.
int move(String direction) Возвращает счет игры после применения одного движения змейки в направлении. Если игра окончена, верните -1.
Пример:
👨💻 Алгоритм:
1⃣ Инициализируйте объекты игры, такие как экран, еда, положение змейки и счетчик, в конструкторе.
2⃣ Реализуйте функцию для вычисления нового положения головы змейки на основе направления движения.
3⃣ Обновите положение змейки и проверьте условия завершения игры. Верните текущий счет или -1, если игра закончена.
😊 Решение:
👉 Новости 👉 Платформа
Задача: 353. Design Snake Game
Разработайте игру "Змейка", которая играется на устройстве с экраном размером height x width. Поиграйте в игру онлайн, если вы не знакомы с ней.
Змейка изначально находится в верхнем левом углу (0, 0) с длиной в 1 единицу.
Вам дан массив food, где food[i] = (ri, ci) представляет собой строку и столбец позиции пищи, которую змейка может съесть. Когда змейка съедает кусочек пищи, ее длина и очки игры увеличиваются на 1.
Каждый кусочек пищи появляется по очереди на экране, то есть второй кусочек пищи не появится, пока змейка не съест первый кусочек пищи.
Когда кусочек пищи появляется на экране, гарантируется, что он не появится на блоке, занятом змейкой.
Игра заканчивается, если змейка выходит за пределы экрана (врезается в стену) или если ее голова занимает пространство, которое занимает ее тело после движения (например, змейка длиной 4 не может врезаться в себя).
Реализуйте класс SnakeGame:
SnakeGame(int width, int height, int[][] food) Инициализирует объект с экраном размером height x width и позициями пищи.
int move(String direction) Возвращает счет игры после применения одного движения змейки в направлении. Если игра окончена, верните -1.
Пример:
Input
["SnakeGame", "move", "move", "move", "move", "move", "move"]
[[3, 2, [[1, 2], [0, 1]]], ["R"], ["D"], ["R"], ["U"], ["L"], ["U"]]
Output
[null, 0, 0, 1, 1, 2, -1]
class SnakeGame {
private $width;
private $height;
private $food;
private $score;
private $snake;
private $snakeSet;
private $foodIndex;
function __construct($width, $height, $food) {
$this->width = $width;
$this->height = $height;
$this->food = $food;
$this->score = 0;
$this->snake = [[0, 0]];
$this->snakeSet = ['0,0' => true];
$this->foodIndex = 0;
}
function move($direction) {
$head = $this->snake[0];
$newHead = $head;
switch ($direction) {
case "U":
$newHead[0]--;
break;
case "D":
$newHead[0]++;
break;
case "L":
$newHead[1]--;
break;
case "R":
$newHead[1]++;
break;
}
if ($newHead[0] < 0 || $newHead[0] >= $this->height || $newHead[1] < 0 || $newHead[1] >= $this->width) {
return -1;
}
$newHeadStr = implode(',', $newHead);
if (isset($this->snakeSet[$newHeadStr]) && $newHeadStr !== implode(',', end($this->snake))) {
return -1;
}
if ($this->foodIndex < count($this->food) && $newHead[0] === $this->food[$this->foodIndex][0] && $newHead[1] === $this->food[$this->foodIndex][1]) {
$this->foodIndex++;
} else {
$tail = array_pop($this->snake);
unset($this->snakeSet[implode(',', $tail)]);
}
array_unshift($this->snake, $newHead);
$this->snakeSet[$newHeadStr] = true;
return count($this->snake) - 1;
}
}
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Что означает аббревиатура PDO в контексте PHP?
Anonymous Quiz
7%
PHP Data Oriented
43%
PHP Database Object
43%
PHP Data Objects
7%
PHP Database Oriented
#ЛитКод
Задача: 616. Add Bold Tag in String
Вам дана строка s и массив строк words. Вы должны добавить закрытую пару полужирных тегов <b> и </b>, чтобы обернуть подстроки в s, которые существуют в words. Если две такие подстроки пересекаются, вы должны обернуть их вместе только одной парой закрытых полужирных тегов. Если две подстроки, обернутые полужирными тегами, идут подряд, вы должны объединить их. Верните s после добавления полужирных тегов.
Пример:
👨💻 Алгоритм:
1⃣ Найдите все позиции вхождений подстрок из words в строку s и пометьте эти позиции для выделения тегами <b> и </b>.
2⃣ Пройдитесь по помеченным позициям, чтобы определить области, которые нужно обернуть в полужирные теги, слияя пересекающиеся и смежные области.
3⃣ Постройте новую строку s, добавляя теги <b> и </b> в определенные позиции.
😎 Решение:
👉 Новости 👉 Платформа
Задача: 616. Add Bold Tag in String
Вам дана строка s и массив строк words. Вы должны добавить закрытую пару полужирных тегов <b> и </b>, чтобы обернуть подстроки в s, которые существуют в words. Если две такие подстроки пересекаются, вы должны обернуть их вместе только одной парой закрытых полужирных тегов. Если две подстроки, обернутые полужирными тегами, идут подряд, вы должны объединить их. Верните s после добавления полужирных тегов.
Пример:
Input: s = "abcxyz123", words = ["abc","123"]
Output: "<b>abc</b>xyz<b>123</b>"
function addBoldTag($s, $words) {
$bold = array_fill(0, strlen($s), false);
foreach ($words as $word) {
$pos = strpos($s, $word);
while ($pos !== false) {
for ($i = $pos; $i < $pos + strlen($word); $i++) {
$bold[$i] = true;
}
$pos = strpos($s, $word, $pos + 1);
}
}
$result = "";
$i = 0;
while ($i < strlen($s)) {
if ($bold[$i]) {
$result .= "<b>";
while ($i < strlen($s) && $bold[$i]) {
$result .= $s[$i];
$i++;
}
$result .= "</b>";
} else {
$result .= $s[$i];
$i++;
}
}
return $result;
}
Please open Telegram to view this post
VIEW IN TELEGRAM
#ЧеКак
🤔 Как переопределить хранение сессий?
Хранение сессий можно переопределить путём изменения способа их хранения:
Файлы: хранение на локальной файловой системе.
Базы данных: использование реляционных баз для хранения сессий, что упрощает их масштабирование.
Кэш: хранение в Redis, Memcached для быстрого доступа.
Для настройки нужно изменить конфигурацию приложения или middleware, например, в Django, Flask или Spring.
👉 Новости 👉 Платформа
Хранение сессий можно переопределить путём изменения способа их хранения:
Файлы: хранение на локальной файловой системе.
Базы данных: использование реляционных баз для хранения сессий, что упрощает их масштабирование.
Кэш: хранение в Redis, Memcached для быстрого доступа.
Для настройки нужно изменить конфигурацию приложения или middleware, например, в Django, Flask или Spring.
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Что делает этот код? namespace HelloWorld;
Anonymous Quiz
73%
Создаёт одно пространство имён: Hello//World
7%
Создаёт два пространства имён: Hello//World и World
20%
Создаёт два пространства имён: Hello и World
0%
Создаёт два пространства имён: Hello и Hello//World
#ЧеКак
🤔 Что известно о MVC?
Это архитектурный шаблон, который разделяет приложение на три компонента:
🟠 Model: управляет данными и бизнес-логикой.
🟠 View: отвечает за отображение данных пользователю.
🟠 Controller: обрабатывает пользовательский ввод, связывает Model и View.
Это разделение упрощает разработку, тестирование и поддержку приложения.
👉 Новости 👉 Платформа
Это архитектурный шаблон, который разделяет приложение на три компонента:
Это разделение упрощает разработку, тестирование и поддержку приложения.
Please open Telegram to view this post
VIEW IN TELEGRAM
#Вакансии
👨💻 Backend PHP developer (Middle)
Локация: Удаленно
Компания: Igaming-Soft
ЗП: от 2 500 до 3 000 $
Занятость: Полная
Локация: Кипр
Трудоустройство: самозанятый
Сфера: GAMBLING
🚩 Требования
🔵 Опыт работы с php 7+
🔵 Опыт разработки коммерческих продуктов
🔵 Понимание ООП, алгоритмов и структур данных
🔵 Опыт работы со сторонними API и проектирование REST API
🔵 Опыт интеграции платежных систем
🔵 Базовые шаблоны проектирования
🔵 Опыт работы с GIT, работа с ветками, чистота веток
🔵 Опыт работы с MySQL. Агрегаты, джоины, запросы от руки. Важно уметь писать сложные запросы без фреймворков и шаблонов.
🔵 консоль (bash), Linux или WSL
🔵 Опыт удаленной разработки, работы в команде
🚩 Будет плюсом
🔵 Опыт работы с высоконагруженными системами
🔵 Опыт работы с Websocket
🔵 Опыт работы с Docker и/или Docker Swarm
🔵 Инструменты Jira, Gitlab/Github, git flow
💬 Резюме отправлять: @Nbagama
👉 Новости 👉 Платформа
Локация: Удаленно
Компания: Igaming-Soft
ЗП: от 2 500 до 3 000 $
Занятость: Полная
Локация: Кипр
Трудоустройство: самозанятый
Сфера: GAMBLING
Please open Telegram to view this post
VIEW IN TELEGRAM
#ЧеКак
🤔 Какую проблему решает декоратор?
Декоратор позволяет добавлять новую функциональность к существующему объекту или функции без изменения их исходного кода.
🟠 Это решает проблему модификации поведения без нарушения принципа открытости/закрытости (SOLID).
🟠 Удобен для добавления динамических изменений, таких как логирование, кэширование или аутентификация.
👉 Новости 👉 Платформа
Декоратор позволяет добавлять новую функциональность к существующему объекту или функции без изменения их исходного кода.
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Что такое оператор "switch" в РНР?
Anonymous Quiz
4%
Оператор для выполнения циклических действий
91%
Оператор для проверки условий поочерёдно
4%
Оператор для объединения массивов
0%
Оператор для работы с файлами
#ЧеКак
🤔 Какую проблему решает декоратор?
Декоратор позволяет добавлять новую функциональность к существующему объекту или функции без изменения их исходного кода.
🟠 Это решает проблему модификации поведения без нарушения принципа открытости/закрытости (SOLID).
🟠 Удобен для добавления динамических изменений, таких как логирование, кэширование или аутентификация.
👉 Новости 👉 Платформа
Декоратор позволяет добавлять новую функциональность к существующему объекту или функции без изменения их исходного кода.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Какой метод используется для удаления куки в PHP?
Anonymous Quiz
33%
remove_cookie()
11%
delete_cookie()
33%
unset_cookie()
22%
setcookie()
🤔 Какой метод используется для изменения прав доступа к файлу в PHP?
Anonymous Quiz
20%
set_mode()
13%
file_chmod()
0%
change_mode()
67%
chmod()
🤔 Какой метод используется для получения информации о типе ресурса в PHP?
Anonymous Quiz
44%
get_resource_type()
38%
resource_type()
0%
type_resource()
19%
get_type_resource()
#ЛитКод
Задача: 605. Can Place Flowers
У вас есть длинная клумба, на которой некоторые участки засажены, а некоторые нет. Однако цветы нельзя сажать на соседних участках.
Дан целочисленный массив
Пример
👨💻 Алгоритм:
1⃣ Решение очень простое. Мы можем определить максимальное количество дополнительных цветов, count, которые можно посадить для данного расположения клумбы. Для этого мы проходим по всем элементам массива flowerbed и находим те элементы, которые равны 0 (означает пустую позицию).
2⃣ Для каждого такого элемента проверяем, пусты ли обе его соседние позиции. Если да, мы можем посадить цветок в текущей позиции, не нарушая правило соседних цветов. Для первого и последнего элементов не нужно проверять предыдущие и следующие соседние позиции соответственно.
3⃣ Если полученное количество count больше или равно n, требуемому количеству цветов для посадки, мы можем посадить n цветов на пустые места, иначе - нет.
😎 Решение:
👉 Новости 👉 Платформа
Задача: 605. Can Place Flowers
У вас есть длинная клумба, на которой некоторые участки засажены, а некоторые нет. Однако цветы нельзя сажать на соседних участках.
Дан целочисленный массив
flowerbed
, содержащий 0 и 1, где 0 означает пустой участок, а 1 — занятый участок, и целое число n
. Верните true
, если n
новых цветов можно посадить на клумбе, не нарушая правила о соседних цветах, и false
в противном случае.Пример
Input: flowerbed = [1,0,0,0,1], n = 1
Output: true
class Solution {
function canPlaceFlowers($flowerbed, $n) {
$count = 0;
for ($i = 0; $i < count($flowerbed); $i++) {
if ($flowerbed[$i] == 0) {
$emptyLeft = $i == 0 || $flowerbed[$i - 1] == 0;
$emptyRight = $i == count($flowerbed) - 1 || $flowerbed[$i + 1] == 0;
if ($emptyLeft && $emptyRight) {
$flowerbed[$i] = 1;
$count++;
}
}
}
return $count >= $n;
}
}
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Какой параметр cURL используется для установки аутентификации с использованием логина и пароля?
Anonymous Quiz
0%
CURLOPT_USERPWD
7%
CURLOPT_LOGIN
80%
CURLOPT_AUTH
13%
CURLOPT_CREDENTIALS
This media is not supported in your browser
VIEW IN TELEGRAM
Мощный фреймворк для создания консольных приложений на PHP с псевдографическим пользовательским интерфейсом.
Читать статью
Please open Telegram to view this post
VIEW IN TELEGRAM
#Собес
🤔 Как работает жизненный цикл запроса в PHP?
Жизненный цикл запроса в РНР начинается с получения НТТР-запроса сервером. Сервер передает запрос РНР-интерпретатору, который выполняет скрипт, взаимодействует с базой данных (если требуется), и генерирует ответ в формате HTML или другого типа контента. Ответ отправляется клиенту, где отображается в браузере. Каждый запрос обрабатывается изолированно, и состояние приложения между запросами не сохраняется без использования сессий или базы данных.
👉 Новости 👉 Платформа
Жизненный цикл запроса в РНР начинается с получения НТТР-запроса сервером. Сервер передает запрос РНР-интерпретатору, который выполняет скрипт, взаимодействует с базой данных (если требуется), и генерирует ответ в формате HTML или другого типа контента. Ответ отправляется клиенту, где отображается в браузере. Каждый запрос обрабатывается изолированно, и состояние приложения между запросами не сохраняется без использования сессий или базы данных.
Please open Telegram to view this post
VIEW IN TELEGRAM
#ЛитКод
Задача: 621. Task Scheduler
Вам дан массив задач процессора, каждая из которых представлена буквами от A до Z, и время охлаждения, n. Каждый цикл или интервал позволяет завершить одну задачу. Задачи могут быть выполнены в любом порядке, но есть ограничение: одинаковые задачи должны быть разделены не менее чем n интервалами из-за времени охлаждения. Верните минимальное количество интервалов, необходимое для выполнения всех задач.
Пример:
👨💻 Алгоритм:
1⃣ Подсчитайте количество каждой задачи и найдите максимальное количество вхождений (maxFreq).
2⃣ Вычислите количество интервалов, необходимых для задач с maxFreq: (maxFreq - 1) * (n + 1) + countMaxFreq, где countMaxFreq - количество задач, имеющих maxFreq.
3⃣ Верните максимум между вычисленным значением и длиной массива задач, поскольку некоторые задачи могут заполнять интервал до n.
😎 Решение:
👉 Новости 👉 Платформа
Задача: 621. Task Scheduler
Вам дан массив задач процессора, каждая из которых представлена буквами от A до Z, и время охлаждения, n. Каждый цикл или интервал позволяет завершить одну задачу. Задачи могут быть выполнены в любом порядке, но есть ограничение: одинаковые задачи должны быть разделены не менее чем n интервалами из-за времени охлаждения. Верните минимальное количество интервалов, необходимое для выполнения всех задач.
Пример:
Input: tasks = ["A","A","A","B","B","B"], n = 2
Output: 8
function leastInterval($tasks, $n) {
$taskCounts = array_count_values($tasks);
$maxFreq = max($taskCounts);
$countMaxFreq = count(array_filter($taskCounts, function($count) use ($maxFreq) {
return $count == $maxFreq;
}));
return max(count($tasks), ($maxFreq - 1) * ($n + 1) + $countMaxFreq);
}
Please open Telegram to view this post
VIEW IN TELEGRAM