Сборник представляет собой подборку алгоритмических вызовов различной степени сложности — от базовых для новичков до продвинутых для опытных инженеров. Ключевая задача — глубокое погружение в алгоритмическое мышление, оттачивание мастерства в создании оптимального и поддерживаемого кода, а также захватывающий процесс решения нетривиальных интеллектуальных задач.
Раннее:
В предыдущей части мы решили:
- Thinkful - Logic Drills: Red and bumpy (Логические упражнения для размышлений: красные и неровные)
- Buying a car (Покупка автомобиля)
- Playing with passphrases (Игра с ключевыми фразами)
- Statistics for an Athletic Association (Статистика для спортивной ассоциации)
- Ship of Theseus (Корабль Тесея)
Новые задачи:
Первая задача
Название: How Many Lonely Letters? (Сколько одиноких писем?)
Ссылка: https://www.codewars.com/kata/69cda5b85599f307742ce70a
Сложность: 7 kyu
Уже решили (На момент написания статьи): 43 из 131
Тэги: Strings, Fundamentals, Algorithms
Оригинальное описание:
Task Write a function `countLonelyLetters(text)` that counts how many letters in a string are lonely.
A letter is lonely when:
1. It appears exactly once in the whole string.
2. Its alphabetical neighbors are both absent from the string.
For example:
- `d` is not lonely if `c` or `e` also appears somewhere in the text.
- `m` is lonely if `l`, `m`, and `n` are handled like this:
- `m` appears once
- `l` does not appear
- `n` does not appear
Rules
- Ignore letter case.
- Ignore all non-letter characters.
- Work only with English letters `a-z`.
Examples:
countLonelyLetters("ad") //2
countLonelyLetters("abc") // 0
countLonelyLetters("Hello, World!") //3
countLonelyLetters("A-dA") // 1
countLonelyLetters("zz") // 0
Объяснение:
Функция `countLonelyLetters должна посчитать количество букв, которые одновременно:
- встречаются ровно один раз в строке,
- отсутствуют оба соседних символа в алфавитном порядке.
Алгоритм работы функции:
1. Преобразуем строку в нижний регистр, чтобы игнорировать регистр символов.
2. Удаляем все символы, кроме английских букв (`a-z`), оставляя только буквы.
3. Для каждой буквы проверяем следующие условия:
- Буква встречается ровно один раз в строке.
- Буквы, стоящие слева и справа от неё в алфавите, отсутствуют в строке.
Например, буква `m` будет считаться одинокой, если в строке нет букв `l` и `n`.
Пример пошагового рассмотрения строки:
Пусть дана строка "Hello, World!"
- Приведём строку к нижнему регистру: "hello world"
- Очистим строку от знаков препинания и пробелов: "helloworld"
- Перебираем каждую букву:
- h: соседние буквы `g` и `i` присутствуют, значит буква не одинокая.
- e: соседи `d` и `f` присутствуют, буква не одинокая.
- l: соседи `k` и `m` отсутствуют, буква одинокая.
- l: соседние буквы уже проверялись, пропускаем.
- o: соседи `p` и `q` присутствуют, буква не одинокая.
- w: соседи `v` и `x` отсутствуют, буква одинокая.
- r: соседи `q` и `s` присутствуют, буква не одинокая.
- d: соседи `c` и `e` присутствуют, буква не одинокая.
Таким образом, в строке две одиночные буквы: `l` и `w`.
Вторая задача
Название: Sort by binary ones (Сортировка по двоичным единицам)
Ссылка: https://www.codewars.com/kata/59eb28fb0a2bffafbb0000d6
Сложность: 7 kyu
Уже решили (На момент написания статьи): 1 302 из 6 581
Тэги: Arrays, Lists, Algorithms, Sorting, Binary, Bits
Оригинальное описание:
In this example, you need to implement a function that sorts a list of integers based on their binary representation.
The rules are simple:
1. sort the list based on the amount of `1`s in the binary representation of each number.
2. if two numbers have the same amount of `1`s, the shorter string goes first. (ex: "11" goes before "101" when sorting 3 and 5 respectively)
3. if the strings have the same length, lower decimal number goes first. (ex: 21 = "10101" and 25 = "11001", then 21 goes first as it's lower)
Examples:
- Input: [1,15,5,7,3]
- ( in binary strings is: ["1", "1111", "101", "111", "11"])
- Output: [15, 7, 3, 5, 1]
- (and after _sortByBinaryOnes_ is: ["1111", "111", "11", "101", "1"])
Объяснение:
Задача требует реализовать функцию сортировки списка целых чисел, основанную на количестве единиц («единиц») в двоичном представлении каждого числа.
Основные правила сортировки:
1. Сортировка по количеству единиц: сначала сортируем числа по количеству единиц в их двоичной записи. Число с меньшим количеством единиц должно идти раньше.
Пример:
[1, 15, 5, 7, 3]
Двоичные представления: ["1", "1111", "101", "111", "11"]
Сортировка по количеству единиц даст: [15, 7, 3, 5, 1]
2. При равенстве количества единиц:
- Если два числа имеют одинаковое количество единиц, сортируем по длине строки двоичного представления. Короткая строка идёт первой.
Пример:
21 (10101) и 25 (11001)
Количество единиц одинаково (5), но длина строки разная: "10101" короче, значит оно идёт первым.
3. При совпадении длины строки:
- Если длина строк одинакова, сортируем по числовому значению самого числа. Меньшее число идёт раньше.
Пример:
19 (10011) и 23 (10111)
Оба числа имеют длину 5, но 19 меньше, значит оно идёт первым.
Алгоритм решения:
1. Преобразуем каждое число в строку его двоичного представления.
2. Для каждой строки считаем количество единиц.
3. Сортируем список по трём критериям:
- Сначала по количеству единиц.
- Затем по длине строки (если количество единиц совпадает).
- Наконец, по числовому значению числа (если оба предыдущих критерия совпадают).
Пример:
Вход: [1, 15, 5, 7, 3]
Двоичные представления: ["1", "1111", "101", "111", "11"]
Сортировка:
- 15 → "1111"
- 7 → "111"
- 3 → "11"
- 5 → "101"
- 1 → "1"
Третья задача
Название Easy wallpaper (Простые обои)
Ссылка: https://www.codewars.com/kata/567501aec64b81e252000003
Сложность: 7 kyu
Уже решили (На момент написания статьи): 7 603 из 50 074
Тэги: Fundamentals
Оригинальное описание:
John wants to decorate the walls of a room with wallpaper. He wants a fool-proof method for getting it right.
John knows that the rectangular room has a length of `l` meters, a width of `w` meters, a height of `h` meters.
The standard width of the rolls he wants to buy is `52` centimeters.
The length of a roll is `10` meters.
He bears in mind however, that it’s best to have an extra length of wallpaper handy in case of mistakes or miscalculations so he wants to buy a length 15% greater than the one he needs.
Last time he did these calculations he got a headache, so could you help John?
Task
Your function `wallpaper(l, w, h)` should return as a plain English word in lower case the number of rolls he must buy.
Example:
`wallpaper(4.0, 3.5, 3.0) should return "ten"`
`wallpaper(0.0, 3.5, 3.0) should return "zero"`
Notes:
- all rolls (even with incomplete width) are put edge to edge
- 0 <= l, w, h (floating numbers); it can happens that `w * h * l` is zero
- the integer `r` (number of rolls) will always be less or equal to 20
- FORTH: the number of rolls will be a *positive or null integer* (not a plain English word; this number can be greater than 20)
- In Coffeescript, Javascript, Python, Ruby and Scala the English numbers are preloaded and can be accessed as:
numbers= ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven", "twelve","thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen", "twenty"]
- For other languages it is not preloaded and you can instead copy the above list if you desire.
Объяснение:
Задача состоит в том, чтобы помочь Джону рассчитать необходимое количество рулонов обоев для оклейки стен комнаты, учитывая особенности выбора ширины рулона и запас длины.
Основные условия задачи:
- Даны размеры комнаты: длина (`l`), ширина (`w`) и высота (`h`).
- Стандартная ширина рулона обоев составляет 52 см, что эквивалентно 0.52 метра.
- Длина рулона — 10 метров.
- Для удобства и учёта возможных ошибок Джон хочет приобрести обои длиной на 15% больше, чем реально потребуется.
- Рулоны укладываются друг рядом с другом по ширине, и остаток ширины рулона учитывается при подсчёте необходимого количества рулонов.
Подход к решению:
1. Вычисляем общую площадь стен:
Площадь стен рассчитывается как сумма площадей четырёх стен: две стены длиной `l`, две стены шириной `w`.
Формула площади одной стены:
{Площадь стены} ={длина} * {высота}
Таким образом, общая площадь стен:
{Общая площадь} = 2 * (l * h) + 2 * (w * h)
2. Переводим ширину рулона в метры и округляем вверх:
Поскольку ширина рулона дана в сантиметрах, переводим её в метры и округляем до ближайшего целого числа метров (так как рулон укладывается целиком).
Округление вверх позволяет учесть возможную неполную ширину рулона.
3. Рассчитываем длину обоев, необходимую с учётом запаса:
Общая длина обоев, необходимая для покрытия стен, умножается на коэффициент запаса (115%, или 1.15).
4. Определяем количество рулонов:
Количество рулонов равно целой части от деления общей необходимой длины обоев на длину одного рулона.
Если остаток после деления есть, добавляем ещё один рулон.
Пример расчёта:
Для комнаты размером `4.0 м × 3.5 м × 3.0 м`: - Общая площадь стен: 2 * (4.0 * 3.0) + 2 * (3.5 * 3.0) = 24 + 21 = 45 \{кв. м}
Четвертая задача
Название: Speed Control (Контроль скорости)
Ссылка: https://www.codewars.com/kata/56484848ba95170a8000004d
Сложность: 7 kyu
Уже решили (На момент написания статьи): 17 080 из 86 979
Тэги: Fundamentals, Mathematics
Оригинальное описание:
In John's car the GPS records every `s` seconds the distance travelled from an origin (distances are measured in an arbitrary but consistent unit).
For example, below is part of a record with `s = 15`: x = [0.0, 0.19, 0.5, 0.75, 1.0, 1.25, 1.5, 1.75, 2.0, 2.25]
The sections are: 0.0-0.19, 0.19-0.5, 0.5-0.75, 0.75-1.0, 1.0-1.25, 1.25-1.50, 1.5-1.75, 1.75-2.0, 2.0-2.25
We can calculate John's average hourly speed on every section and we get: [45.6, 74.4, 60.0, 60.0, 60.0, 60.0, 60.0, 60.0, 60.0]
Given `s` and `x` the task is to return as an integer the "floor" of the maximum average speed per hour obtained on the sections of `x`. If x length is less than or equal to 1 return `0` since the car didn't move.
Example:
With the above data your function `gps(s, x)` should return `74` Note With floats it can happen that results depends on the operations order. To calculate hourly speed you can use: ` (3600 * delta_distance) / s`.
Happy coding!
Объяснение:
Задача состоит в следующем:
Нам даны интервалы перемещения автомобиля, измеренные через равные промежутки времени (`s` секунд), и соответствующие расстояния от начальной точки (`x`). Требуется вычислить максимальную скорость движения автомобиля за час на каждом временном интервале, округлив её вниз до ближайшего целого числа.
Алгоритм решения включает следующие шаги:
1. Проверка корректности входных данных:
Если длина массива расстояний меньше или равна единице, автомобиль не двигался, возвращаем 0.
2. Вычисление скорости на каждом интервале:
Для каждого временного интервала длиной `s` секунд рассчитываем пройденное расстояние между двумя последовательными точками. Затем вычисляем среднюю скорость на данном интервале в километрах в час, используя формулу:
3. Поиск максимальной скорости:
Из скоростей на всех интервалах выбираем наибольшую и округляем её вниз до целого числа.
Пример:
Для входных данных:
s = 15
x = [0.0, 0.19, 0.5, 0.75, 1.0, 1.25, 1.5, 1.75, 2.0, 2.25]
Интервалы:
- 0.0–0.19
- 0.19–0.5
- 0.5–0.75
- 0.75–1.0
- 1.0–1.25
- 1.25–1.5
- 1.5–1.75
- 1.75–2.0
- 2.0–2.25
Расчёт скоростей:
- Первый интервал: (0.19 - 0.0) / 15 * 3600 = 45.6
- Второй интервал: (0.5 - 0.19) / 15 * 3600 = 74.4
- Третий интервал: (0.75 - 0.5) / 15 * 3600 = 60
Пятая задача
Название: Count the Digit (Подсчитать цифру)
Ссылка: https://www.codewars.com/kata/566fc12495810954b1000030
Сложность: 7 kyu
Уже решили (На момент написания статьи): 52 744 из 156 324
Тэги: Fundamentals
Оригинальное описание:
Take an integer `n (n >= 0)` and a digit `d (0 <= d <= 9)` as an integer.
Square all numbers `k (0 <= k <= n)` between 0 and n. Count the numbers of digits `d` used in the writing of all the `k**2`. Implement the function taking `n` and `d` as parameters and returning this count.
Examples:
n = 10, d = 1 the k*k are 0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100
We are using the digit 1 in: 1, 16, 81, 100.
The total count is then 4.
The function, when given n = 25 and d = 1 as argument, should return 11 since the k*k that contain the digit 1 are: 1, 16, 81, 100, 121, 144, 169, 196, 361, 441.
So there are 11 digits 1 for the squares of numbers between 0 and 25.
Note that `121` has twice the digit 1.
Объяснение:
Задача состоит в следующем: Нам даны два параметра — целое число "n" и цифра "d" (от 0 до 9).
Необходимо вычислить, сколько раз цифра "d" встречается во всех квадратах чисел от 0 до "n".
То есть, требуется подсчитать количество цифр "d", встречающихся в записи квадратов чисел "k^2", где "k"пробегает значения от 0 до "n".
Пример:
Для "n"=10 и "d"=1: 0^2 = 0 1^2 = 1 2^2 = 4 3^2 = 9 4^2 = 16 5^2 = 25 6^2 = 36 7^2 = 49 8^2 = 64 9^2 = 81 10^2 = 100
Цифра 1 встречается в числах 1, 16, 81, 100, всего четыре раза.
Подход к решению:
Подход к решению основан на последовательном переборе всех чисел от 0 до "n", вычислении их квадратов и подсчёте количества нужных нам цифр "d" в каждой строке.
Основные шаги:
1. Перебираем числа "k"от 0 до "n".
2. Для каждого числа "k" находим его квадрат "k^2".
3. Преобразуем квадрат в строку и считаем количество нужной цифры "d".
4. Суммируем найденное количество для всех квадратов.
Примеры: - "n"= 10, "d" = 1 → результат: 4 - "n" = 25, "d" = 1 → результат: 11
Важные моменты:
- Квадраты чисел, оканчивающиеся на 0, содержат цифру 0 только в случае самого числа 0.
- Если квадрат содержит несколько одинаковых цифр "d", каждая такая цифра учитывается отдельно.
Таким образом, задача сводится к простой проверке наличия цифры "d" в каждом квадрате числа и суммированию результатов.
Итоги:
Название: How Many Lonely Letters? (Сколько одиноких писем?)
Ссылка: https://www.codewars.com/kata/69cda5b85599f307742ce70a
Сложность: 7 kyu
Уже решили (На момент написания статьи): 43 из 131
Тэги: Strings, Fundamentals, Algorithms
Оригинальное описание:
Task Write a function `countLonelyLetters(text)` that counts how many letters in a string are lonely.
A letter is lonely when:
1. It appears exactly once in the whole string.
2. Its alphabetical neighbors are both absent from the string.
For example:
- `d` is not lonely if `c` or `e` also appears somewhere in the text.
- `m` is lonely if `l`, `m`, and `n` are handled like this:
- `m` appears once
- `l` does not appear
- `n` does not appear
Rules
- Ignore letter case.
- Ignore all non-letter characters.
- Work only with English letters `a-z`.
Examples:
countLonelyLetters("ad") //2
countLonelyLetters("abc") // 0
countLonelyLetters("Hello, World!") //3
countLonelyLetters("A-dA") // 1
countLonelyLetters("zz") // 0
Объяснение:
Функция `countLonelyLetters должна посчитать количество букв, которые одновременно:
- встречаются ровно один раз в строке,
- отсутствуют оба соседних символа в алфавитном порядке.
Алгоритм работы функции:
1. Преобразуем строку в нижний регистр, чтобы игнорировать регистр символов.
2. Удаляем все символы, кроме английских букв (`a-z`), оставляя только буквы.
3. Для каждой буквы проверяем следующие условия:
- Буква встречается ровно один раз в строке.
- Буквы, стоящие слева и справа от неё в алфавите, отсутствуют в строке.
Например, буква `m` будет считаться одинокой, если в строке нет букв `l` и `n`.
Пример пошагового рассмотрения строки:
Пусть дана строка "Hello, World!"
- Приведём строку к нижнему регистру: "hello world"
- Очистим строку от знаков препинания и пробелов: "helloworld"
- Перебираем каждую букву:
- h: соседние буквы `g` и `i` присутствуют, значит буква не одинокая.
- e: соседи `d` и `f` присутствуют, буква не одинокая.
- l: соседи `k` и `m` отсутствуют, буква одинокая.
- l: соседние буквы уже проверялись, пропускаем.
- o: соседи `p` и `q` присутствуют, буква не одинокая.
- w: соседи `v` и `x` отсутствуют, буква одинокая.
- r: соседи `q` и `s` присутствуют, буква не одинокая.
- d: соседи `c` и `e` присутствуют, буква не одинокая.
Таким образом, в строке две одиночные буквы: `l` и `w`.
Название: Sort by binary ones (Сортировка по двоичным единицам)
Ссылка: https://www.codewars.com/kata/59eb28fb0a2bffafbb0000d6
Сложность: 7 kyu
Уже решили (На момент написания статьи): 1 302 из 6 581
Тэги: Arrays, Lists, Algorithms, Sorting, Binary, Bits
Оригинальное описание:
In this example, you need to implement a function that sorts a list of integers based on their binary representation.
The rules are simple:
1. sort the list based on the amount of `1`s in the binary representation of each number.
2. if two numbers have the same amount of `1`s, the shorter string goes first. (ex: "11" goes before "101" when sorting 3 and 5 respectively)
3. if the strings have the same length, lower decimal number goes first. (ex: 21 = "10101" and 25 = "11001", then 21 goes first as it's lower)
Examples:
- Input: [1,15,5,7,3]
- ( in binary strings is: ["1", "1111", "101", "111", "11"])
- Output: [15, 7, 3, 5, 1]
- (and after _sortByBinaryOnes_ is: ["1111", "111", "11", "101", "1"])
Объяснение:
Задача требует реализовать функцию сортировки списка целых чисел, основанную на количестве единиц («единиц») в двоичном представлении каждого числа.
Основные правила сортировки:
1. Сортировка по количеству единиц: сначала сортируем числа по количеству единиц в их двоичной записи. Число с меньшим количеством единиц должно идти раньше.
Пример:
[1, 15, 5, 7, 3]
Двоичные представления: ["1", "1111", "101", "111", "11"]
Сортировка по количеству единиц даст: [15, 7, 3, 5, 1]
2. При равенстве количества единиц:
- Если два числа имеют одинаковое количество единиц, сортируем по длине строки двоичного представления. Короткая строка идёт первой.
Пример:
21 (10101) и 25 (11001)
Количество единиц одинаково (5), но длина строки разная: "10101" короче, значит оно идёт первым.
3. При совпадении длины строки:
- Если длина строк одинакова, сортируем по числовому значению самого числа. Меньшее число идёт раньше.
Пример:19 (10011) и 23 (10111)
Оба числа имеют длину 5, но 19 меньше, значит оно идёт первым.
Алгоритм решения:1. Преобразуем каждое число в строку его двоичного представления.
2. Для каждой строки считаем количество единиц.
3. Сортируем список по трём критериям:
- Сначала по количеству единиц.
- Затем по длине строки (если количество единиц совпадает).
- Наконец, по числовому значению числа (если оба предыдущих критерия совпадают).Пример:
Вход: [1, 15, 5, 7, 3]
Двоичные представления: ["1", "1111", "101", "111", "11"]
Сортировка:
- 15 → "1111"
- 7 → "111"
- 3 → "11"
- 5 → "101"
- 1 → "1"
Название Easy wallpaper (Простые обои)
Ссылка: https://www.codewars.com/kata/567501aec64b81e252000003
Сложность: 7 kyu
Уже решили (На момент написания статьи): 7 603 из 50 074
Тэги: Fundamentals
Оригинальное описание:
John wants to decorate the walls of a room with wallpaper. He wants a fool-proof method for getting it right.
John knows that the rectangular room has a length of `l` meters, a width of `w` meters, a height of `h` meters.
The standard width of the rolls he wants to buy is `52` centimeters.
The length of a roll is `10` meters.
He bears in mind however, that it’s best to have an extra length of wallpaper handy in case of mistakes or miscalculations so he wants to buy a length 15% greater than the one he needs.
Last time he did these calculations he got a headache, so could you help John?
Task
Your function `wallpaper(l, w, h)` should return as a plain English word in lower case the number of rolls he must buy.
Example:
`wallpaper(4.0, 3.5, 3.0) should return "ten"`
`wallpaper(0.0, 3.5, 3.0) should return "zero"`
Notes:
- all rolls (even with incomplete width) are put edge to edge
- 0 <= l, w, h (floating numbers); it can happens that `w * h * l` is zero
- the integer `r` (number of rolls) will always be less or equal to 20
- FORTH: the number of rolls will be a *positive or null integer* (not a plain English word; this number can be greater than 20)
- In Coffeescript, Javascript, Python, Ruby and Scala the English numbers are preloaded and can be accessed as:
numbers= ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven", "twelve","thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen", "twenty"]
- For other languages it is not preloaded and you can instead copy the above list if you desire.
Объяснение:
Задача состоит в том, чтобы помочь Джону рассчитать необходимое количество рулонов обоев для оклейки стен комнаты, учитывая особенности выбора ширины рулона и запас длины.
Основные условия задачи:
- Даны размеры комнаты: длина (`l`), ширина (`w`) и высота (`h`).
- Стандартная ширина рулона обоев составляет 52 см, что эквивалентно 0.52 метра.
- Длина рулона — 10 метров.
- Для удобства и учёта возможных ошибок Джон хочет приобрести обои длиной на 15% больше, чем реально потребуется.
- Рулоны укладываются друг рядом с другом по ширине, и остаток ширины рулона учитывается при подсчёте необходимого количества рулонов.
Подход к решению:
1. Вычисляем общую площадь стен:
Площадь стен рассчитывается как сумма площадей четырёх стен: две стены длиной `l`, две стены шириной `w`.
Формула площади одной стены:
{Площадь стены} ={длина} * {высота}
Таким образом, общая площадь стен:
{Общая площадь} = 2 * (l * h) + 2 * (w * h)
2. Переводим ширину рулона в метры и округляем вверх:
Поскольку ширина рулона дана в сантиметрах, переводим её в метры и округляем до ближайшего целого числа метров (так как рулон укладывается целиком).
Округление вверх позволяет учесть возможную неполную ширину рулона.
3. Рассчитываем длину обоев, необходимую с учётом запаса:
Общая длина обоев, необходимая для покрытия стен, умножается на коэффициент запаса (115%, или 1.15).
4. Определяем количество рулонов:
Количество рулонов равно целой части от деления общей необходимой длины обоев на длину одного рулона.
Если остаток после деления есть, добавляем ещё один рулон.
Пример расчёта:
Для комнаты размером `4.0 м × 3.5 м × 3.0 м`: - Общая площадь стен: 2 * (4.0 * 3.0) + 2 * (3.5 * 3.0) = 24 + 21 = 45 \{кв. м}
Название: Speed Control (Контроль скорости)
Ссылка: https://www.codewars.com/kata/56484848ba95170a8000004d
Сложность: 7 kyu
Уже решили (На момент написания статьи): 17 080 из 86 979
Тэги: Fundamentals, Mathematics
Оригинальное описание:
In John's car the GPS records every `s` seconds the distance travelled from an origin (distances are measured in an arbitrary but consistent unit).
For example, below is part of a record with `s = 15`: x = [0.0, 0.19, 0.5, 0.75, 1.0, 1.25, 1.5, 1.75, 2.0, 2.25]
The sections are: 0.0-0.19, 0.19-0.5, 0.5-0.75, 0.75-1.0, 1.0-1.25, 1.25-1.50, 1.5-1.75, 1.75-2.0, 2.0-2.25
We can calculate John's average hourly speed on every section and we get: [45.6, 74.4, 60.0, 60.0, 60.0, 60.0, 60.0, 60.0, 60.0]
Given `s` and `x` the task is to return as an integer the "floor" of the maximum average speed per hour obtained on the sections of `x`. If x length is less than or equal to 1 return `0` since the car didn't move.
Example:
With the above data your function `gps(s, x)` should return `74` Note With floats it can happen that results depends on the operations order. To calculate hourly speed you can use: ` (3600 * delta_distance) / s`.
Happy coding!
Объяснение:
Задача состоит в следующем:
Нам даны интервалы перемещения автомобиля, измеренные через равные промежутки времени (`s` секунд), и соответствующие расстояния от начальной точки (`x`). Требуется вычислить максимальную скорость движения автомобиля за час на каждом временном интервале, округлив её вниз до ближайшего целого числа.
Алгоритм решения включает следующие шаги:
1. Проверка корректности входных данных:
Если длина массива расстояний меньше или равна единице, автомобиль не двигался, возвращаем 0.2. Вычисление скорости на каждом интервале:
Для каждого временного интервала длиной `s` секунд рассчитываем пройденное расстояние между двумя последовательными точками. Затем вычисляем среднюю скорость на данном интервале в километрах в час, используя формулу:
3. Поиск максимальной скорости:
Из скоростей на всех интервалах выбираем наибольшую и округляем её вниз до целого числа.Пример:
Для входных данных:
s = 15
x = [0.0, 0.19, 0.5, 0.75, 1.0, 1.25, 1.5, 1.75, 2.0, 2.25]Интервалы:
- 0.0–0.19
- 0.19–0.5
- 0.5–0.75
- 0.75–1.0
- 1.0–1.25
- 1.25–1.5
- 1.5–1.75
- 1.75–2.0
- 2.0–2.25Расчёт скоростей:
- Первый интервал: (0.19 - 0.0) / 15 * 3600 = 45.6
- Второй интервал: (0.5 - 0.19) / 15 * 3600 = 74.4
- Третий интервал: (0.75 - 0.5) / 15 * 3600 = 60
Название: Count the Digit (Подсчитать цифру)
Ссылка: https://www.codewars.com/kata/566fc12495810954b1000030
Сложность: 7 kyu
Уже решили (На момент написания статьи): 52 744 из 156 324
Тэги: Fundamentals
Оригинальное описание:
Take an integer `n (n >= 0)` and a digit `d (0 <= d <= 9)` as an integer.
Square all numbers `k (0 <= k <= n)` between 0 and n. Count the numbers of digits `d` used in the writing of all the `k**2`. Implement the function taking `n` and `d` as parameters and returning this count.
Examples:
n = 10, d = 1 the k*k are 0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100
We are using the digit 1 in: 1, 16, 81, 100.
The total count is then 4.
The function, when given n = 25 and d = 1 as argument, should return 11 since the k*k that contain the digit 1 are: 1, 16, 81, 100, 121, 144, 169, 196, 361, 441.
So there are 11 digits 1 for the squares of numbers between 0 and 25.
Note that `121` has twice the digit 1.
Объяснение:
Задача состоит в следующем: Нам даны два параметра — целое число "n" и цифра "d" (от 0 до 9).
Необходимо вычислить, сколько раз цифра "d" встречается во всех квадратах чисел от 0 до "n".
То есть, требуется подсчитать количество цифр "d", встречающихся в записи квадратов чисел "k^2", где "k"пробегает значения от 0 до "n".
Пример:
Для "n"=10 и "d"=1: 0^2 = 0 1^2 = 1 2^2 = 4 3^2 = 9 4^2 = 16 5^2 = 25 6^2 = 36 7^2 = 49 8^2 = 64 9^2 = 81 10^2 = 100
Цифра 1 встречается в числах 1, 16, 81, 100, всего четыре раза.
Подход к решению:
Подход к решению основан на последовательном переборе всех чисел от 0 до "n", вычислении их квадратов и подсчёте количества нужных нам цифр "d" в каждой строке.
Основные шаги:
1. Перебираем числа "k"от 0 до "n".
2. Для каждого числа "k" находим его квадрат "k^2".
3. Преобразуем квадрат в строку и считаем количество нужной цифры "d".
4. Суммируем найденное количество для всех квадратов.
Примеры: - "n"= 10, "d" = 1 → результат: 4 - "n" = 25, "d" = 1 → результат: 11
Важные моменты:
- Квадраты чисел, оканчивающиеся на 0, содержат цифру 0 только в случае самого числа 0.
- Если квадрат содержит несколько одинаковых цифр "d", каждая такая цифра учитывается отдельно.
Таким образом, задача сводится к простой проверке наличия цифры "d" в каждом квадрате числа и суммированию результатов.
Благодарим за ваше внимание и погружение в мир алгоритмических испытаний. Эта подборка завершается, но каждое ваше решение и комментарий остаются для нас и сообщества источником мотивации и роста.
Ваши идеи и критика — важнейшая часть процесса, делающая контент глубже и полезнее для всех энтузиастов задач.
Ждём новых встреч, где вас ждут более сложные вызовы, интересные направления и открытия.
Обещаем держать высокую планку, удивлять и вдохновлять!
Вступайте в нашу телеграмм-группу Инфостарт