Они одинаковы"? — Вызов кодирования (Codewars)
Проблема с кодированием Python
Имея два массива a
и b
, напишите функцию comp(a, b)
(илиcompSame(a, b)
), которая проверяет, имеют ли два массива «одинаковые» элементы с одинаковыми кратностями (кратность члена — это количество раз, которое он появляется) . «То же самое» здесь означает, что элементы в b
являются элементами в a
в квадрате, независимо от порядка.
Примеры
Действительные массивы
a = [121, 144, 19, 161, 19, 144, 19, 11] b = [121, 14641, 20736, 361, 25921, 361, 20736, 361]
comp(a, b)
возвращает true, потому что в b
121 — это квадрат 11, 14641 — квадрат 121, 20736 — квадрат 144, 361 — квадрат 19, 25921 — квадрат 161 и так далее. Это становится очевидным, если мы запишем элементы b
в виде квадратов:
a = [121, 144, 19, 161, 19, 144, 19, 11] b = [11*11, 121*121, 144*144, 19*19, 161*161, 19*19, 144*144, 19*19]
Недопустимые массивы
Если, например, мы изменим первое число на что-то другое, comp
больше не будет возвращать значение true:
a = [121, 144, 19, 161, 19, 144, 19, 11] b = [132, 14641, 20736, 361, 25921, 361, 20736, 361]
comp(a,b)
возвращает false, потому что в b
132 не является квадратом любого числа a
.
a = [121, 144, 19, 161, 19, 144, 19, 11] b = [121, 14641, 20736, 36100, 25921, 361, 20736, 361]
comp(a,b)
возвращает false, потому что в b
36100 не является квадратом любого числа a
.
Примечания
a
илиb
может быть[] or {}
(все языки, кроме R, Shell).a
илиb
может бытьnil
илиnull
илиNone
илиnothing
(кроме C++, COBOL, Crystal, D, Dart, Elixir, Fortran, F#, Haskell, Nim, OCaml, Pascal, Perl, PowerShell, Prolog, PureScript, R, Racket , Ржавчина, Шелл, Свифт).
Если a
или b
равны nil
(или null
или None
, в зависимости от языка), проблема не имеет смысла, поэтому возвращайте false.
Примечание для С
Два массива имеют одинаковый размер (> 0)
, указанный в качестве параметра в функции comp
.
Мое решение:
Объяснение:
Строка 3–4: проверьте, имеет ли массив1 или массив2 значение None или имеет пустой список или набор. Если он возвращает False
Строка 7: использует функцию карты. Что делает функция карты? Примените функцию к каждому элементу в коллекции.
Выглядит так: map(func, collection). Здесь я создал лямбда-функцию, которая берет элемент и возводит его в квадрат. Затем я превращаю результат в список и сортирую этот список.
Строка 8: я отсортировал список array2
Строка 9–12: я проверяю, есть ли в двух массивах одинаковые элементы с одинаковыми кратностями.