Цель этой задачи состоит в том, чтобы взять массив положительных целых чисел и перечислить его индексы, группируя подобные элементы.
Перечисление без каких-либо дубликатов выполняется простым выводом массива пар (value, index)
, например, [3, 4, 13, 9, 2]
=> [[3,1],[4,2],[13,3],[9,4],[2,5]]
.
Однако, если данный элемент появляется во второй раз, ему не присваивается собственная пара, а вместо этого добавляется в группу его первого вхождения. Если в нашем примере выше мы заменили 9 на 3, то в выводе мы удалили [9,4]
и заменили [3,1]
на [3,1,4]
.
В выходных данных группы должны быть упорядочены по их первому вхождению, а индексы должны быть в порядке возрастания. Элемент должен быть первым в группе, перед его индексами. Выход может быть 0 или 1 проиндексирован. Вы можете предположить, что массив имеет хотя бы один элемент.
Тестовые случаи:
Input | Output (One-indexed)
[3, 2, 2, 3] | [[3, 1, 4], [2, 2, 3]]
[17] | [[17, 1]]
[1, 1] | [[1, 1, 2]]
[1, 1, 2] | [[1, 1, 2], [2, 3]]
[1, 2, 3, 4] | [[1, 1], [2, 2], [3, 3], [4, 4]]
[1, 1, 1, 1] | [[1, 1, 2, 3, 4]]
Это код-гольф , побеждает меньше байтов!
[[17,"1"]]
? (Пока не знаю, смогу ли я сохранить эти байты таким образом, все еще работая над этим!)[[3, [1, 4]], [2, [2, 3]]]
этого?Ответы:
Дьялог АПЛ, 5 байт
Попробуйте онлайн!
,⌸
на 2 байта почти работает, но имеет конечные нули: /источник
⌸
?,⌸
является конечными нулями, и нули никогда не будут входными, возможно ли сбросить все нули менее чем в 3 байта?J , 12 байт
Zero-индексироваться.
Попробуйте онлайн!
Если вы можете удалить всю работу, которую я выполняю с ящиками, вы, вероятно, сможете значительно сократить количество пользователей. Я посмотрю, смогу ли я понять это.
объяснение
Это, вероятно, слишком рано, чтобы объяснять (должно быть больше гольфов).
источник
05AB1E , 10 байтов
Попробуйте онлайн!
объяснение
источник
Python 3 ,
8382 байта-1 байт благодаря Mego
Попробуйте онлайн!
источник
j+1
->j
(индексы могут быть проиндексированы с нуля)Haskell , 48 байтов
Попробуйте онлайн!
источник
Атташе , 15 байт
Попробуйте онлайн!
Это интересный случай
=>
операторной формыMap
. При введении двух функциональных аргументовf
иg
,Map
возвращает функциюf => g[x]
надx
. То есть, RHS применяется к входу, затем LHS отображается.Встроенный
Positions
генерирует массив, представляющий группирование записей по индексам. По умолчанию, если второй аргумент не указан,Positions
будет использоваться первый аргумент.Flat
Затем отображается на каждый элемент, как того требует вопрос.Альтернативные решения
31 байт
Попробуйте онлайн!
Довольно короткая альтернатива без встроенных функций.
MapArgs
это функцияMap
, за исключением того, что вы можете ввести в нее дополнительные аргументы. Например,MapArgs[{_1 + _2}, 1..3, 3]
есть[4, 5, 6]
. МолMap
, он становится карри, когда поставляется с двумя функциональными аргументами. Функция, которая будет отображенаConcat#~Indices
, является вилкой. Эта вилка применяется кUnique
элементам ввода и самого ввода. Это приводит кConcat[_, Indices[_2, _]]
(с аргументамиIndices
местами через~
), какие пары элемента привязывается (_
) с индексами указанного элемента_
во входном массиве, который_2
(как ffed черезMapArgs
).43 байта
Попробуйте онлайн!
На самом деле это просто более многословное (но немного более читабельное) сочетание решений № 1 и № 2.
источник
Желе , 6 байт
Попробуйте онлайн!
Объяснение:
источник
Pyth , 7 байт
0 индексированные.
Попробуй это здесь! Альтернатива.
Как?
источник
MATL , 8 байт
Попробуйте это на MATL Online
объяснение
источник
&f
но так и не заработал.На самом деле , 24 байта
Попробуйте онлайн!
Объяснение:
источник
R , 56 байт
Попробуйте онлайн!
Это моя первая попытка Codegolf, поэтому любые отзывы приветствуются!
источник
x
, но должен быть способ чтения ввода - обычно мы используемscan
или определяем функцию. Кроме того, он должен выводить, так что придется обернуть это вprint
илиcat
.Wolfram Language (Mathematica) , 40 байт
Спас Байт благодаря Мартину Эндеру.
Попробуйте онлайн!
источник
@*PositionIndex
работает?@*
- это композиция функций.PositionIndex
в основном выполняет всю работу, но возвращает список вместо списка.{#,##&@@#2}&
сохраняет байт.JavaScript (ES6), 64 байта
0 проиндексировано
Обратите внимание, это предполагает, что входные числа положительны, поэтому v> 0
Тест немного изменен (1 проиндексирован), чтобы соответствовать тестам
источник
APL NARS, 24 байта, 12 символов
-4 байта благодаря тесту Адама:
источник
{∪⍵,¨⍸¨⍵=⊂⍵}
SWI-Пролог ,
165117 байт-48 байтов благодаря подсказкам для игры в гольф Prolog .
Попробуйте онлайн!
объяснение
источник
K (ок) , 10 байт
Решение:
Попробуйте онлайн!
Примеры:
Объяснение:
Оценка выполняется справа налево. Я все еще думаю, что это способно к гольфу дальше ...
Заметки:
x
,(,/)'+(!;.)@'=
отказался от такого подхода ...источник
1+
.Юлия 0,6 , 37 байт
Спасибо Павлу за 1 байт.
Попробуйте онлайн!
источник
]
иfor
за -1 байт.JavaScript (ES6), 68 байт
0 индексированные.
Контрольные примеры
Показать фрагмент кода
источник
PHP 4.1, 88 байт
Да, это довольно долго.
Предполагается, что файл по умолчанию
php.ini
(short_open_tag = On
иregister_globals = On
).Это представляет массив в удобочитаемом виде.
Значения могут быть переданы POST, GET и COOKIE внутри клавиши «A».
Для современной версии можно использовать (90 байт):
Результат тот же, за исключением того, что все значения должны быть переданы через параметры GET внутри клавиши «A».
источник
Perl 6 ,
6361 байтПротестируйте это (на основе 0)
Проверьте это (тот же алгоритм на основе 0)
Expanded:
источник
Japt ,
149 байт0 индексированные.
Попытайся
источник
PHP 7.4+ , 71 байт
* 73 байта, чтобы процитировать
$_GET
ключ и избежать предупреждений.Фрагмент: ( Демо )
Основываясь на репутации, я предполагаю, что IsmaelMiguel знает лучший способ опубликовать php-код в этом сообществе, поэтому я строю его на основе . Мне не ясно, будет ли
<?
он включен в мой фрагмент . Поскольку это мой первый пост, я рад, что кто-нибудь объяснит, есть ли какой-нибудь ненужный синтаксис. ps Я также читал Советы по игре в гольф на PHP, который мне кажется потрясающим кандидатом на переход в Meta .Улучшения, внесенные в фрагмент кода Измаила:
array_values()
чтобы переиндексировать вывод.источник
Чисто ,
6160 байтПопробуйте онлайн!
Вывод 0 проиндексирован
источник
Котлин , 83 байта
украшенный
Тест
TIO
TryItOnline
источник
i
была предопределена. Вы можете сделать это действительным, преобразовав его в лямбду, которая принимает параметрi
.Swift 4, 107 байт
... Yikes
Ungolfed:
Жаль, что словарь теряет порядок, вынуждая меня тратить столько символов на повторную сортировку. Такого рода злоупотребления неявных аргументов закрытия (
$0
,$1
, ...) и неявных членов кортежа (.0
,.1
, ...) является uhhhhh не очень.источник
Perl 5 , 63 + 1 (
-a
) = 64 байтаПопробуйте онлайн!
источник
Рубин ,
5452 байтаЭта версия допускает ноль (53 байта):
Попробуйте онлайн!
источник
nil
не является положительным целым числом.