Добро пожаловать на новую статью по решению алгоритмических задач, в которой я собрал для вас список новых задач из разных источников разной сложности, чтобы каждый смог попробовать в себя в этом увлекательном деле!
Цель статьи заключается в тренировке практик по применению различных алгоритмов, в поддержании навыка "Писать код" в тонусе ну и, само собой, немного поразвлечься!
Что было раньше:
В предыдущей части (нажмите на строку) мы решили:
- The Wide-Mouthed frog! (Лягушка с широким ртом!) (Нажмите на строку)
- Surface Area and Volume of a Box (Площадь поверхности и объем коробки) (Нажмите на строку)
- C is for Codewars (C значит Codewars) (Нажмите на строку)
- Find the First Number in Having a Certain Number of Divisors I (Найдите первое число, имеющее определенное число делителей I) (Нажмите на строку)
- Finding the Closest Maximum Values of a Function to an Upper Limit (Нахождение максимальных значений функции, наиболее близких к верхнему пределу) (Нажмите на строку)
- Exponentials as fractions (Экспоненты в виде дробей) (Нажмите на строку)
В этой части вас ждут еще более интересные алгоритмические задачи. Давайте приступим!
Решение новых задач:
Пояснение сложности задач у разных платформ:
Codewars
8 kyu - Самая простая задача
7 kyu - ...
6 kyu - ...
5 kyu - ...
4 kyu - ...
3 kyu - ...
2 kyu - ...
1 kyu - Самая сложная задач
Задача 1
Платформа: CodeWars
Название задачи: Grasshopper - Grade book (Кузнечик - Классный журнал)
Ссылка на задачу: https://www.codewars.com/kata/55cbd4ba903825f7970000f5 (Нажмите на строку)
Сложность: 8 (8 / 8) kyu
Уже решили (На момент написания статьи): 39,783 из 124,214
Тэги: Фундаментальные
Оригинальное описание задачи:
Grade book
Complete the function so that it finds the average of the three scores passed to it and returns the letter value associated with that grade.
Numerical Score
Letter Grade
90 <= score <= 100
'A'
80 <= score < 90
'B'
70 <= score < 80
'C'
60 <= score < 70
'D'
0 <= score < 60
'F'
Tested values are all between 0 and 100. Theres is no need to check for negative values or values greater than 100.
Пояснение задачи:
Задача заключается в создании функции, которая вычисляет средний балл трех оценок и возвращает соответствующую оценку в виде буквы.
Оценочные границы следующие:
От 90 до 100 — оценка 'A'
От 80 до 89 — оценка 'B'
От 70 до 79 — оценка 'C'
От 60 до 69 — оценка 'D'
От 0 до 59 — оценка 'F'
Проверяются только значения от 0 до 100, проверка на отрицательные значения или значения больше 100 не требуется.
Задача 2
Платформа: CodeWars
Название задачи: Power (Степень)
Ссылка на задачу: https://www.codewars.com/kata/562926c855ca9fdc4800005b (Нажмите на строку)
Сложность: 8 (8 / 8) kyu
Уже решили (На момент написания статьи): 2,974 из 11,889
Тэги: Ограниченные
Оригинальное описание задачи:
The goal is to create a function of two inputs number
and power
, that "raises" the number
up to power
(ie multiplies number
by itself power
times).
Examples
number_to_pwr(3, 2) # -> 9 ( = 3 * 3 )
number_to_pwr(2, 3) # -> 8 ( = 2 * 2 * 2 )
number_to_pwr(10, 6) # -> 1000000
Note: math.pow
and some others math
functions are disabled on final tests.
Пояснение задачи:
Задача заключается в создании функции, которая возводит число в степень.
То есть, если у вас есть число и степень, вы должны умножить это число на себя столько раз, сколько указано степенью.
Примеры:
number_to_pwr(3, 2) → 9 (потому что 3 * 3 = 9)
number_to_pwr(2, 3) → 8 (потому что 2 * 2 * 2 = 8)
number_to_pwr(10, 6) → 1000000 (потому что 10 * 10 * 10 * 10 * 10 * 10 = 1000000)
Обратите внимание, что в финальном тестировании некоторые математические функции, такие как math.pow, будут отключены.
Задача 3
Платформа: CodeWars
Название задачи: Reflecting Light (Отражение света)
Ссылка на задачу: https://www.codewars.com/kata/5eaf88f92b679f001423cc66 (Нажмите на строку)
Сложность: 7 (7 / 8) kyu
Уже решили (На момент написания статьи): 279 из 407
Тэги: Геометрия, Алгоритмы
Оригинальное описание задачи:
Four mirrors are placed in a way that they form a rectangle with corners at coordinates (0, 0)
, (max_x, 0)
, (0, max_y)
, and (max_x, max_y)
. A light ray enters this rectangle through a hole at the position (0, 0)
and moves at an angle of 45 degrees relative to the axes. Each time it hits one of the mirrors, it gets reflected. In the end, the light ray hits one of the rectangle's corners, and flies out. Your function must determine whether the exit point is either (0, 0)
or (max_x, max_y)
. If it is either (0, 0)
or (max_x, max_y)
, return True
and False
otherwise.
Example
For max_x = 10
and max_y = 20
, the ray goes through the following lattice points: (1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6), (7, 7), (8, 8), (9, 9), (10, 10), (9, 11), (8, 12), (7, 13), (6, 14), (5, 15), (4, 16), (3, 17), (2, 18), (1, 19), (0, 20)
.
The ray left the rectangle at position (0, 20)
, so the result is False
.
Here is an image of the light being reflected. 
Also, once completing this kata, please do not rate it based off of the difficulty level(kyu) and instead on whether you think it is a good kata.
Пояснение задачи:
Задача заключается в моделировании движения светового луча внутри прямоугольника, образованного четырьмя зеркалами. Луч света входит через точку (0,0) и движется под углом 45 градусов относительно осей.
Когда луч достигает угла прямоугольника, он выходит наружу.
Наша задача — определить, выйдет ли луч через углы (0,0)(0,0) или (max_x,max_y).
Если да, вернуть True, иначе — False.
Пример:
Для max_x=10 и max_y=20, луч проходит через следующие точки решетки: (1,1), (2,2), ..., (10,10), (9,11), ..., (0,20).
Поскольку луч вышел через точку (0,20), результат — False.
После завершения задачи просьба оценить её качество, а не уровень сложности.
Задача 4
Платформа: CodeWars
Название задачи: Reverse complement (DNA ) (Обратная комплементарная последовательность)
Ссылка на задачу: https://www.codewars.com/kata/574a7d0dca4a8a0fbe000100 (Нажмите на строку)
Сложность: 7 (7 / 8) kyu
Уже решили (На момент написания статьи): 401 из 723
Тэги: Строки, Алгоритмы
Оригинальное описание задачи:
In genetic the reverse complement of a sequence is formed by reversing the sequence and then taking the complement of each symbol.
The four nucleotides in DNA is Adenine (A), Cytosine (C), Guanine (G) and Thymine (Thymine).
- A is the complement of T
- C is the complement of G.
This is a bi-directional relation so:
- T is the complement of A
- G is the complement of C.
For this kata you need to complete the reverse complement function that take a DNA string and return the reverse complement string.
Note: You need to take care of lower and upper case. And if a sequence conatains some invalid characters you need to return "Invalid sequence".
This kata is based on the following one but with a little step in addition.
Пояснение задачи:
Задача заключается в создании функции, которая принимает последовательность ДНК и возвращает её обращённую комплементарную последовательность.
Комплементарность нуклеотидов следующая:
Аденин (A) комплементарен Тимину (T)
Цитозин (C) комплементарен Гуанину (G)
Обратная комплементарная последовательность получается путём переворота исходной последовательности и замены каждого нуклеотида на его комплементарный аналог.
Важно учитывать регистр символов и проверять наличие недопустимых символов в последовательности.
Примеры:
Исходная последовательность: "ATCG"
Перевернутая последовательность: "GCTA"
Комплементарная последовательность: "TAGC"
Если в последовательности встречаются недопустимые символы, функция должна вернуть "Invalid sequence".
Задача 5
Платформа: CodeWars
Название задачи: Simple Fun #117: Winner String (Простая забава #117: Строка победителя)
Ссылка на задачу: https://www.codewars.com/kata/589d3938b6c071e4de000011 (Нажмите на строку)
Сложность: 6 (6 / 8) kyu
Уже решили (На момент написания статьи): 39 из 39
Тэги: Головоломки
Оригинальное описание задачи:
Task
We define characters priority according to their alpahetical order and with the only exception that 'z' has a greater priority than 'a' (and only 'a'
).
A match between two strings is played in two legs, each leg consists of several rounds: in the i th round the characters in position i of each string are compared and the string whose character has a greater priority scores one point, if the characters are equal no string scores that round. The leg ends when the shorter string ends.
The first leg is played with the strings as given, while the second leg is played with the strings reversed. The string which scored more points after the two legs is declared the winner.
In case of a tie
after two legs, the winner will be the string which scored last
in the first leg
.
Example
For s1="abc",s2="aba"
, the result should be "aba"
.
leg1:
s1 s2 score(s1) score(s2)
a a 0 0
b b 0 0
c a 0 1
leg2:
s1 s2 score(s1) score(s2)
c a 0 1
b b 0 0
a a 0 0
| |
total score:0 2
So "aba" is the winner.
For s1="babadag",s2="albac"
, the result should be "albac"
.
leg1:
s1 s2 score(s1) score(s2)
b a 0 1
a l 1 0
b b 0 0
a a 0 0
d c 0 1
a
g
leg2:
s1 s2 score(s1) score(s2)
g c 0 1
a a 0 0
d b 0 1
a l 1 0
b a 0 1
a
b
| |
total score:2 5
So "albac" is the winner.
For s1="aza",s2="aaz"
, the result should be "aaz"
.
leg1:
s1 s2 score(s1) score(s2)
a a 0 0
z a 1 0
a z 0 1
leg2:
s1 s2 score(s1) score(s2)
a z 0 1
z a 1 0
a a 0 0
| |
total score:2 2
tie, but "aaz" got the last score in first leg.
So "aaz" is the winner.
Input/Output
-
[input]
string s1
A string consisting of lowercase english letters
-
[input]
string s2
A string consisting of lowercase english letters (different from s1)
-
[output]
a string
The winner of the match played according to the above rules between s1 and s2
Пояснение задачи:
Задача заключается в проведении матча между двумя строками, где сравниваются приоритеты символов в каждом раунде.
Правила игры следующие:
Символы сравниваются по своему алфавитному порядку, кроме случая, когда 'z' имеет больший приоритет, чем 'a'.
Игра состоит из двух матчей:
первый матч проводится с оригинальными строками, а второй — с перевернутыми строками.
В каждом раунде сравниваются символы на соответствующих позициях обеих строк.
Если символ первой строки имеет больший приоритет, первая строка набирает очко, и наоборот.
Если символы одинаковые, раунд не приносит очков никому.
Матч заканчивается, когда заканчивается более короткая строка.
Победителем объявляется строка, набравшая больше очков после двух матчей.
Если счет равен, побеждает та строка, которая набрала последний балл в первом матче.
Примеры:
Для s1="abc", s2="aba" победит "aba", так как она набрала больше очков в первом матче.
Для s1="babadag", s2="albac" победит "albac", так как она набрала больше очков в общем счете.
Для s1="aza", s2="aaz" победит "aaz", так как при ничьей победит та строка, которая набрала последний балл в первом матче.
Задача 6
Платформа: CodeWars
Название задачи: Formula 1 Race (Гонка Формулы 1)
Ссылка на задачу: https://www.codewars.com/kata/626d691649cb3c7acd63457b (Нажмите на строку)
Сложность: 5 (5 / 8) kyu
Уже решили (На момент написания статьи): 249 из 526
Тэги: Алгоритмы
Оригинальное описание задачи:
You are a big fan of Formula 1.
There was a race last week-end, but ... you missed the live TV. You picked on the internet a list of the events during the race, and you want to get your champion's rank at the end of the race.
An event is a pilot ID followed by a type. There are two types of events:
- 'O' : a pilot is overtaking the one just in front of him
- 'I' : a pilot had an incident... and is forced to quit the race (and subsequently all pilots after this one gain one rank)
The list of events is passed as a string where events are separated with a space, first event first. e.g: "2 O 12 I" means the pilot#2 overtook, then the pilot#12 had an incident.
Your function will return the rank of your champion at the end of the race, given your champion's ID (as int) and the list of events. Return -1 if your champion had an incident.
NOTES:
- there are 20 positions when the race starts (from 1 to 20, 1 being the one in front),
- therefore, the rank of a pilot, at start and during the race, is actually his/her position (first pilot at position 1, etc...),
- each pilot ID is his position when the races starts,
- all events in entry lists are syntactically valid.
Final tests contains about 20 fixed events, and 100 random tests with race length between 10 to 30 events. In the tests (fixed and random): the leading pilot never overtakes, and after having an incident, the pilot never appears in further events.
Enjoy !
Thanks to the Best french developer Contest 2019
Пояснение задачи:
Ты большой поклонник Формулы 1. На прошлой неделе проходила гонка, которую ты пропустил.
Ты нашел в интернете список событий гонки и хочешь узнать итоговый рейтинг своего фаворита.
Каждое событие состоит из идентификатора пилота и типа события.
Существует два типа событий: 'O': пилот обогнал впереди идущего 'I': пилот попал в аварию и выбыл из гонки (все пилоты позади него поднимаются на одну позицию)
Список событий передается в виде строки, где события разделены пробелом.
Наша задача — написать функцию, которая вернет рейтинг твоего фаворита в конце гонки, зная его идентификатор и список событий. Если твой фаворит попал в аварию, вернуть -1.
Примечания:
Изначально в гонке участвуют 20 пилотов (позиции от 1 до 20, 1 — лидер).
Рейтинг пилота — это его позиция на трассе.
Каждый пилотский идентификатор соответствует стартовой позиции.
Все события в списке валидны.
Финальные тесты содержат около 20 фиксированных событий и 100 случайных тестов с длиной гонки от 10 до 30 событий. Лидирующий пилот никогда не обгоняет, а пилот, попавший в аварию, больше не участвует в событиях.
Новое в конфигурации 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
Название задачи: Grasshopper - Grade book (Кузнечик - Классный журнал)
Ссылка на задачу: https://www.codewars.com/kata/55cbd4ba903825f7970000f5 (Нажмите на строку)
Сложность: 8 (8 / 8) kyu
Уже решили (На момент написания статьи): 39,783 из 124,214
Тэги: Фундаментальные
Оригинальное описание задачи:
Grade book
Complete the function so that it finds the average of the three scores passed to it and returns the letter value associated with that grade.
Numerical Score Letter Grade 90 <= score <= 100 'A' 80 <= score < 90 'B' 70 <= score < 80 'C' 60 <= score < 70 'D' 0 <= score < 60 'F' Tested values are all between 0 and 100. Theres is no need to check for negative values or values greater than 100.
Пояснение задачи:
Задача заключается в создании функции, которая вычисляет средний балл трех оценок и возвращает соответствующую оценку в виде буквы.
Оценочные границы следующие:
От 90 до 100 — оценка 'A'
От 80 до 89 — оценка 'B'
От 70 до 79 — оценка 'C'
От 60 до 69 — оценка 'D'
От 0 до 59 — оценка 'F'
Проверяются только значения от 0 до 100, проверка на отрицательные значения или значения больше 100 не требуется.
Платформа: CodeWars
Название задачи: Power (Степень)
Ссылка на задачу: https://www.codewars.com/kata/562926c855ca9fdc4800005b (Нажмите на строку)
Сложность: 8 (8 / 8) kyu
Уже решили (На момент написания статьи): 2,974 из 11,889
Тэги: Ограниченные
Оригинальное описание задачи:
The goal is to create a function of two inputs
number
andpower
, that "raises" thenumber
up topower
(ie multipliesnumber
by itselfpower
times).Examples
number_to_pwr(3, 2) # -> 9 ( = 3 * 3 ) number_to_pwr(2, 3) # -> 8 ( = 2 * 2 * 2 ) number_to_pwr(10, 6) # -> 1000000
Note:
math.pow
and some othersmath
functions are disabled on final tests.
Пояснение задачи:
Задача заключается в создании функции, которая возводит число в степень.
То есть, если у вас есть число и степень, вы должны умножить это число на себя столько раз, сколько указано степенью.
Примеры:
number_to_pwr(3, 2) → 9 (потому что 3 * 3 = 9)
number_to_pwr(2, 3) → 8 (потому что 2 * 2 * 2 = 8)
number_to_pwr(10, 6) → 1000000 (потому что 10 * 10 * 10 * 10 * 10 * 10 = 1000000)
Обратите внимание, что в финальном тестировании некоторые математические функции, такие как math.pow, будут отключены.
Платформа: CodeWars
Название задачи: Reflecting Light (Отражение света)
Ссылка на задачу: https://www.codewars.com/kata/5eaf88f92b679f001423cc66 (Нажмите на строку)
Сложность: 7 (7 / 8) kyu
Уже решили (На момент написания статьи): 279 из 407
Тэги: Геометрия, Алгоритмы
Оригинальное описание задачи:
Four mirrors are placed in a way that they form a rectangle with corners at coordinates
(0, 0)
,(max_x, 0)
,(0, max_y)
, and(max_x, max_y)
. A light ray enters this rectangle through a hole at the position(0, 0)
and moves at an angle of 45 degrees relative to the axes. Each time it hits one of the mirrors, it gets reflected. In the end, the light ray hits one of the rectangle's corners, and flies out. Your function must determine whether the exit point is either(0, 0)
or(max_x, max_y)
. If it is either(0, 0)
or(max_x, max_y)
, returnTrue
andFalse
otherwise.Example
For
max_x = 10
andmax_y = 20
, the ray goes through the following lattice points:(1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6), (7, 7), (8, 8), (9, 9), (10, 10), (9, 11), (8, 12), (7, 13), (6, 14), (5, 15), (4, 16), (3, 17), (2, 18), (1, 19), (0, 20)
.The ray left the rectangle at position
(0, 20)
, so the result isFalse
.Here is an image of the light being reflected.
Also, once completing this kata, please do not rate it based off of the difficulty level(kyu) and instead on whether you think it is a good kata.
Пояснение задачи:
Задача заключается в моделировании движения светового луча внутри прямоугольника, образованного четырьмя зеркалами. Луч света входит через точку (0,0) и движется под углом 45 градусов относительно осей.
Когда луч достигает угла прямоугольника, он выходит наружу.
Наша задача — определить, выйдет ли луч через углы (0,0)(0,0) или (max_x,max_y).
Если да, вернуть True, иначе — False.
Пример:
Для max_x=10 и max_y=20, луч проходит через следующие точки решетки: (1,1), (2,2), ..., (10,10), (9,11), ..., (0,20).
Поскольку луч вышел через точку (0,20), результат — False.
После завершения задачи просьба оценить её качество, а не уровень сложности.
Платформа: CodeWars
Название задачи: Reverse complement (DNA ) (Обратная комплементарная последовательность)
Ссылка на задачу: https://www.codewars.com/kata/574a7d0dca4a8a0fbe000100 (Нажмите на строку)
Сложность: 7 (7 / 8) kyu
Уже решили (На момент написания статьи): 401 из 723
Тэги: Строки, Алгоритмы
Оригинальное описание задачи:
In genetic the reverse complement of a sequence is formed by reversing the sequence and then taking the complement of each symbol.
The four nucleotides in DNA is Adenine (A), Cytosine (C), Guanine (G) and Thymine (Thymine).
- A is the complement of T
- C is the complement of G.
This is a bi-directional relation so:
- T is the complement of A
- G is the complement of C.
For this kata you need to complete the reverse complement function that take a DNA string and return the reverse complement string.
Note: You need to take care of lower and upper case. And if a sequence conatains some invalid characters you need to return "Invalid sequence".
This kata is based on the following one but with a little step in addition.
Пояснение задачи:
Задача заключается в создании функции, которая принимает последовательность ДНК и возвращает её обращённую комплементарную последовательность.
Комплементарность нуклеотидов следующая:
Аденин (A) комплементарен Тимину (T)
Цитозин (C) комплементарен Гуанину (G)
Обратная комплементарная последовательность получается путём переворота исходной последовательности и замены каждого нуклеотида на его комплементарный аналог.
Важно учитывать регистр символов и проверять наличие недопустимых символов в последовательности.
Примеры:
Исходная последовательность: "ATCG"
Перевернутая последовательность: "GCTA"
Комплементарная последовательность: "TAGC"
Если в последовательности встречаются недопустимые символы, функция должна вернуть "Invalid sequence".
Платформа: CodeWars
Название задачи: Simple Fun #117: Winner String (Простая забава #117: Строка победителя)
Ссылка на задачу: https://www.codewars.com/kata/589d3938b6c071e4de000011 (Нажмите на строку)
Сложность: 6 (6 / 8) kyu
Уже решили (На момент написания статьи): 39 из 39
Тэги: Головоломки
Оригинальное описание задачи:
Task
We define characters priority according to their alpahetical order and with the only exception that 'z' has a greater priority than 'a' (and
only 'a'
).A match between two strings is played in two legs, each leg consists of several rounds: in the i th round the characters in position i of each string are compared and the string whose character has a greater priority scores one point, if the characters are equal no string scores that round. The leg ends when the shorter string ends.
The first leg is played with the strings as given, while the second leg is played with the strings reversed. The string which scored more points after the two legs is declared the winner.
In case of a
tie
after two legs, the winner will be the string whichscored last
in thefirst leg
.Example
For
s1="abc",s2="aba"
, the result should be"aba"
.leg1: s1 s2 score(s1) score(s2) a a 0 0 b b 0 0 c a 0 1 leg2: s1 s2 score(s1) score(s2) c a 0 1 b b 0 0 a a 0 0 | | total score:0 2 So "aba" is the winner.
For
s1="babadag",s2="albac"
, the result should be"albac"
.leg1: s1 s2 score(s1) score(s2) b a 0 1 a l 1 0 b b 0 0 a a 0 0 d c 0 1 a g leg2: s1 s2 score(s1) score(s2) g c 0 1 a a 0 0 d b 0 1 a l 1 0 b a 0 1 a b | | total score:2 5 So "albac" is the winner.
For
s1="aza",s2="aaz"
, the result should be"aaz"
.leg1: s1 s2 score(s1) score(s2) a a 0 0 z a 1 0 a z 0 1 leg2: s1 s2 score(s1) score(s2) a z 0 1 z a 1 0 a a 0 0 | | total score:2 2 tie, but "aaz" got the last score in first leg. So "aaz" is the winner.
Input/Output
[input]
strings1
A string consisting of lowercase english letters
[input]
strings2
A string consisting of lowercase english letters (different from s1)
[output]
a stringThe winner of the match played according to the above rules between s1 and s2
Пояснение задачи:
Задача заключается в проведении матча между двумя строками, где сравниваются приоритеты символов в каждом раунде.
Правила игры следующие:
Символы сравниваются по своему алфавитному порядку, кроме случая, когда 'z' имеет больший приоритет, чем 'a'.
Игра состоит из двух матчей:
первый матч проводится с оригинальными строками, а второй — с перевернутыми строками.
В каждом раунде сравниваются символы на соответствующих позициях обеих строк.
Если символ первой строки имеет больший приоритет, первая строка набирает очко, и наоборот.
Если символы одинаковые, раунд не приносит очков никому.
Матч заканчивается, когда заканчивается более короткая строка.
Победителем объявляется строка, набравшая больше очков после двух матчей.
Если счет равен, побеждает та строка, которая набрала последний балл в первом матче.
Примеры:
Для s1="abc", s2="aba" победит "aba", так как она набрала больше очков в первом матче.
Для s1="babadag", s2="albac" победит "albac", так как она набрала больше очков в общем счете.
Для s1="aza", s2="aaz" победит "aaz", так как при ничьей победит та строка, которая набрала последний балл в первом матче.
Платформа: CodeWars
Название задачи: Formula 1 Race (Гонка Формулы 1)
Ссылка на задачу: https://www.codewars.com/kata/626d691649cb3c7acd63457b (Нажмите на строку)
Сложность: 5 (5 / 8) kyu
Уже решили (На момент написания статьи): 249 из 526
Тэги: Алгоритмы
Оригинальное описание задачи:
You are a big fan of Formula 1.
There was a race last week-end, but ... you missed the live TV. You picked on the internet a list of the events during the race, and you want to get your champion's rank at the end of the race.
An event is a pilot ID followed by a type. There are two types of events:
- 'O' : a pilot is overtaking the one just in front of him
- 'I' : a pilot had an incident... and is forced to quit the race (and subsequently all pilots after this one gain one rank)
The list of events is passed as a string where events are separated with a space, first event first. e.g: "2 O 12 I" means the pilot#2 overtook, then the pilot#12 had an incident.
Your function will return the rank of your champion at the end of the race, given your champion's ID (as int) and the list of events. Return -1 if your champion had an incident.
NOTES:
- there are 20 positions when the race starts (from 1 to 20, 1 being the one in front),
- therefore, the rank of a pilot, at start and during the race, is actually his/her position (first pilot at position 1, etc...),
- each pilot ID is his position when the races starts,
- all events in entry lists are syntactically valid.
Final tests contains about 20 fixed events, and 100 random tests with race length between 10 to 30 events. In the tests (fixed and random): the leading pilot never overtakes, and after having an incident, the pilot never appears in further events.
Enjoy !
Thanks to the Best french developer Contest 2019
Пояснение задачи:
Ты большой поклонник Формулы 1. На прошлой неделе проходила гонка, которую ты пропустил.
Ты нашел в интернете список событий гонки и хочешь узнать итоговый рейтинг своего фаворита.
Каждое событие состоит из идентификатора пилота и типа события.
Существует два типа событий: 'O': пилот обогнал впереди идущего 'I': пилот попал в аварию и выбыл из гонки (все пилоты позади него поднимаются на одну позицию)
Список событий передается в виде строки, где события разделены пробелом.
Наша задача — написать функцию, которая вернет рейтинг твоего фаворита в конце гонки, зная его идентификатор и список событий. Если твой фаворит попал в аварию, вернуть -1.
Примечания:
Изначально в гонке участвуют 20 пилотов (позиции от 1 до 20, 1 — лидер).
Рейтинг пилота — это его позиция на трассе.
Каждый пилотский идентификатор соответствует стартовой позиции.
Все события в списке валидны.
Финальные тесты содержат около 20 фиксированных событий и 100 случайных тестов с длиной гонки от 10 до 30 событий. Лидирующий пилот никогда не обгоняет, а пилот, попавший в аварию, больше не участвует в событиях.
https://github.com/SalavatovNabiulla/Algo1C
- 0.5 : Добавлена возможность выбирать контекст исполнения кода, например: НаСервере или НаКлиенте
- 0.4 : Исправлена ошибка при выводе содержимого исключения
- 0.3 : Добавлена возможность сохранять и загружать задачи; Внесены небольшие изменения в интерфейс
- 0.2 : Исправлена ошибка при выводе результата (Отдельная благодарность SAShikutkin)
Ну что ж, пока на этом всё, надеюсь, статья была увлекательной для вас, благодарю за внимание.
Подключайтесь к решению алгоритмических задач вместе со мной, делитесь вашим мнением и решениями в комментариях, сохраняя при этом позитивный настрой!
Увидимся в новой статье!