Добро пожаловать на новую статью по решению алгоритмических задач, в которой я собрал для вас список новых задач из разных источников разной сложности, чтобы каждый смог попробовать в себя в этом увлекательном деле!
Цель статьи заключается в тренировке практик по применению различных алгоритмов, в поддержании навыка "Писать код" в тонусе ну и, само собой, немного поразвлечься!
Что было раньше:
В предыдущей части (нажмите на строку) мы решили:
- Count Odd Numbers below n (Подсчитайте нечетные числа ниже n) (Нажмите на строку)
- Multiply the number (Умножьте это число) (Нажмите на строку)
- Matryoshka Dolls (Матрешки) (Нажмите на строку)
- Flatten Me (Расплющи меня) (Нажмите на строку)
- Hungarian Vowel Harmony (harder) (Венгерская гармония гласных (более тяжелая)) (Нажмите на строку)
- The maximum and minimum difference -- Challenge version (Максимальная и минимальная разница - Сложная версия) (Нажмите на строку)
В этой части вас ждут еще более интересные алгоритмические задачи. Давайте приступим!
Решение новых задач:
Пояснение сложности задач у разных платформ:
Codewars
8 kyu - Самая простая задача
7 kyu - ...
6 kyu - ...
5 kyu - ...
4 kyu - ...
3 kyu - ...
2 kyu - ...
1 kyu - Самая сложная задач
Задача 1
Платформа: CodeWars
Название задачи: Count the number of cubes with paint on (Подсчитайте количество кубиков, на которых нанесена краска.)
Ссылка на задачу: https://www.codewars.com/kata/5763bb0af716cad8fb000580 (Нажмите на строку)
Сложность: 8 (8 / 8) kyu
Уже решили (На момент написания статьи): 4,439 из 12,104
Тэги: Головоломки
Оригинальное описание задачи:
Upon arriving at an interview, you are presented with a solid blue cube. The cube is then dipped in red paint, coating the entire surface of the cube. The interviewer then proceeds to cut through the cube in all three dimensions a certain number of times.
Your function takes as parameter the number of times the cube has been cut. You must return the number of smaller cubes created by the cuts that have at least one red face.
To make it clearer, the picture below represents the cube after (from left to right) 0, 1 and 2 cuts have been made.

Examples:
If we cut the cube 2 times, the function should return 26
If we cut the cube 4 times, the function should return 98
Пояснение задачи:
Задача просит нас рассчитать количество маленьких кубиков, которые имеют хотя бы одну красную сторону, после того как большой куб был разрезан на более мелкие кусочки.
Большой куб изначально покрашен красным цветом снаружи, а затем его разрезают несколько раз вдоль каждой оси.
Наша функция должна принимать количество сделанных разрезов и возвращать количество маленьких кубиков с красной стороной.
Задача 2
Платформа: CodeWars
Название задачи: Logical calculator (Логический калькулятор)
Ссылка на задачу: https://www.codewars.com/kata/57096af70dad013aa200007b (Нажмите на строку)
Сложность: 8 (8 / 8) kyu
Уже решили (На момент написания статьи): 4,009 из 9,348
Тэги: Массивы, Фундаментальные
Оригинальное описание задачи:
Your Task
Given an array of Boolean values and a logical operator, return a Boolean result based on sequentially applying the operator to the values in the array.
Examples
- booleans =
[True, True, False]
, operator = "AND"
True
AND
True
-> True
True
AND
False
-> False
- return
False
- booleans =
[True, True, False]
, operator = "OR"
True
OR
True
-> True
True
OR
False
-> True
- return
True
- booleans =
[True, True, False]
, operator = "XOR"
True
XOR
True
-> False
False
XOR
False
-> False
- return
False
Input
- an array of Boolean values
(1 <= array_length <= 50)
- a string specifying a logical operator:
"AND"
, "OR"
, "XOR"
Output
A Boolean value (True
or False
).
Пояснение задачи:
Задача заключается в применении логической операции к массиву булевых значений.
Операция выполняется последовательно над всеми элементами массива.
Возможные операции: "AND", "OR", "XOR".
Необходимо вернуть результат логического выражения.
Примеры:
Массив: [True, True, False], операция: "AND"
True AND True -> True
True AND False -> False
Вернуть False
Массив: [True, True, False], операция: "OR"
True OR True -> True
True OR False -> True
Вернуть True
Массив: [True, True, False], операция: "XOR"
True XOR True -> False
False XOR False -> False
Вернуть False
Ввод: Массив булевых значений длиной от 1 до 50 Строка, определяющая логическую операцию: "AND", "OR", "XOR"
Вывод: Булево значение True или False
Задача 3
Платформа: CodeWars
Название задачи: Capitalize first letter of a string (Заглавная буква первой буквы строки)
Ссылка на задачу: https://www.codewars.com/kata/56c19316e8b139dff60006da (Нажмите на строку)
Сложность: 7 (7 / 8) kyu
Уже решили (На момент написания статьи): 1,188 из 1,213
Тэги: Фундаментальные, Объектно-Ориентированное программирование, Регулярные выражения
Оригинальное описание задачи:
Capitalize First Letter of a String
Write a function capitalize()
which capitalizes the first letter (if any) of the given string. For example:
Input
Output
string
String
hello World
Hello World
i love codewars
I love codewars
This sentence is already capitalized
This sentence is already capitalized
0123the first character of this sentence is not a letter
0123the first character of this sentence is not a letter
JavaScript / CoffeeScript: Extend the String
prototype with a method capitalize()
so you can call it on a string like so: "string".capitalize()
. Learn about inheritance and the prototype chain.
Furthermore, the built-in string methods toUpperCase()
and toLowerCase()
are disabled for this Kata.
Пояснение задачи:
Задача заключается в написании функции capitalize(), которая преобразует первый символ строки в заглавный, оставляя остальную часть строки без изменений.
Функция должна обрабатывать различные типы входных данных, включая строки с цифрами и специальные символы.
Примеры:
Вход: "string" → Выход: "String"
Вход: "hello World" → Выход: "Hello World"
Вход: "i love codewars" → Выход: "I love codewars"
Вход: "This sentence is already capitalized" → Выход: "This sentence is already capitalized"
Вход: "0123the first character of this sentence is not a letter" → Выход: "0123the first character of this sentence is not a letter"
Для JavaScript/CoffeeScript нужно расширить прототип строки методом capitalize(), чтобы его можно было вызывать непосредственно на строке, например: "string".capitalize().
Использование встроенных методов toUpperCase() и toLowerCase() запрещено.
Задача 4
Платформа: CodeWars
Название задачи: Count number of zeros from 1 to N (Подсчитайте количество нулей от 1 до N)
Ссылка на задачу: https://www.codewars.com/kata/557cffec8c3e8e55cc00010f (Нажмите на строку)
Сложность: 7 (7 / 8) kyu
Уже решили (На момент написания статьи): 863 из 1,003
Тэги: Алгоритмы
Оригинальное описание задачи:
Create an algorithm to count the number of zeros that appear between 1 and N.
Examples:
There are 2 zeros from 1 to 20: 10, 20
There are 11 zeros from 1 to 100: 10, 20, 30, 40, 50, 60, 70, 80, 90, 100
countZeros(10); // returns 1
countZeros(100); // returns 11
countZeros(200); // returns 31
Пояснение задачи:
Задача заключается в подсчете количества нулей, которые появляются в числах от 1 до N включительно.
Примеры:
От 1 до 20 есть 2 нуля: 10 и 20.
От 1 до 100 есть 11 нулей: 10, 20, 30, 40, 50, 60, 70, 80, 90, 100.
Пример вызова функции:
countZeros(10) вернет 1.
countZeros(100) вернет 11.
countZeros(200) вернет 31.
Задача 5
Платформа: CodeWars
Название задачи: Hexagon Beam Max Sum (Максимальная сумма шестигранных балок)
Ссылка на задачу: https://www.codewars.com/kata/5ecc1d68c6029000017d8aaf (Нажмите на строку)
Сложность: 6 (6 / 8) kyu
Уже решили (На момент написания статьи): 129 из 318
Тэги: Головоломки, Массивы, Алгоритмы
Оригинальное описание задачи:
In this kata, your task is to find the maximum sum of any straight "beam" on a hexagonal grid, where its cell values are determined by a finite integer sequence seq
.
In this context, a beam is a linear sequence of cells in any of the 3 pairs of opposing sides of a hexagon. We'll refer to the sum of a beam's integer values as the "beam value".
Refer to the example below for further clarification.
Input
Your function will receive two arguments:
n
: the length of each side of the hexagonal grid, where 2 <= n < 100
seq
: a finite sequence of (positive and/or nonpositive) integers with a length >= 1
The sequence is used to populate the cells of the grid and should be repeated as necessary.
The sequence type will be dependent on the language (e.g. array for JavaScript, tuple for Python, etc.).
Output
Your function should return the largest beam value as an integer.
Test Example
In our test example, we have the following arguments:
n = 4
seq = [2, 4, 6, 8]
Below is the hexagonal grid determined by our example arguments;
the sequence repeats itself from left to right, then top to bottom.
2 4 6 8
2 4 6 8 2
4 6 8 2 4 6
8 2 4 6 8 2 4
6 8 2 4 6 8
2 4 6 8 2
4 6 8 2
The three diagrams below illustrate the "beams" in the hexagonal grid above.
In the grid on the left, the horizontal beams are highlighted by their likewise colors,
and the value of each beam is given to its right.
In the center grid, the beams highlighted go from upper-right to bottom-left (and vice-versa).
In the grid on the right, the beams highlighted go from upper-left to bottom-right (and vice-versa).
2 4 6 8 -> 20 2 4 6 8 2 4 6 8
2 4 6 8 2 -> 22 2 4 6 8 2 2 4 6 8 2
4 6 8 2 4 6 -> 30 4 6 8 2 4 6 4 6 8 2 4 6
8 2 4 6 8 2 4 -> 34 8 2 4 6 8 2 4 8 2 4 6 8 2 4
6 8 2 4 6 8 -> 34 6 8 2 4 6 8 6 8 2 4 6 8
2 4 6 8 2 -> 22 2 4 6 8 2 2 4 6 8 2
4 6 8 2 -> 20 4 6 8 2 4 6 8 2
The maximum beam value in our example is 34.
Test Specifications
- All inputs will be valid
- Full Test Suite:
12
fixed tests and 100
random tests
- For JavaScript,
module
and require
are disabled [NOTE: if you would like to suggest a module that you think should be permitted for JS, please leave a note in the Discourse section]
If you enjoyed this kata, be sure to check out my other katas
Пояснение задачи:
Задача заключается в нахождении максимальной суммы значений в любой прямой "балке" на гексагональной сетке, где значения ячеек определяются конечной последовательностью целых чисел.
"Балка" — это линейная последовательность ячеек, расположенная вдоль одной из трёх пар противоположных сторон шестиугольника.
Наша задача — найти максимальную сумму значений в балке.
Пример:
Для входа: n = 4 (размер стороны сетки) seq = [2, 4, 6, 8]
Получится такая сетка: 2 4 6 8 2 4 6 8 2 4 6 8 2 4 6 8 2 4 6 8 2 4 6 8 2 4 6 8 2 4 6 8 2 4 6 8 2
Максимальная сумма балки в примере — 34.
Задача 6
Платформа: CodeWars
Название задачи: Department scheduler [simple] (Планировщик отделов [простой])
Ссылка на задачу: https://www.codewars.com/kata/5558bb17f7ba7532de0000aa (Нажмите на строку)
Сложность: 5 (5 / 8) kyu
Уже решили (На момент написания статьи): 86 из 149
Тэги: Планирование, Алгоритмы
Оригинальное описание задачи:
You are the Head of the Department and your responsibilities include creating monthly schedules for your employees.
Your employees work in shifts. Each shift is 24 hours. Employment policy prohibits employee from working more than 24 hours in a row, so one employee cannot have two consecutive shifts.
There must be n
people at work each day. Arrange employees over the schedule so that their workload is equal or differs from others minimally (i. e. difference between any two employees must not exceed one shift).
If it is not possible to ensure one employee does not work two days in a row due to insufficient staff, return None/null/nil
.
Arguments
- Array of employee names as strings. Example:
["Smith", "Jones", "Gonzalez", "White", "Jackon", "Taylor"]
.
- Month and year in
"MMYYYY"
format.
n
, the number of employees per shift.
Output
- Array of arrays, each representing a day in the given month. Each day array should contain exactly
n
employee names, representing the employees scheduled for that day.
- Or
None/null/nil
, if it is impossible to create a valid schedule.
#Example
Employees Array: ["Smith", "Jones", "Gonzalez", "White", "Jackon", "Taylor"]
Month and year: "022015"
Number of employees per shift: 3
may return
[["Smith", "Jones", "Gonzalez"],
["White", "Jackson", "Taylor"],
["Jones", "Smith", "Gonzalez"],
["Taylor", "White", "Jackson"],
["Smith", "Jones", "Gonzalez"],
["White", "Jackson", "Taylor"],
["Jones", "Smith", "Gonzalez"],
["Taylor", "White", "Jackson"],
["Smith", "Jones", "Gonzalez"],
["White", "Jackson", "Taylor"],
["Jones", "Smith", "Gonzalez"],
["Taylor", "White", "Jackson"],
["Smith", "Jones", "Gonzalez"],
["White", "Jackson", "Taylor"],
["Jones", "Smith", "Gonzalez"],
["Taylor", "White", "Jackson"],
["Smith", "Jones", "Gonzalez"],
["White", "Jackson", "Taylor"],
["Jones", "Smith", "Gonzalez"],
["Taylor", "White", "Jackson"],
["Smith", "Jones", "Gonzalez"],
["White", "Jackson", "Taylor"],
["Jones", "Smith", "Gonzalez"],
["Taylor", "White", "Jackson"],
["Smith", "Jones", "Gonzalez"],
["White", "Jackson", "Taylor"],
["Jones", "Smith", "Gonzalez"],
["Taylor", "White", "Jackson"]]
Here each employee has 14 shifts and no one has two consecutive shifts.
Note: rules for leap years do apply, so keep that in mind ;)
Пояснение задачи:
Задачей является создание ежемесячного расписания для сотрудников отдела.
Работники работают посменно, каждая смена длится 24 часа.
Политика компании запрещает сотрудникам работать две смены подряд, чтобы избежать переработки.
Требуется распределить работников по сменам так, чтобы нагрузка была равномерно распределена, и никто не работал две смены подряд.
Если невозможно обеспечить равномерное распределение из-за недостатка персонала, вернуть None/null/nil.
Входные аргументы:
Массив имен сотрудников.
Месяц и год в формате "MMYYYY".
Количество сотрудников на смену.
Выходные данные:
Массив массивов, представляющий дни месяца.
Каждый день должен содержать ровно n имен сотрудников, назначенных на этот день.
Или None/null/nil, если невозможно создать корректное расписание.
Пример:
Сотрудники: ["Smith", "Jones", "Gonzalez", "White", "Jackon", "Taylor"]
Месяц и год: "022015"
Количество сотрудников на смену: 3
Может вернуть:
[ ["Smith", "Jones", "Gonzalez"], ["White", "Jackson", "Taylor"], ["Jones", "Smith", "Gonzalez"], ["Taylor", "White", "Jackson"], ... ]
Каждый сотрудник имеет 14 смен, и никто не работает две смены подряд.
Новое в конфигурации Algo1C:

https://github.com/SalavatovNabiulla/Algo1C
- 0.5 : Добавлена возможность выбирать контекст исполнения кода, например: НаСервере или НаКлиенте
- 0.4 : Исправлена ошибка при выводе содержимого исключения
- 0.3 : Добавлена возможность сохранять и загружать задачи; Внесены небольшие изменения в интерфейс
- 0.2 : Исправлена ошибка при выводе результата (Отдельная благодарность SAShikutkin)
Заключение:
Codewars
8 kyu - Самая простая задача
7 kyu - ...
6 kyu - ...
5 kyu - ...
4 kyu - ...
3 kyu - ...
2 kyu - ...
1 kyu - Самая сложная задач
Платформа: CodeWars
Название задачи: Count the number of cubes with paint on (Подсчитайте количество кубиков, на которых нанесена краска.)
Ссылка на задачу: https://www.codewars.com/kata/5763bb0af716cad8fb000580 (Нажмите на строку)
Сложность: 8 (8 / 8) kyu
Уже решили (На момент написания статьи): 4,439 из 12,104
Тэги: Головоломки
Оригинальное описание задачи:
Upon arriving at an interview, you are presented with a solid blue cube. The cube is then dipped in red paint, coating the entire surface of the cube. The interviewer then proceeds to cut through the cube in all three dimensions a certain number of times.
Your function takes as parameter the number of times the cube has been cut. You must return the number of smaller cubes created by the cuts that have at least one red face.
To make it clearer, the picture below represents the cube after (from left to right) 0, 1 and 2 cuts have been made.
Examples: If we cut the cube 2 times, the function should return 26 If we cut the cube 4 times, the function should return 98
Пояснение задачи:
Задача просит нас рассчитать количество маленьких кубиков, которые имеют хотя бы одну красную сторону, после того как большой куб был разрезан на более мелкие кусочки.
Большой куб изначально покрашен красным цветом снаружи, а затем его разрезают несколько раз вдоль каждой оси.
Наша функция должна принимать количество сделанных разрезов и возвращать количество маленьких кубиков с красной стороной.
Платформа: CodeWars
Название задачи: Logical calculator (Логический калькулятор)
Ссылка на задачу: https://www.codewars.com/kata/57096af70dad013aa200007b (Нажмите на строку)
Сложность: 8 (8 / 8) kyu
Уже решили (На момент написания статьи): 4,009 из 9,348
Тэги: Массивы, Фундаментальные
Оригинальное описание задачи:
Your Task
Given an array of Boolean values and a logical operator, return a Boolean result based on sequentially applying the operator to the values in the array.
Examples
- booleans =
[True, True, False]
, operator ="AND"
True
AND
True
->True
True
AND
False
->False
- return
False
- booleans =
[True, True, False]
, operator ="OR"
True
OR
True
->True
True
OR
False
->True
- return
True
- booleans =
[True, True, False]
, operator ="XOR"
True
XOR
True
->False
False
XOR
False
->False
- return
False
Input
- an array of Boolean values
(1 <= array_length <= 50)
- a string specifying a logical operator:
"AND"
,"OR"
,"XOR"
Output
A Boolean value (
True
orFalse
).
Пояснение задачи:
Задача заключается в применении логической операции к массиву булевых значений.
Операция выполняется последовательно над всеми элементами массива.
Возможные операции: "AND", "OR", "XOR".
Необходимо вернуть результат логического выражения.
Примеры:
Массив: [True, True, False], операция: "AND"
True AND True -> True
True AND False -> False
Вернуть False
Массив: [True, True, False], операция: "OR"
True OR True -> True
True OR False -> True
Вернуть True
Массив: [True, True, False], операция: "XOR"
True XOR True -> False
False XOR False -> False
Вернуть False
Ввод: Массив булевых значений длиной от 1 до 50 Строка, определяющая логическую операцию: "AND", "OR", "XOR"
Вывод: Булево значение True или False
Платформа: CodeWars
Название задачи: Capitalize first letter of a string (Заглавная буква первой буквы строки)
Ссылка на задачу: https://www.codewars.com/kata/56c19316e8b139dff60006da (Нажмите на строку)
Сложность: 7 (7 / 8) kyu
Уже решили (На момент написания статьи): 1,188 из 1,213
Тэги: Фундаментальные, Объектно-Ориентированное программирование, Регулярные выражения
Оригинальное описание задачи:
Capitalize First Letter of a String
Write a function
capitalize()
which capitalizes the first letter (if any) of the given string. For example:
Input Output string
String
hello World
Hello World
i love codewars
I love codewars
This sentence is already capitalized
This sentence is already capitalized
0123the first character of this sentence is not a letter
0123the first character of this sentence is not a letter
JavaScript / CoffeeScript: Extend the
String
prototype with a methodcapitalize()
so you can call it on a string like so:"string".capitalize()
. Learn about inheritance and the prototype chain.Furthermore, the built-in string methods
toUpperCase()
andtoLowerCase()
are disabled for this Kata.
Пояснение задачи:
Задача заключается в написании функции capitalize(), которая преобразует первый символ строки в заглавный, оставляя остальную часть строки без изменений.
Функция должна обрабатывать различные типы входных данных, включая строки с цифрами и специальные символы.
Примеры:
Вход: "string" → Выход: "String"
Вход: "hello World" → Выход: "Hello World"
Вход: "i love codewars" → Выход: "I love codewars"
Вход: "This sentence is already capitalized" → Выход: "This sentence is already capitalized"
Вход: "0123the first character of this sentence is not a letter" → Выход: "0123the first character of this sentence is not a letter"
Для JavaScript/CoffeeScript нужно расширить прототип строки методом capitalize(), чтобы его можно было вызывать непосредственно на строке, например: "string".capitalize().
Использование встроенных методов toUpperCase() и toLowerCase() запрещено.
Платформа: CodeWars
Название задачи: Count number of zeros from 1 to N (Подсчитайте количество нулей от 1 до N)
Ссылка на задачу: https://www.codewars.com/kata/557cffec8c3e8e55cc00010f (Нажмите на строку)
Сложность: 7 (7 / 8) kyu
Уже решили (На момент написания статьи): 863 из 1,003
Тэги: Алгоритмы
Оригинальное описание задачи:
Create an algorithm to count the number of zeros that appear between 1 and N.
Examples:
There are 2 zeros from 1 to 20: 10, 20
There are 11 zeros from 1 to 100: 10, 20, 30, 40, 50, 60, 70, 80, 90, 100
countZeros(10); // returns 1 countZeros(100); // returns 11 countZeros(200); // returns 31
Пояснение задачи:
Задача заключается в подсчете количества нулей, которые появляются в числах от 1 до N включительно.
Примеры:
От 1 до 20 есть 2 нуля: 10 и 20.
От 1 до 100 есть 11 нулей: 10, 20, 30, 40, 50, 60, 70, 80, 90, 100.
Пример вызова функции:
countZeros(10) вернет 1.
countZeros(100) вернет 11.
countZeros(200) вернет 31.
Платформа: CodeWars
Название задачи: Hexagon Beam Max Sum (Максимальная сумма шестигранных балок)
Ссылка на задачу: https://www.codewars.com/kata/5ecc1d68c6029000017d8aaf (Нажмите на строку)
Сложность: 6 (6 / 8) kyu
Уже решили (На момент написания статьи): 129 из 318
Тэги: Головоломки, Массивы, Алгоритмы
Оригинальное описание задачи:
In this kata, your task is to find the maximum sum of any straight "beam" on a hexagonal grid, where its cell values are determined by a finite integer sequence
seq
.
In this context, a beam is a linear sequence of cells in any of the 3 pairs of opposing sides of a hexagon. We'll refer to the sum of a beam's integer values as the "beam value".
Refer to the example below for further clarification.Input
Your function will receive two arguments:
n
: the length of each side of the hexagonal grid, where2 <= n < 100
seq
: a finite sequence of (positive and/or nonpositive) integers with a length >= 1
The sequence is used to populate the cells of the grid and should be repeated as necessary.
The sequence type will be dependent on the language (e.g. array for JavaScript, tuple for Python, etc.).Output
Your function should return the largest beam value as an integer.
Test Example
![]()
In our test example, we have the following arguments: n = 4 seq = [2, 4, 6, 8] Below is the hexagonal grid determined by our example arguments; the sequence repeats itself from left to right, then top to bottom. 2 4 6 8 2 4 6 8 2 4 6 8 2 4 6 8 2 4 6 8 2 4 6 8 2 4 6 8 2 4 6 8 2 4 6 8 2 The three diagrams below illustrate the "beams" in the hexagonal grid above. In the grid on the left, the horizontal beams are highlighted by their likewise colors, and the value of each beam is given to its right. In the center grid, the beams highlighted go from upper-right to bottom-left (and vice-versa). In the grid on the right, the beams highlighted go from upper-left to bottom-right (and vice-versa). 2 4 6 8 -> 20 2 4 6 8 2 4 6 8 2 4 6 8 2 -> 22 2 4 6 8 2 2 4 6 8 2 4 6 8 2 4 6 -> 30 4 6 8 2 4 6 4 6 8 2 4 6 8 2 4 6 8 2 4 -> 34 8 2 4 6 8 2 4 8 2 4 6 8 2 4 6 8 2 4 6 8 -> 34 6 8 2 4 6 8 6 8 2 4 6 8 2 4 6 8 2 -> 22 2 4 6 8 2 2 4 6 8 2 4 6 8 2 -> 20 4 6 8 2 4 6 8 2 The maximum beam value in our example is 34.
Test Specifications
- All inputs will be valid
- Full Test Suite:
12
fixed tests and100
random tests- For JavaScript,
module
andrequire
are disabled [NOTE: if you would like to suggest a module that you think should be permitted for JS, please leave a note in the Discourse section]If you enjoyed this kata, be sure to check out my other katas
Пояснение задачи:
Задача заключается в нахождении максимальной суммы значений в любой прямой "балке" на гексагональной сетке, где значения ячеек определяются конечной последовательностью целых чисел.
"Балка" — это линейная последовательность ячеек, расположенная вдоль одной из трёх пар противоположных сторон шестиугольника.
Наша задача — найти максимальную сумму значений в балке.
Пример:
Для входа: n = 4 (размер стороны сетки) seq = [2, 4, 6, 8]
Получится такая сетка: 2 4 6 8 2 4 6 8 2 4 6 8 2 4 6 8 2 4 6 8 2 4 6 8 2 4 6 8 2 4 6 8 2 4 6 8 2
Максимальная сумма балки в примере — 34.
Платформа: CodeWars
Название задачи: Department scheduler [simple] (Планировщик отделов [простой])
Ссылка на задачу: https://www.codewars.com/kata/5558bb17f7ba7532de0000aa (Нажмите на строку)
Сложность: 5 (5 / 8) kyu
Уже решили (На момент написания статьи): 86 из 149
Тэги: Планирование, Алгоритмы
Оригинальное описание задачи:
You are the Head of the Department and your responsibilities include creating monthly schedules for your employees.
Your employees work in shifts. Each shift is 24 hours. Employment policy prohibits employee from working more than 24 hours in a row, so one employee cannot have two consecutive shifts.
There must be
n
people at work each day. Arrange employees over the schedule so that their workload is equal or differs from others minimally (i. e. difference between any two employees must not exceed one shift).If it is not possible to ensure one employee does not work two days in a row due to insufficient staff, return
None/null/nil
.Arguments
- Array of employee names as strings. Example:
["Smith", "Jones", "Gonzalez", "White", "Jackon", "Taylor"]
.- Month and year in
"MMYYYY"
format.n
, the number of employees per shift.Output
- Array of arrays, each representing a day in the given month. Each day array should contain exactly
n
employee names, representing the employees scheduled for that day.- Or
None/null/nil
, if it is impossible to create a valid schedule.#Example
Employees Array: ["Smith", "Jones", "Gonzalez", "White", "Jackon", "Taylor"] Month and year: "022015" Number of employees per shift: 3
may return
[["Smith", "Jones", "Gonzalez"], ["White", "Jackson", "Taylor"], ["Jones", "Smith", "Gonzalez"], ["Taylor", "White", "Jackson"], ["Smith", "Jones", "Gonzalez"], ["White", "Jackson", "Taylor"], ["Jones", "Smith", "Gonzalez"], ["Taylor", "White", "Jackson"], ["Smith", "Jones", "Gonzalez"], ["White", "Jackson", "Taylor"], ["Jones", "Smith", "Gonzalez"], ["Taylor", "White", "Jackson"], ["Smith", "Jones", "Gonzalez"], ["White", "Jackson", "Taylor"], ["Jones", "Smith", "Gonzalez"], ["Taylor", "White", "Jackson"], ["Smith", "Jones", "Gonzalez"], ["White", "Jackson", "Taylor"], ["Jones", "Smith", "Gonzalez"], ["Taylor", "White", "Jackson"], ["Smith", "Jones", "Gonzalez"], ["White", "Jackson", "Taylor"], ["Jones", "Smith", "Gonzalez"], ["Taylor", "White", "Jackson"], ["Smith", "Jones", "Gonzalez"], ["White", "Jackson", "Taylor"], ["Jones", "Smith", "Gonzalez"], ["Taylor", "White", "Jackson"]]
Here each employee has 14 shifts and no one has two consecutive shifts.
Note: rules for leap years do apply, so keep that in mind ;)
Пояснение задачи:
Задачей является создание ежемесячного расписания для сотрудников отдела.
Работники работают посменно, каждая смена длится 24 часа.
Политика компании запрещает сотрудникам работать две смены подряд, чтобы избежать переработки.
Требуется распределить работников по сменам так, чтобы нагрузка была равномерно распределена, и никто не работал две смены подряд.
Если невозможно обеспечить равномерное распределение из-за недостатка персонала, вернуть None/null/nil.
Входные аргументы:
Массив имен сотрудников.
Месяц и год в формате "MMYYYY".
Количество сотрудников на смену.
Выходные данные:
Массив массивов, представляющий дни месяца.
Каждый день должен содержать ровно n имен сотрудников, назначенных на этот день.
Или None/null/nil, если невозможно создать корректное расписание.
Пример:
Сотрудники: ["Smith", "Jones", "Gonzalez", "White", "Jackon", "Taylor"]
Месяц и год: "022015"
Количество сотрудников на смену: 3
Может вернуть:
[ ["Smith", "Jones", "Gonzalez"], ["White", "Jackson", "Taylor"], ["Jones", "Smith", "Gonzalez"], ["Taylor", "White", "Jackson"], ... ]
Каждый сотрудник имеет 14 смен, и никто не работает две смены подряд.
https://github.com/SalavatovNabiulla/Algo1C
- 0.5 : Добавлена возможность выбирать контекст исполнения кода, например: НаСервере или НаКлиенте
- 0.4 : Исправлена ошибка при выводе содержимого исключения
- 0.3 : Добавлена возможность сохранять и загружать задачи; Внесены небольшие изменения в интерфейс
- 0.2 : Исправлена ошибка при выводе результата (Отдельная благодарность SAShikutkin)
Ну что ж, пока на этом всё, надеюсь, статья была увлекательной для вас, благодарю за внимание.
Подключайтесь к решению алгоритмических задач вместе со мной, делитесь вашим мнением и решениями в комментариях, сохраняя при этом позитивный настрой!
Увидимся в новой статье!