Вдохновленный этим вопросом и уточненный Луисом Мендо .
Вызов
Учитывая двумерную матрицу целых чисел, каждая строка имеет максимальное значение. Один или несколько элементов каждой строки будут равны максимальному значению их соответствующей строки. Ваша цель состоит в том, чтобы определить, какие столбцы содержат наибольшее количество записей, равных максимальному значению их соответствующей строки, а также числу построчных максимумов, найденных в этих столбцах.
вход
- Входными данными будет непустая матрица
M
xN
(M
> 0 иN
> 0) в любой форме, подходящей для вашего языка по вашему выбору.
Выход
- Ваша программа должна возвращать индекс каждого столбца, содержащего максимальное количество построчных максимумов (либо в виде отдельных значений, либо в виде списка). Можно использовать индексацию на основе 0 или 1 (укажите в своем описании).
- Ваша программа также должна возвращать количество максимумов, которые присутствовали в этих столбцах (одно число).
- Порядок / формат вывода является гибким, но его следует пояснить в тексте, сопровождающем ваш ответ.
Дополнительная информация
- Все записи во входной матрице будут положительными целыми числами.
- Если максимальное значение строки совместно используется несколькими элементами в этой строке, все вхождения этого значения засчитываются в общую сумму их столбцов.
- Если несколько столбцов содержат одинаковое количество максимумов, вы должны вернуть список всех столбцов с таким количеством максимумов.
Пример
Рассмотрим вход
7 93
69 35
77 30
Строка 1 имеет максимум 93, что происходит только один раз, а именно в столбце 2. Строка 2: в столбце 1. Строка 3: также в столбце 1. Таким образом, столбец-победитель равен 1 с двумя максимумами. Таким образом, выход будет [1] [2]
. Если мы изменим вход на
7 93
69 35
77 77
вывод будет [1 2] [2]
, потому что оба столбца имеют 2 максимума.
Тестовые случаи
input => output ( [1-based index array], [nMaxima] )
----------------------------------------------
7 93
69 35 => [1], [2]
77 30
7 93
69 35 => [1 2], [2]
77 77
1 2 3 4 => [4], [2]
5 6 7 8
16 2 3 13
5 11 10 8 => [1 2 4], [1]
9 7 6 12
1 1 1 1 => [1 2 3 4], [1]
25 6 13 25 => [1 4], [1]
1
2
3 => [1], [4]
4
100 => [1], [1]
счет
Это код-гольф , выигрывает самый короткий код в байтах. Tiebreaker переходит к более раннему ответу.
Leaderboard
Ниже приведен фрагмент стека для анализа всех записей.
Ответы:
Желе , 9 байт
Входные данные представляют собой 2D-список, выходные данные представляют собой пару: список из индексов на основе 1 и максимальное количество максимумов.
Попробуйте онлайн! или проверьте все контрольные примеры .
Как это работает
источник
J, 27 байт
Это монадический глагол, используемый в случае второго примера следующим образом:
Вывод состоит из двух блоков и использует индексирование на основе 0. Попробуй это здесь!
объяснение
источник
MATL, 17 байт
Первый вывод - это максимальное количество максимумов, а второй вывод - столбцы, в которых это произошло (индексирование на основе 1).
Попробуйте онлайн!
объяснение
источник
MATL , 17 байт
Ввод - это двумерный массив, строки которого разделены точками с запятой. Таким образом, входные данные для тестовых случаев
Выходные данные: сначала максимальное количество максимумов, затем один или несколько индексов столбцов.
Попробуйте онлайн!
объяснение
Это использует другой подход от ответа Suever .
Сначала вычисляется матрица логических значений (
true
иfalse
), гдеtrue
указывается наличие максимума строки. Затем индексы столбцовtrue
значений извлекаются в вектор. Наконец, вычисляется режим этого вектора (максимальное количество максимумов) вместе со всеми наиболее частыми значениями (желаемые индексы столбцов).источник
Pyth,
201917 байт1 байт благодаря @Suever .
1 байт благодаря @Jakube .
Тестирование.
Вывод 0 проиндексирован.
Заказ отменен.
Все входы
Все выходы
Как это работает
источник
CJam ,
383531 байтНа 2 байта меньше благодаря @FryAmTheEggMan, также с помощью @quartata. Спасибо также @Dennis за удаление еще 4 байтов.
Вход имеет вид
Выходные данные - это массив индексов столбцов на основе 1 и числа.
Попробуйте онлайн!
источник
q~_::e>.f=:.+_:e>_@f{=U):Ua*~}p
сохраняет несколько байтов. Превращение его в кодовый блок сэкономит еще 1.{=U):Ua*~}
значит ...Пайк, 17 байт
Попробуй это здесь!
источник
Python 2, 106 байт
Ввод - это двумерный список чисел с плавающей запятой, вывод - пара: список основанных на 0 индексов и целое число
Проверьте это на Ideone .
источник
Юлия, 54 байта
Входные данные представляют собой матрицу, выходные данные представляют собой пару: список индексов на основе 1 и максимальное количество максимумов.
Попробуйте онлайн!
источник
JavaScript (ES6), 111 байт
Возвращает массив из двух элементов; первый - это максимальное количество максимумов, второй - массив столбцов с нулевым индексом с таким количеством.
источник
Октава,
4746 байтЭто создает анонимную функцию, которая автоматически присваивается
ans
и может быть запущена с помощьюans([1 2 3; 4 5 6])
. Он возвращает двухэлементный массив ячеек, где первый элемент - это максимальное количество максимумов, а второй - основанный на 1 индекс столбцов, содержащих эти максимумы.Все тесты
источник
Python 3, 142 байта
Алгоритм здесь в основном, пройти через каждую строку и увеличить количество столбцов, которые имеют максимум этой строки. Затем найдите максимальное количество баллов, найдите столбцы с максимальным баллом и верните их. Столбцы 1-индексированы. Я попытался выстроить это в лямбду, но с генерацией оценки столбец за столбцом это было 153 байта.
Тестовые случаи
источник
Clojure, 150 байт
Человек длинный, у меня такое ощущение, что это можно сильно упростить. По крайней мере, это дает правильный вывод.
источник
05AB1E , 14 (или 12) байтов
Выходы в формате
[[1-indexed columns-list], maxima]
.Попробуйте онлайн или проверьте все контрольные примеры .
Если
0
в списке столбцов разрешено иметь элементы, которые мы игнорируем, можно удалить на 2 байта меньше, удалив0K
:Попробуйте онлайн или проверьте все контрольные примеры .
Объяснение:
источник