Введение
Рассмотрим два массива одинаковой длины, скажем, A = [0,1,0,2]
и B = [-1,1,2,2]
. Предположим, мы знаем, что их содержание в некотором смысле эквивалентно, элемент за элементом:
0
эквивалентно-1
,1
эквивалентно1
,0
эквивалентно2
, и2
эквивалентно2
.
Эквивалентность является переходным: -1
и 0
эквивалентны, и 0
и 2
эквивалентны, так -1
и 2
также эквивалентны. Объединение из A
и B
является массив , в котором каждый элемент A
(или B
) был заменен наибольшим числом , что это эквивалентно. В этом случае объединение будет [2,1,2,2]
.
Задание
Напишите программу или функцию, которая принимает два непустых целочисленных массива одинаковой длины и выводит их объединение. Вы также можете изменить один из входов вместо возврата. Побеждает самое низкое число байтов.
Контрольные примеры
[0] [0] -> [0]
[1] [2] -> [2]
[0,-1] [-1,-1] -> [0,0]
[0,1,0] [2,1,0] -> [2,1,2]
[1,2,3] [0,0,1] -> [3,3,3]
[0,1,0,2] [-1,1,2,2] -> [2,1,2,2]
[1,0,1,-4] [-3,-1,-2,2] -> [1,0,1,2]
[1,2,3,-2] [1,0,-3,-2] -> [1,2,3,-2]
[-3,-2,-1,0,1] [-1,-1,-1,-1,-1] -> [1,1,1,1,1]
[-3,-2,-1,0,1] [2,-1,0,1,-3] -> [2,2,2,2,2]
[-3,5,5,3,1] [4,2,3,1,2] -> [4,5,5,5,5]
[4,0,2,-5,0] [0,4,-5,3,5] -> [5,5,3,3,5]
[-2,4,-2,3,2,4,1,1] [-2,4,1,2,2,3,1,-2] -> [1,4,1,4,4,4,1,1]
[-10,-20,-11,12,-18,14,-8,-1,-14,15,-17,18,18,-6,3,1,15,-15,-19,-19] [-13,6,-4,3,19,1,-10,-15,-15,11,6,9,-11,18,6,6,-5,-15,7,-11] -> [-8,14,18,14,19,14,-8,-1,-1,15,14,18,18,18,14,14,15,-1,18,18]
[20,15,2,4,-10,-4,-19,15,-5,2,13,-3,-18,-5,-6,0,3,-6,3,-17] [-18,7,6,19,-8,-4,-16,-1,13,-18,8,8,-16,17,-9,14,-2,-12,7,6] -> [20,15,20,19,-8,-4,20,15,17,20,17,17,20,17,-6,14,15,-6,15,20]
Ответы:
JavaScript (ES6),
1009011010296 байтМое первоначальное решение было 90 байтов:
Несмотря на то, что он проходит все предоставленные тестовые случаи, он не может выполнить что-то вроде:
Контрольные примеры
Показать фрагмент кода
источник
a.map
...a.map
можно заменить наb.map
точно такие же.CJam , 27 байт
Попробуйте онлайн! Тестирование.
объяснение
источник
Python 2, 91 байт
источник
Python, 86 байт
Одновременно обновляет оба списка, заменяя каждое значение в первом списке соответствующим элементом во втором списке, если оно больше. Замена выполняется
map
поget
методу словаря . Затем меняет списки и повторяет до тех пор, пока они не станут равными.источник
Pyth, 13 байт
Попробуйте онлайн: демонстрация
Объяснение:
Начните с каждой пары. Итеративно расширяйте каждую пару (список) перекрывающимися списками, дедуплицируйте элементы и сортируйте. Остановитесь, как только этот процесс сходится. Напечатайте максимум каждого списка.
источник
Php
266241213200 байтРешение:
Использование:
u([1,2,3], [0,0,1]);
возвращает нужный массив.Не так играли в гольф
источник
Дьялог АПЛ ,
2928 байт⌈/¨({∪¨,/∘.{⍵/⍨≢⍺∩⍵}⍨⍵}⍣≡,¨)
Та же идея, что и у решения Pyth .
источник
Mathematica, 56 байт
источник
Ява,
273263 байтаМетод
f(int[]a,int[]b)
решает проблему.Сначала пройдитесь по обоим массивам и отследите эквивалентные числа. Затем измените каждый элемент в первом массиве, чтобы сохранить эквивалентные числа.
источник
Python, 522 байта
объяснение
Составьте таблицу значений, соответствующих каждому уникальному элементу в обоих массивах (
a
иb
в этом случае). Например, еслитогда таблица будет:
затем примените поиск в глубину, например, предположим, что я выбрал самый левый элемент в
a
значении, то есть0
и0
имеет эквивалентность:0
и2
. Так0
как уже был посещен, перейдите к2
. 2 имеют эквивалентности:0
. Таким образом , лучший результат для выбора самого левого элемента вa
IS2
. Вот дерево:и вы хотите получить наибольшее значение там, так что результат
2
.источник
PHP, 132 байта
Анонимная функция, которая принимает два массива.
Это мой взгляд на «модифицировать один из массивов на месте», как указано в выходных данных задачи. Это проходит по каждому из двух массивов, записывает эквивалентность, если текущий больше, чем сохраненный, затем проходит по первому массиву и заменяет все значения их наибольшими эквивалентами. Первый массив берется по ссылке (отсюда и
&$a
), поэтому переданный массив изменяется «на месте».источник
Java, 170 байт
Golfed
Ungolfed
Анонимная функция, которая принимает два
int[]
s в качестве аргумента и возвращаетint[]
.источник