Два списка A
и B
являются конгруэнтными, если они имеют одинаковую длину, и элементы, которые сравниваются равными в A
сравнении, равны в B
.
Другими словами, даны любые два действительных индекса x
и y
:
- Если
A[x] = A[y]
тоB[x] = B[y]
. - Если
A[x] != A[y]
тогдаB[x] != B[y]
.
Например, списки [1, 2, 1, 4, 5]
и [0, 1, 0, 2, 3]
являются конгруэнтными.
Задание
Если задан непустой список неотрицательных целых чисел A
, верните новый список неотрицательных целых чисел, B
такой что он совпадает сA
, при этом минимизируя сумму целых чисел в B
.
Существует потенциально много возможных действительных результатов. Например, в списке[12, 700, 3]
любая перестановка [0, 1, 2]
будет считаться допустимым выводом.
Тестовые случаи
Format:
input ->
one possible valid output
[1 2 1 4 5] ->
[0 1 0 2 3] (this is the example given above)
[3 2 2 1 5 7 2] ->
[1 0 0 2 3 4 0]
[8 8 8 8 8] ->
[0 0 0 0 0]
[2] ->
[0]
[8 6 8 4 6 8 2 4 6 8 0 2 4 6 8] ->
[0 1 0 2 1 0 3 2 1 0 4 3 2 1 0]
[14 1] ->
[1 0]
[19 6 4 9 14 17 10 9 6 14 8 14 6 15] ->
[8 0 3 2 1 7 5 2 0 1 4 1 0 6]
[15] ->
[0]
[1 18 4 8 6 19 12 17 6 13 7 6 8 1 6] ->
[1 8 3 2 0 9 5 7 0 6 4 0 2 1 0]
[9 10 11 9 7 11 16 17 11 8 7] ->
[2 4 0 2 1 0 5 6 0 3 1]
[1 3 16 19 14] ->
[0 1 3 4 2]
[18 8] ->
[1 0]
[13 4 9 6] ->
[3 0 2 1]
[16 16 18 6 12 10 4 6] ->
[1 1 5 0 4 3 2 0]
[11 18] ->
[0 1]
[14 18 18 11 9 8 13 3 3 4] ->
[7 1 1 5 4 3 6 0 0 2]
[20 19 1 1 13] ->
[3 2 0 0 1]
[12] ->
[0]
[1 14 20 4 18 15 19] ->
[0 2 6 1 4 3 5]
[13 18 20] ->
[0 1 2]
[9 1 12 2] ->
[2 0 3 1]
[15 11 2 9 10 19 17 10 19 11 16 5 13 2] ->
[7 2 0 5 1 3 9 1 3 2 8 4 6 0]
[5 4 2 2 19 14 18 11 3 12 20 14 2 19 7] ->
[5 4 0 0 2 1 9 7 3 8 10 1 0 2 6]
[9 11 13 13 13 12 17 8 4] ->
[3 4 0 0 0 5 6 2 1]
[10 14 16 17 7 4 3] ->
[3 4 5 6 2 1 0]
[2 4 8 7 8 19 16 11 10 19 4 7 8] ->
[4 1 0 2 0 3 7 6 5 3 1 2 0]
[15 17 20 18 20 13 6 10 4 19 9 15 18 17 5] ->
[0 1 3 2 3 9 6 8 4 10 7 0 2 1 5]
[15 14 4 5 5 5 3 3 19 12 4] ->
[5 4 2 0 0 0 1 1 6 3 2]
[7 12] ->
[0 1]
[18 5 18 2 5 20 8 8] ->
[2 0 2 3 0 4 1 1]
[4 6 10 7 3 1] ->
[2 3 5 4 1 0]
[5] ->
[0]
[6 12 14 18] ->
[0 1 2 3]
[7 15 13 3 4 7 20] ->
[0 4 3 1 2 0 5]
[10 15 19 14] ->
[0 2 3 1]
[14] ->
[0]
[19 10 20 12 17 3 6 16] ->
[6 2 7 3 5 0 1 4]
[9 4 7 18 18 15 3] ->
[4 2 3 0 0 5 1]
[7 4 13 7] ->
[0 1 2 0]
[19 1 10 3 1] ->
[3 0 2 1 0]
[8 14 20 4] ->
[1 2 3 0]
[17 20 18 11 1 15 7 2] ->
[5 7 6 3 0 4 2 1]
[11 4 3 17] ->
[2 1 0 3]
[1 9 15 1 20 8 6] ->
[0 3 4 0 5 2 1]
[16 13 10] ->
[2 1 0]
[17 20 20 12 19 10 19 7 8 5 12 19] ->
[7 2 2 1 0 6 0 4 5 3 1 0]
[18 11] ->
[1 0]
[2 16 7 12 10 18 4 14 14 7 15 4 8 3 14] ->
[3 9 2 7 6 10 1 0 0 2 8 1 5 4 0]
[5 7 2 2 16 14 7 7 18 19 16] ->
[3 0 1 1 2 4 0 0 5 6 2]
[8 6 17 5 10 2 14] ->
[3 2 6 1 4 0 5]
Это код-гольф , поэтому выигрывает самая короткая действительная заявка (в байтах).
code-golf
array-manipulation
Esolanging Fruit
источник
источник
Ответы:
Python 2 ,
6254 байтаПопробуйте онлайн!
Редактировать: сохранено 8 байт через карту спасибо Maltysen
источник
lambda L:map(sorted(set(L),key=L.count)[::-1].index,L)
Pyth -
121110 байтТестовый пакет .
источник
mx_o/QN{Q
.Japt , 11 байт
Проверьте это онлайн!
объяснение
источник
J 11 байт
Попробуйте онлайн!
объяснение
источник
Röda , 55 байт
Попробуйте онлайн!
источник
Haskell ,
939185 байтПопробуйте онлайн!
РЕДАКТИРОВАТЬ: Спасибо @Laikoni за удаление 6 байтов!
Не очень коротко, но я не могу думать ни о чем другом. Идея состоит в том, чтобы перебрать массив (
x<-a
) и выполнить поиск в списке кортежей ((i,y:_)<-
...,x==y
), который присваивает неотрицательное целое число каждому уникальному элементу во входных данных на основании его распространенности. Этот список кортежей генерируется сначала путемsort
ввода входных данных, включенияgroup
его в подсписки из равных элементов, сортировки этого списка по длине подсписков (sortOn((0-).length)
; длина сводится к нулю для сортировки в «нисходящем» порядке), а затем, наконец, сжатия его с бесконечным списком. с шагом 0. Мы используем сопоставление с образцом, чтобы извлечь фактический элемент из подспискаy
.источник
(i,y:_)
отброситьhead<$>
деталь и заменить круглые скобки на$
.Mathematica, 94 байта
Попробуйте онлайн!
источник
CJam,
1714 байтов-3 байта благодаря Питеру Тейлору
Это версия игры в гольф, которую я использовал для создания тестовых случаев.
Это анонимный блок, который ожидает ввода в виде массива поверх стека и выводит массив поверх стека.
Объяснение:
источник
$W%
.TI-BASIC, 66 байтов
объяснение
источник
Perl 5 , 77 + 1 (-a) = 78 байт
Попробуйте онлайн!
источник
JavaScript (ES6), 91 байт
Использование списка уникальных значений, отсортированных по частоте.
Тест
источник
PHP , 92 байта
Попробуйте онлайн!
источник
R , 58 байт
Попробуйте онлайн!
Порт Часов Брауна в Python ответ .
table
вычисляет количество каждого элемента вx
(сохраняя значения в качествеnames
атрибута),order
возвращает перестановку индексов вz
иmatch
возвращает индекс первого совпаденияx
вnames(z)
. Тогда это вычитается,1
потому что индексы R основаны на 1.источник