Запускаем мозговой спринт! Держите свежую порцию алгоритмических пазлов — я собрал для вас задачи на любой вкус и уровень подготовки. Здесь есть всё: лёгкие закуски для разминки, средние блюда для насыщения и сложные десерты для истинных гурманов кода.
Зачем это нужно? Накачать алгоритмические мышцы, не дать навыкам кодинга заржаветь и — самое главное — получить кайф от решения умных задачек!
Что было раньше:
В предыдущей части мы решили:
- Enumerable Magic #1 - True for All? (Перечислимая магия №1 - актуальна для всех?)
- Sum Arrays (Суммирующие массивы)
- String ends with? (Строка заканчивается на?)
- Growth of a Population (Рост численности населения)
- A kata is a kata, you can't say it's only a half! (Ката есть ката, вы не можете сказать, что это только половина!)
- Pack Some Chocolates (Упакуй несколько шоколадок)
Решение новых задач:
Задача 1
Платформа: CodeWars
Название задачи: Find the force of gravity between two objects (Найдите силу притяжения между двумя объектами)
Ссылка на задачу: https://www.codewars.com/kata/5b609ebc8f47bd595e000627
Сложность: 8 kyu
Уже решили (На момент написания статьи): 4 743 из 31 755
Тэги: Algorithms
Оригинальное описание задачи:
Your job is to find the gravitational force between two spherical objects (obj1 , obj2).
input
Two arrays are given :
- arr_val (value array), consists of 3 elements
- 1st element : mass of obj 1
- 2nd element : mass of obj 2
- 3rd element : distance between their centers
- arr_unit (unit array), consists of 3 elements
- 1st element : unit for mass of obj 1
- 2nd element : unit for mass of obj 2
- 3rd element : unit for distance between their centers
mass units are :
- kilogram (kg)
- gram (g)
- milligram (mg)
- microgram (μg)
- pound (lb)
distance units are :
- meter (m)
- centimeter (cm)
- millimeter (mm)
- micrometer (μm)
- feet (ft)
Note value of G = 6.67 × 10^−11 N⋅kg^−2⋅m^2
1 ft = 0.3048 m
1 lb = 0.453592 kg
return value must be Newton for force (obviously)
`μ` copy this from here to use it in your solution
Пояснение задачи:
Задача состоит в следующем:
Необходимо рассчитать силу гравитационного притяжения между двумя сферическими объектами.
Входные данные:
Даны два массива: - `arr_val`: содержит три числовых значения:
- Первое значение — масса объекта 1 (в килограммах, граммах, миллиграммах, микрограммах или фунтах).
- Второе значение — масса объекта 2 (в килограммах, граммах, миллиграммах, микрограммах или фунтах).
- Третье значение — расстояние между центрами объектов (в метрах, сантиметрах, миллиметрах, микрометрах или футах).
- `arr_unit`: содержит три строковых значения, указывающих единицы измерения:
- Первая единица — единица массы объекта 1.
- Вторая единица — единица массы объекта 2.
- Третья единица — единица расстояния.
Константа: G = 6.67 * 10^{-11} N ... kg^{-2} ... m^2
Дополнительная информация:
- Для перевода единиц массы: - 1 кг = 1000 г - 1 г = 1000 мг - 1 мг = 1000 мкг - 1 кг = 2.20462 lb - 1 lb ≈ 0.453592 кг
- Для перевода единиц длины: - 1 м = 100 см - 1 м = 1000 мм - 1 м = 1000000 мкм - 1 м ≈ 3.28084 футов - 1 фут ≈ 0.3048 м
Требуемый результат:
Возвращаемое значение должно выражаться в ньютонах (N), сила рассчитывается по формуле закона всемирного тяготения Ньютона:
F = G \{m_1 ... m_2}{r^2} где: - F — искомая сила, - G — гравитационная постоянная, - m_1, m_2 — массы объектов, - r — расстояние между центрами объектов.
Пример:
- Вход: `arr_val = [1000],
Задача 2
Платформа: CodeWars
Название задачи: Sum Arrays (Суммирующие массивы)
Ссылка на задачу: https://www.codewars.com/kata/53dc54212259ed3d4f00071c
Сложность: 8 kyu
Уже решили (На момент написания статьи): 228 497 из 410 984
Тэги: Arrays, Fundamentals
Оригинальное описание задачи:
Write a function that takes an array of numbers and returns the sum of the numbers.The numbers can be negative. If the array is empty, return `0`.
Examples
Input: `[1, 5.2, 4, 0, -1]`
Output: `9.2`
Input: `[-2.398]`
Output: `-2.398`
Input: `[]`
Output: `0`
Assumptions
- You can assume that you are given a (possibly empty) valid array containing only numbers.
What We're Testing We're testing basic loops and math operations.This is for beginners who are just learning loops and math operations.
Advanced users may find this extremely easy and can easily write this in one line.
Пояснение задачи:
Функция принимает на вход массив чисел произвольного типа (целых или вещественных), суммирует их значения и возвращает итоговую сумму.
Если входной массив пуст, функция должна вернуть ноль.
Пояснение
1. Проверка пустого массива: если массив пустой, сразу возвращаем 0.
2. Проходим по каждому элементу массива:
- Используем цикл для перебора всех элементов массива.
- Каждый элемент добавляется к текущей сумме.
3. Возвращаем итоговую сумму.
Примеры
- Для входного массива `[1, 5.2, 4, 0, -1]` сумма будет равна 1 + 5.2 + 4 + 0 - 1 = 9.2.
- Для массива `[-2.398]` результатом будет -2.398.
- Для пустого массива (`[]`) результатом является 0.
Важные моменты - Функция корректно обрабатывает как целые, так и вещественные числа. - Массив может содержать отрицательные числа.
Задача 3
Платформа: CodeWars
Название задачи: Third Angle of a Triangle (Третий угол треугольника)
Ссылка на задачу: https://www.codewars.com/kata/5a023c426975981341000014
Сложность: 8 kyu
Уже решили (На момент написания статьи): 124 325 из 168 144
Тэги: Fundamentals
Оригинальное описание задачи:
You are given two interior angles (in degrees) of a triangle.
Write a function to return the 3rd.
Note: only positive integers will be tested.
Пояснение задачи:
Задача состоит в следующем:
Даны два внутренних угла треугольника в градусах (два положительных целых числа).
Необходимо определить величину третьего внутреннего угла треугольника. Поскольку сумма углов любого треугольника равна 180°, третий угол можно вычислить простым вычитанием суммы двух известных углов из 180°.
Пример:
- Если известны углы 60° и 70°, то третий угол будет равен 180° - (60° + 70°) = 50°
Требования:
- Входные значения — положительные целые числа.
- Все углы треугольника будут меньше 180° и больше 0°. - Результат также должен быть целым числом градусов.
Пример решения:
def find_third_angle(angle1, angle2):
Сумма всех углов треугольника total_sum = 180°
Вычисляем третий угол third_angle = total_sum - (angle1 + angle2) return third_angle
Таким образом, функция принимает два аргумента (значения двух углов), находит сумму этих углов и возвращает недостающий угол, вычисляя разность между общей суммой углов треугольника (180°) и суммой переданных углов.
Задача 4
Платформа: CodeWars
Название задачи: Speech to Text - String Manipulation (Преобразование речи в текстовую строку - Манипуляция)
Ссылка на задачу: https://www.codewars.com/kata/5817c0148e74302c4800039c
Сложность: 6 kyu
Уже решили (На момент написания статьи): 230 из 1 688
Тэги: Date Time, Fundamentals
Оригинальное описание задачи:
Siri needs you to code some new features: addition, subtraction and a weather checker. There's no need to implement the speech recognition, that's taken care of...
Examples: "Add 7 to 15." -> 22 "Subtract 7 from 15." -> 8 "What is the weather at 5:30pm?" -> "sunny"
According to the weather API, it is "sunny" from (including) 6am to 6pm (including), and "raining" the rest of the day.
For the purposes of this kata, 12:00am is midnight and 12:00pm is noon.
Disclaimer: Yes, those features may already exist in Siri.
Пояснение задачи:
Задача состоит в реализации трёх основных функций для виртуального ассистента Siri:
1. Математические операции:
- Выполнение арифметических операций сложения (`add`) и вычитания (`subtract`).
Входные данные — два числа, разделённые операцией (`add X to Y` или `subtract X from Y`), результат вычисляется и возвращается числовое значение.
Пример: "Add 7 to 15" → 22 "Subtract 7 from 15" → 8 2.
Проверка погоды:
- Определение текущего состояния погоды в заданное время суток. Используемый API возвращает состояние погоды в интервале от 6 утра до 6 вечера включительно как «солнечно», остальное время — «дождь».
Пример запроса: "What is the weather at 5:30pm?"
Согласно условиям задачи, погода определяется следующим образом:
- С 6 утра до 6 вечера — солнечно.
- Остальное время дня — дождливо.
Для простоты реализации можно использовать фиксированные временные границы, учитывая, что день начинается в полночь и заканчивается в полдень.
Время суток:
- Время указано в формате 24-часового формата, где полночь обозначается как 00:00, а полдень — как 12:00.
Все запросы относительно времени интерпретируются в пределах одного полного суточного цикла.
Примечание:
- Временные границы (6 утра и 6 вечера) являются фиксированными и не зависят от географического положения или часовых поясов.
- Реализация самой функции распознавания речи не требуется, предполагается, что она уже реализована и работает корректно.
Задача 5
Платформа: CodeWars
Название задачи: Integers: Recreation Two (Целые числа: Всего два)
Ссылка на задачу: https://www.codewars.com/kata/55e86e212fce2aae75000060
Сложность: 6 kyu
Уже решили (На момент написания статьи): 1 142 из 13 781
Тэги: Fundamentals, Mathematics, Puzzles
Оригинальное описание задачи:
We are still with squared integers.
Given 4 integers `a, b, c, d` we form the sum of the squares of `a` and `b` and then the sum of the squares of `c` and `d`. We multiply the two sums hence a number `n` and we try to decompose `n` in a sum of two squares `e` and `f` (e and f integers >= 0) so that `n = e² + f²`.
More:`e` and `f` must result only from sums (or differences) of products between on the one hand `(a, b)` and on the other `(c, d)` each of `a, b, c, d` taken only once.For example, prod2sum(1, 2, 1, 3) should return [[1, 7], [5, 5]]) because
1==1*3-1*2
7==2*3+1*1
5==1*2+1*3
Suppose we have `a = 1, b = 2, c = 1, d = 3`. First we calculate the sums `1² + 2² = 5 and 1² + 3² = 10` hence `n = 50`.
`50 = 1² + 7² or 50 = 7² + 1²` (we'll consider that these two solutions are the same) or `50 = 5² + 5²`.
The return of our function will be an array of subarrays (in C an array of Pairs) sorted on the first elements of the subarrays. In each subarray the lower element should be the first.
`prod2sum(1, 2, 1, 3) should return [[1, 7], [5, 5]]`
`prod2sum(2, 3, 4, 5) should return [[2, 23], [7, 22]]`
`because `(2² + 3²) * (4² + 5²) = 533 = (7² + 22²) = (23² + 2²)`
`prod2sum(1, 2, 2, 3) should return [[1, 8], [4, 7]]`
`prod2sum(1, 1, 3, 5) should return [[2, 8]]` (there are not always 2 solutions).
Hint Take a sheet of paper and with a bit of algebra try to write the product of squared numbers in another way.
Пояснение задачи:
Задача формулируется следующим образом:
Даны четыре целых числа "a", "b", "c" и "d".
Нужно вычислить сумму квадратов
"a^2+b^2" и "c^2+d^2", перемножить полученные значения и представить результат "n" в виде суммы двух квадратов "e^2+f^2".
При этом "e" и "f" должны строиться исключительно через комбинации произведений чисел "(a,b)" и "(c,d)", каждое число используется ровно один раз.
То есть, допустимые выражения для "e" и "f" — это линейные комбинации произведений вида "ax+by" и "cx+dy", где "x,y" принимают значения "a,b,c,d" по одному разу.
Основные шаги решения:
1. Вычисляем суммы квадратов a^2+b^2 и c^2+d^2.
2. Перемножаем полученные суммы, формируем число n.
3. Ищем всевозможные представления числа n в виде суммы двух квадратов e^2+f^2, где e и f выражаются через произведения a,b,c,d с использованием каждого числа ровно один раз.
4. Возвращаем список пар (e,f), отсортированных по возрастанию первого элемента.
Примеры:
- Для чисел a=1, b=2, c=1, d=3:
a^2+b^2 = 1^2+2^2 = 5
c^2+d^2 = 1^2+3^2 = 10
n = 5 * 10 = 50
Возможные представления числа 50 в виде суммы квадратов:
- 50 = 1^2 + 7^2 - 50 = 7^2 + 1^2 - 50 = 5^2 + 5^2
Результат:
`[ [1, 7], [5, 5] ]`
- Для чисел a=2, b=3, c=4, d=5:
2^2+3^2 = 13 4^2+5^2 = 41
n = 13
Задача 6
Платформа: CodeWars
Название задачи: Address Book by State (Адресная книга по штатам)
Ссылка на задачу: https://www.codewars.com/kata/59d0ee709f0cbcf65400003b
Сложность: 6 kyu
Уже решили (На момент написания статьи): 1 380 из 13 654
Тэги: Fundamentals, Strings
Оригинальное описание задачи:
Given a string with friends to visit in different states:
ad3="John Daggett, 341 King Road, Plymouth MA
Alice Ford, 22 East Broadway, Richmond VA
Sal Carpenter, 73 6th Street, Boston MA"
we want to produce a result that sorts the names by state and lists the name of the state followed by the name of each person residing in that state (people's names sorted).When the result is printed we get:
Massachusetts
John Daggett 341 King Road Plymouth Massachusetts
Sal Carpenter 73 6th Street Boston Massachusetts
Virginia
Alice Ford 22 East Broadway Richmond Virginia
Spaces not being always well seen, in the above result `^` means a white space.
The resulting string (when not printed) will be:
"Massachusetts\n John Daggett 341 King Road Plymouth Massachusetts\n Sal Carpenter 73 6th Street Boston Massachusetts\n Virginia\n Alice Ford 22 East Broadway Richmond Virginia"
or (the separator is `n` or `r n` depending on the language)
"Massachusetts\r\n John Daggett 341 King Road Plymouth Massachusetts\r\n Sal Carpenter 73 6th Street Boston Massachusetts\r\n Virginia\r\n Alice Ford 22 East Broadway Richmond Virginia"
Notes
- There can be a blank last line in the given string of addresses.
- The tests only contains CA, MA, OK, PA, VA, AZ, ID, IN for states.
- You can see another example in the "Sample tests".
States
For the lazy ones:
'AZ': 'Arizona',
'CA': 'California',
'ID': 'Idaho',
'IN': 'Indiana',
'MA': 'Massachusetts',
'OK': 'Oklahoma',
'PA': 'Pennsylvania',
'VA': 'Virginia'
Пояснение задачи:
Задача состоит в следующем:
Дана строка с записями друзей, каждая запись содержит имя человека, адрес и штат проживания.
Необходимо:
1. Разделить записи по штатам.
2. Для каждого штата отсортировать имена людей по алфавиту.
3. Вывести результат в формате, где сначала указывается название штата, затем список людей, проживающих в этом штате, каждый человек выводится с отступом.
Пример:
Входная строка:
ad3="John Daggett, 341 King Road, Plymouth MA Alice Ford, 22 East Broadway, Richmond VA Sal Carpenter, 73 6th Street, Boston MA"
Выходная строка:
Massachusetts John Daggett 341 King Road Plymouth Massachusetts Sal Carpenter 73 6th Street Boston Massachusetts Virginia Alice Ford 22 East Broadway Richmond Virginia
Основные шаги решения:
1. Разбор строки:
Извлечь отдельные записи, разделив строку по символу новой строки (`\n`) или символу перевода строки (`\r\n`).
2. Парсинг записей:
Каждая запись разбивается на части: имя, адрес и штат. Важно аккуратно обработать строки, удаляя пробелы и знаки препинания, чтобы корректно извлечь имя и штат.
3. Группировка по штатам:
Создать словарь, ключами которого будут штаты, а значениями — списки имен людей, живущих в соответствующем штате.
4. Сортировка имен внутри каждого штата:
Для каждого штата отсортируем список имен по алфавиту.
5. Форматирование вывода:
Для каждой группы штата сформировать итоговую строку с нужным отступом и расположением.
Дополнительные замечания:
- Страны могут встречаться в разных вариантах написания (например, "Plymouth MA" и "Boston MA"), важно корректно распознавать штат даже при наличии различных вариантов написания.
- Если в исходной строке есть пустая строка в конце, её можно игнорировать.
- Проверять наличие штатов только из заданного списка («CA», «MA», «OK», «PA», «VA», «AZ», «ID», «IN»).
Заключение:
Платформа: CodeWars
Название задачи: Find the force of gravity between two objects (Найдите силу притяжения между двумя объектами)
Ссылка на задачу: https://www.codewars.com/kata/5b609ebc8f47bd595e000627
Сложность: 8 kyu
Уже решили (На момент написания статьи): 4 743 из 31 755
Тэги: Algorithms
Оригинальное описание задачи:
Your job is to find the gravitational force between two spherical objects (obj1 , obj2).
input
Two arrays are given :
- arr_val (value array), consists of 3 elements
- 1st element : mass of obj 1
- 2nd element : mass of obj 2
- 3rd element : distance between their centers
- arr_unit (unit array), consists of 3 elements
- 1st element : unit for mass of obj 1
- 2nd element : unit for mass of obj 2
- 3rd element : unit for distance between their centers
mass units are :
- kilogram (kg)
- gram (g)
- milligram (mg)
- microgram (μg)
- pound (lb)
distance units are :
- meter (m)
- centimeter (cm)
- millimeter (mm)
- micrometer (μm)
- feet (ft)
Note value of G = 6.67 × 10^−11 N⋅kg^−2⋅m^2
1 ft = 0.3048 m
1 lb = 0.453592 kg
return value must be Newton for force (obviously)
`μ` copy this from here to use it in your solution
Пояснение задачи:
Задача состоит в следующем:
Необходимо рассчитать силу гравитационного притяжения между двумя сферическими объектами.
Входные данные:
Даны два массива: - `arr_val`: содержит три числовых значения:
- Первое значение — масса объекта 1 (в килограммах, граммах, миллиграммах, микрограммах или фунтах).
- Второе значение — масса объекта 2 (в килограммах, граммах, миллиграммах, микрограммах или фунтах).
- Третье значение — расстояние между центрами объектов (в метрах, сантиметрах, миллиметрах, микрометрах или футах).
- `arr_unit`: содержит три строковых значения, указывающих единицы измерения:
- Первая единица — единица массы объекта 1.
- Вторая единица — единица массы объекта 2.
- Третья единица — единица расстояния.
Константа: G = 6.67 * 10^{-11} N ... kg^{-2} ... m^2
Дополнительная информация:
- Для перевода единиц массы: - 1 кг = 1000 г - 1 г = 1000 мг - 1 мг = 1000 мкг - 1 кг = 2.20462 lb - 1 lb ≈ 0.453592 кг
- Для перевода единиц длины: - 1 м = 100 см - 1 м = 1000 мм - 1 м = 1000000 мкм - 1 м ≈ 3.28084 футов - 1 фут ≈ 0.3048 м
Требуемый результат:
Возвращаемое значение должно выражаться в ньютонах (N), сила рассчитывается по формуле закона всемирного тяготения Ньютона:
F = G \{m_1 ... m_2}{r^2} где: - F — искомая сила, - G — гравитационная постоянная, - m_1, m_2 — массы объектов, - r — расстояние между центрами объектов.
Пример:
- Вход: `arr_val = [1000],
Платформа: CodeWars
Название задачи: Sum Arrays (Суммирующие массивы)
Ссылка на задачу: https://www.codewars.com/kata/53dc54212259ed3d4f00071c
Сложность: 8 kyu
Уже решили (На момент написания статьи): 228 497 из 410 984
Тэги: Arrays, Fundamentals
Оригинальное описание задачи:
Write a function that takes an array of numbers and returns the sum of the numbers.The numbers can be negative. If the array is empty, return `0`.
Examples
Input: `[1, 5.2, 4, 0, -1]`
Output: `9.2`
Input: `[-2.398]`
Output: `-2.398`
Input: `[]`
Output: `0`
Assumptions
- You can assume that you are given a (possibly empty) valid array containing only numbers.
What We're Testing We're testing basic loops and math operations.This is for beginners who are just learning loops and math operations.
Advanced users may find this extremely easy and can easily write this in one line.
Пояснение задачи:
Функция принимает на вход массив чисел произвольного типа (целых или вещественных), суммирует их значения и возвращает итоговую сумму.
Если входной массив пуст, функция должна вернуть ноль.
Пояснение
1. Проверка пустого массива: если массив пустой, сразу возвращаем 0.
2. Проходим по каждому элементу массива:
- Используем цикл для перебора всех элементов массива.
- Каждый элемент добавляется к текущей сумме.
3. Возвращаем итоговую сумму.
Примеры
- Для входного массива `[1, 5.2, 4, 0, -1]` сумма будет равна 1 + 5.2 + 4 + 0 - 1 = 9.2.
- Для массива `[-2.398]` результатом будет -2.398.
- Для пустого массива (`[]`) результатом является 0.
Важные моменты - Функция корректно обрабатывает как целые, так и вещественные числа. - Массив может содержать отрицательные числа.
Платформа: CodeWars
Название задачи: Third Angle of a Triangle (Третий угол треугольника)
Ссылка на задачу: https://www.codewars.com/kata/5a023c426975981341000014
Сложность: 8 kyu
Уже решили (На момент написания статьи): 124 325 из 168 144
Тэги: Fundamentals
Оригинальное описание задачи:
You are given two interior angles (in degrees) of a triangle.
Write a function to return the 3rd.
Note: only positive integers will be tested.
Пояснение задачи:
Задача состоит в следующем:
Даны два внутренних угла треугольника в градусах (два положительных целых числа).
Необходимо определить величину третьего внутреннего угла треугольника. Поскольку сумма углов любого треугольника равна 180°, третий угол можно вычислить простым вычитанием суммы двух известных углов из 180°.
Пример:
- Если известны углы 60° и 70°, то третий угол будет равен 180° - (60° + 70°) = 50°
Требования:
- Входные значения — положительные целые числа.
- Все углы треугольника будут меньше 180° и больше 0°. - Результат также должен быть целым числом градусов.
Пример решения:
def find_third_angle(angle1, angle2):
Сумма всех углов треугольника total_sum = 180°
Вычисляем третий угол third_angle = total_sum - (angle1 + angle2) return third_angle
Таким образом, функция принимает два аргумента (значения двух углов), находит сумму этих углов и возвращает недостающий угол, вычисляя разность между общей суммой углов треугольника (180°) и суммой переданных углов.
Платформа: CodeWars
Название задачи: Speech to Text - String Manipulation (Преобразование речи в текстовую строку - Манипуляция)
Ссылка на задачу: https://www.codewars.com/kata/5817c0148e74302c4800039c
Сложность: 6 kyu
Уже решили (На момент написания статьи): 230 из 1 688
Тэги: Date Time, Fundamentals
Оригинальное описание задачи:
Siri needs you to code some new features: addition, subtraction and a weather checker. There's no need to implement the speech recognition, that's taken care of...
Examples: "Add 7 to 15." -> 22 "Subtract 7 from 15." -> 8 "What is the weather at 5:30pm?" -> "sunny"
According to the weather API, it is "sunny" from (including) 6am to 6pm (including), and "raining" the rest of the day.
For the purposes of this kata, 12:00am is midnight and 12:00pm is noon.
Disclaimer: Yes, those features may already exist in Siri.
Пояснение задачи:
Задача состоит в реализации трёх основных функций для виртуального ассистента Siri:
1. Математические операции:
- Выполнение арифметических операций сложения (`add`) и вычитания (`subtract`).
Входные данные — два числа, разделённые операцией (`add X to Y` или `subtract X from Y`), результат вычисляется и возвращается числовое значение.
Пример: "Add 7 to 15" → 22 "Subtract 7 from 15" → 8 2.
Проверка погоды:
- Определение текущего состояния погоды в заданное время суток. Используемый API возвращает состояние погоды в интервале от 6 утра до 6 вечера включительно как «солнечно», остальное время — «дождь».
Пример запроса: "What is the weather at 5:30pm?"
Согласно условиям задачи, погода определяется следующим образом:
- С 6 утра до 6 вечера — солнечно.
- Остальное время дня — дождливо.
Для простоты реализации можно использовать фиксированные временные границы, учитывая, что день начинается в полночь и заканчивается в полдень.
Время суток:
- Время указано в формате 24-часового формата, где полночь обозначается как 00:00, а полдень — как 12:00.
Все запросы относительно времени интерпретируются в пределах одного полного суточного цикла.
Примечание:
- Временные границы (6 утра и 6 вечера) являются фиксированными и не зависят от географического положения или часовых поясов.
- Реализация самой функции распознавания речи не требуется, предполагается, что она уже реализована и работает корректно.
Платформа: CodeWars
Название задачи: Integers: Recreation Two (Целые числа: Всего два)
Ссылка на задачу: https://www.codewars.com/kata/55e86e212fce2aae75000060
Сложность: 6 kyu
Уже решили (На момент написания статьи): 1 142 из 13 781
Тэги: Fundamentals, Mathematics, Puzzles
Оригинальное описание задачи:
We are still with squared integers.
Given 4 integers `a, b, c, d` we form the sum of the squares of `a` and `b` and then the sum of the squares of `c` and `d`. We multiply the two sums hence a number `n` and we try to decompose `n` in a sum of two squares `e` and `f` (e and f integers >= 0) so that `n = e² + f²`.
More:`e` and `f` must result only from sums (or differences) of products between on the one hand `(a, b)` and on the other `(c, d)` each of `a, b, c, d` taken only once.For example, prod2sum(1, 2, 1, 3) should return [[1, 7], [5, 5]]) because
1==1*3-1*2
7==2*3+1*1
5==1*2+1*3
Suppose we have `a = 1, b = 2, c = 1, d = 3`. First we calculate the sums `1² + 2² = 5 and 1² + 3² = 10` hence `n = 50`.
`50 = 1² + 7² or 50 = 7² + 1²` (we'll consider that these two solutions are the same) or `50 = 5² + 5²`.
The return of our function will be an array of subarrays (in C an array of Pairs) sorted on the first elements of the subarrays. In each subarray the lower element should be the first.
`prod2sum(1, 2, 1, 3) should return [[1, 7], [5, 5]]`
`prod2sum(2, 3, 4, 5) should return [[2, 23], [7, 22]]`
`because `(2² + 3²) * (4² + 5²) = 533 = (7² + 22²) = (23² + 2²)`
`prod2sum(1, 2, 2, 3) should return [[1, 8], [4, 7]]`
`prod2sum(1, 1, 3, 5) should return [[2, 8]]` (there are not always 2 solutions).
Hint Take a sheet of paper and with a bit of algebra try to write the product of squared numbers in another way.
Пояснение задачи:
Задача формулируется следующим образом:
Даны четыре целых числа "a", "b", "c" и "d".
Нужно вычислить сумму квадратов
"a^2+b^2" и "c^2+d^2", перемножить полученные значения и представить результат "n" в виде суммы двух квадратов "e^2+f^2".
При этом "e" и "f" должны строиться исключительно через комбинации произведений чисел "(a,b)" и "(c,d)", каждое число используется ровно один раз.
То есть, допустимые выражения для "e" и "f" — это линейные комбинации произведений вида "ax+by" и "cx+dy", где "x,y" принимают значения "a,b,c,d" по одному разу.
Основные шаги решения:
1. Вычисляем суммы квадратов a^2+b^2 и c^2+d^2.
2. Перемножаем полученные суммы, формируем число n.
3. Ищем всевозможные представления числа n в виде суммы двух квадратов e^2+f^2, где e и f выражаются через произведения a,b,c,d с использованием каждого числа ровно один раз.
4. Возвращаем список пар (e,f), отсортированных по возрастанию первого элемента.
Примеры:
- Для чисел a=1, b=2, c=1, d=3:
a^2+b^2 = 1^2+2^2 = 5
c^2+d^2 = 1^2+3^2 = 10
n = 5 * 10 = 50
Возможные представления числа 50 в виде суммы квадратов:
- 50 = 1^2 + 7^2 - 50 = 7^2 + 1^2 - 50 = 5^2 + 5^2
Результат:
`[ [1, 7], [5, 5] ]`
- Для чисел a=2, b=3, c=4, d=5:
2^2+3^2 = 13 4^2+5^2 = 41
n = 13
Платформа: CodeWars
Название задачи: Address Book by State (Адресная книга по штатам)
Ссылка на задачу: https://www.codewars.com/kata/59d0ee709f0cbcf65400003b
Сложность: 6 kyu
Уже решили (На момент написания статьи): 1 380 из 13 654
Тэги: Fundamentals, Strings
Оригинальное описание задачи:
Given a string with friends to visit in different states:
ad3="John Daggett, 341 King Road, Plymouth MA
Alice Ford, 22 East Broadway, Richmond VA
Sal Carpenter, 73 6th Street, Boston MA"
we want to produce a result that sorts the names by state and lists the name of the state followed by the name of each person residing in that state (people's names sorted).When the result is printed we get:
Massachusetts
John Daggett 341 King Road Plymouth Massachusetts
Sal Carpenter 73 6th Street Boston Massachusetts
Virginia
Alice Ford 22 East Broadway Richmond Virginia
Spaces not being always well seen, in the above result `^` means a white space.
The resulting string (when not printed) will be:
"Massachusetts\n John Daggett 341 King Road Plymouth Massachusetts\n Sal Carpenter 73 6th Street Boston Massachusetts\n Virginia\n Alice Ford 22 East Broadway Richmond Virginia"
or (the separator is `n` or `r n` depending on the language)
"Massachusetts\r\n John Daggett 341 King Road Plymouth Massachusetts\r\n Sal Carpenter 73 6th Street Boston Massachusetts\r\n Virginia\r\n Alice Ford 22 East Broadway Richmond Virginia"
Notes
- There can be a blank last line in the given string of addresses.
- The tests only contains CA, MA, OK, PA, VA, AZ, ID, IN for states.
- You can see another example in the "Sample tests".
States
For the lazy ones:
'AZ': 'Arizona',
'CA': 'California',
'ID': 'Idaho',
'IN': 'Indiana',
'MA': 'Massachusetts',
'OK': 'Oklahoma',
'PA': 'Pennsylvania',
'VA': 'Virginia'
Пояснение задачи:
Задача состоит в следующем:
Дана строка с записями друзей, каждая запись содержит имя человека, адрес и штат проживания.
Необходимо:
1. Разделить записи по штатам.
2. Для каждого штата отсортировать имена людей по алфавиту.
3. Вывести результат в формате, где сначала указывается название штата, затем список людей, проживающих в этом штате, каждый человек выводится с отступом.
Пример:
Входная строка:
ad3="John Daggett, 341 King Road, Plymouth MA Alice Ford, 22 East Broadway, Richmond VA Sal Carpenter, 73 6th Street, Boston MA"
Выходная строка:
Massachusetts John Daggett 341 King Road Plymouth Massachusetts Sal Carpenter 73 6th Street Boston Massachusetts Virginia Alice Ford 22 East Broadway Richmond Virginia
Основные шаги решения:
1. Разбор строки:
Извлечь отдельные записи, разделив строку по символу новой строки (`\n`) или символу перевода строки (`\r\n`).
2. Парсинг записей:
Каждая запись разбивается на части: имя, адрес и штат. Важно аккуратно обработать строки, удаляя пробелы и знаки препинания, чтобы корректно извлечь имя и штат.
3. Группировка по штатам:
Создать словарь, ключами которого будут штаты, а значениями — списки имен людей, живущих в соответствующем штате.
4. Сортировка имен внутри каждого штата:
Для каждого штата отсортируем список имен по алфавиту.
5. Форматирование вывода:
Для каждой группы штата сформировать итоговую строку с нужным отступом и расположением.
Дополнительные замечания:
- Страны могут встречаться в разных вариантах написания (например, "Plymouth MA" и "Boston MA"), важно корректно распознавать штат даже при наличии различных вариантов написания.
- Если в исходной строке есть пустая строка в конце, её можно игнорировать.
- Проверять наличие штатов только из заданного списка («CA», «MA», «OK», «PA», «VA», «AZ», «ID», «IN»).
Глава закрыта, но история продолжается. Эти задачи — лишь первая глава в вашей личной саге об алгоритмическом мастерстве.
Теперь ваша очередь писать продолжение: в комментариях создадим живой архив решений — где каждая строка кода, каждый спорный момент, каждая найденная оптимизация станут строчками в нашей общей разработческой летописи.
Держите пытливость ума включённой — следующая порция алгоритмических головоломок уже на подходе.
Вступайте в нашу телеграмм-группу Инфостарт