Ваша задача сегодня состоит в том, чтобы написать программу или функцию, которая берет список l
и определяет позиции, в l
которых l
появляется каждый последующий отсортированный элемент .
Другими словами, выведите индекс наименьшего значения, затем индекс второго наименьшего значения и т. Д.
Можно предположить, что входной массив будет содержать только положительные целые числа и будет содержать хотя бы один элемент.
Тестовые случаи:
Input | Output (1-indexed)
[7, 4, 5] | [2, 3, 1]
[1, 2, 3] | [1, 2, 3]
[2, 6, 1, 9, 1, 2, 3] | [3, 5, 1, 6, 7, 2, 4]
[4] | [1]
Когда появляются два или более элемента с одинаковым значением, их индексы должны появляться рядом друг с другом от наименьшего к наибольшему.
Это код-гольф , побеждает меньше байтов!
Ответы:
Желе , 1 байт
Попробуйте онлайн!
источник
Дьялог АПЛ, 1 байт
Dyalog APL имеет встроенную функцию
оператора(спасибо Zacharý за прояснение этого), чтобы сделать это.пример
Здесь я индексирую в списке отсортированные индексы, чтобы вернуть список в порядке возрастания.
источник
⍋
функции считаются функциями, а подобные вещи¨⍨⍣.∘/\⌿⍀⌸⍤
- операторами.Haskell ,
4342 байта1
-indexed:Попробуйте онлайн!
-1
байт благодаря @ ÖrjanJohansen!источник
map snd.sort.(`zip`[1..])
.Python 2 , 56 байт
Это решение 0-проиндексировано. Это злоупотребляет тем, что
sorted()
создает копию исходного списка.Попробуйте онлайн!
источник
Javascript (ES6), 39 байт
-2 байта благодаря @powelles
Это работает только в браузерах, где
Array.prototype.sort
стабильно.1-индексированная версия (47 байт):
Пример кода:
источник
[...a.keys()]
вместо того,a.map((_,i)=>i)
чтобы сэкономить вам пару байтов.Python 2 , 48 байт
Попробуйте онлайн!
источник
__<blahblah>__
синтаксис). Я сделаю немного желе, я не хочу терять тренировки :)Perl 6 ,
2721 байтПроверь это
Проверь это
Вдохновленный ответом Python
Expanded:
источник
Баш + кореутилс, 20
Попробуйте онлайн .
источник
Swift 4 , 82 байта
Тестирование.
объяснение
В Swift
l.sorted()
создает отсортированную копию исходного массива. Мы перебрать отсортированные элементы в списке и после печати индекса каждого элемента в исходном массиве сlet a=l.index(of:k)!;print(a)
, а затем, чтобы сохранить правильные индексы в массиве, мы относимl[a]
к0
, потому что это не влияет на наш нормальный выход.Обратите внимание, что это 0-индексированный, так как это порт моего решения Python. Если вы хотите, чтобы это было 1-проиндексировано, замените
print(a)
сprint(a+1)
или попробовать его в Интернете! ,источник
R , 5 байт
Для этого есть встроенная функция.
источник
order
это уже функция, поэтому вам не нужно обрабатывать ввод с помощьюscan()
. Это будет 5 байтов.rank()
спас бы байтrank
ответ @JarkoDubbeldam, но я его больше не вижу.Рубин , 40 байт
Попробуйте онлайн!
источник
MATL , 2 байта
Попробуйте онлайн!
Ввод и вывод неявные.
источник
J , 2 байта
Попробуйте онлайн!
Индексирование на основе нуля.
источник
Октава , 17 байт
Попробуйте онлайн!
Octave похож на MATLAB, но со встроенным назначением, что делает возможными вещи, которые доставляют людям головную боль в Mathworks HQ. Неважно, что вы называете
y
, но вы не можете обойтись без этой фиктивной переменной, насколько я знаю.источник
МОИ , 3 байта
МОЯ также имеет встроенный для этого!
Попробуйте онлайн!
Как?
Оцененный ввод, оценка вверх, затем вывод с новой строкой.
Индексируется однако вы устанавливаете индекс, с помощью
⌶
/0x48
. (Может даже быть странным целым числом, например-1
или2
, по умолчанию это1
).источник
Java 8, 128 + 19 = 147 байт
На основании г - Xcoder в растворе . 0 на основе. Лямбда принимает входные данные
Integer[]
и возвращаетInteger[]
. Число байтов включает в себя лямбда-выражение и требуемый импорт.Попробуйте онлайн
Неуправляемая лямбда
Примечания
Я использую
Integer[]
вместо того,int[]
чтобы разрешить использованиеArrays.asList
, которое не имеет примитивных версий.Integer
предпочтительнее,Long
потому что значения используются в качестве индексов массива и требуют преобразования.Это оказалось короче моего лучшего решения в процедурном стиле
List
из-за стоимости имен классов и методов.Это также превзошло решение, которое я пробовал, чтобы поток входных данных отображался на (значение, индекс) парами , отсортированные по значениям и сопоставленные с индексами, в основном из-за багажа, необходимого для сбора потока.
Подтверждения
источник
j
:l->{Integer o[]=l.clone(),s[]=l.clone(),i=0;for(Arrays.sort(s);i<l.length;l[o[i]=Arrays.asList(l).indexOf(s[i++])]=0);return o;}
(19 + 128 байт).Common Lisp, 82 байта
Попробуйте онлайн!
источник
Clojure, 39 байт
источник
{map *.key,(sort *.value,(0..* Z=> @_))}
CJam , 12 байт
Попробуйте онлайн!
источник
MATLAB / Octave , 29 байт
Попробуйте онлайн!
источник
@(X)([~,y]=sort(X))
, и, хотя я искал способ получитьy
от этого, я понял, что наy
самом деле это возвращаемое значение из назначения, и более тщательная проверка показала, что скобки даже не нужны. MATLAB любит все явное; Октав счастлив, когда это однозначно.JavaScript (ES6), 69 байт
0 индексированные. Работает для списков, содержащих до 65 536 элементов.
Контрольные примеры
Показать фрагмент кода
источник
n=>a.indexOf(n)
на простоa.indexOf
?Array#map
3 функцииArray#indexOf
передаются функции обратного вызова и ожидают 2, так что это даст нежелательные результаты.Python 3 , 52 байта
0 индексированные. Основываясь на ответе Хаскелла Брюса Форте здесь и ответе Руби ГБ здесь .
Попробуйте онлайн!
источник
Шелуха ,
107 байтЭто прямой порт моего ответа на Haskell , также
1
-индексированный:Попробуйте онлайн!
Ungolfed / Разъяснения
источник
Java (OpenJDK 8) , 72 байта
Попробуйте онлайн!
Принимает
List<Integer>
, возвращаетStream<Integer>
содержащий результаты.Мы получаем поток на основе исходного списка, сортируем его, а затем сопоставляем каждое число с его индексом в списке. Для размещения дублирующих элементов мы устанавливаем исходный элемент в списке на
0
.источник
SmileBASIC, 67 байт
Все очень просто: генерировать список чисел от 1 до (длина массива) и сортировать его в том же порядке, что и входные данные.
источник
Python 3 с Numpy ,
3826 байт12 байтов, сохраненных благодаря Джо Кингу (не нужно давать имя функции)
Выход основан на 0.
Попробуйте онлайн!
источник
numpy.argsort
без лямбда-частиnumpy.argsort;import numpy
я получаю сообщение об ошибке (numpy
еще не было импортировано), иimport numpy;numpy.argsort
мне нужно перейтиf=
к части кода. Знаете ли вы, что стандартная процедура в этих случаях? Двигайсяf=
и не считай?f=numpy.argsort
в нижнем колонтитуле05AB1E , 4 байта
Попробуйте онлайн!
источник
Пари / ГП , 16 байт
Попробуйте онлайн!
источник
PHP , 54 байта
Попробуйте онлайн!
Это с нулевым индексом. Просто сортирует массив и возвращает ключи.
источник
<?php
Тег не является необходимым для функции. 48 байтов.Tcl , 21 байт
(0-индексированные)
Попробуйте онлайн!
источник