Учитывая положительное целое число, мы можем сформировать новое число, которое описывается его цифрами, взятыми попарно (с добавлением начального 0 для чисел с нечетным числом цифр).
Например:
1234 можно прочитать как один 2, три 4 с, так что для 1234 выводится 2444.
643 имеет нечетное число цифр, поэтому добавляется начальный ноль, чтобы сделать его четным. Тогда 0643 можно прочитать как: ноль 6 с, четыре 3 с, следовательно, результат будет 3333.
(Это OEIS A056967 ).
Задача: по массиву натуральных чисел отсортировать их по значению, описанному парой цифр, в порядке возрастания. Порядок не имеет значения между входными числами, которые приводят к одному и тому же значению.
Ввод : массив / список / набор натуральных чисел. Начальные нули на входе не допускаются и вводятся в виде строк / списков цифр / и т. Д. не допускаются - входные данные должны быть настолько близки к целочисленному / числовому типу, насколько ваш язык способен использовать.
Выход : массив, отсортированный вышеупомянутым способом, возвращаемый любым из обычных способов (функция возвращает значение / STDOUT / выкрикивая в пустоту / и т.д.). Вы можете распечатать их по отдельности, вернуть их в виде чисел, строк или списков цифры.
Контрольные примеры
Input
Output
[19, 91, 2345, 2023]
[19, 2023, 2345, 91]
[25257, 725, 91, 5219, 146125, 14620512]
[725, 5219, 14620512, 91, 146125, 25257]
[123130415 3335 91 111111111 528 88]
[528, 111111111, 123130415, 3335, 88, 91]
[1 21 33 4 5]
[1 4 5 21 33]
[3725, 10, 2537, 1, 1225, 2512]
[10, 1, 1225, 2512, 2537, 3725]
[125, 26, 1115, 1024]
[1115, 1024, 125, 26]
(В 4-м тестовом случае 1, 4 и 5 все оцениваются в 0, и поэтому могут быть отсортированы между собой в любом порядке. Аналогично в пятом тестовом случае 10 и 1 оба оценивают в 0, и поэтому могут быть отсортированы в либо заказ.)
(Связанный: Скажите, что вы видите , Один 1, Два 1, Один 2 Один 1
Спасибо Кевину Круйссену за помощь в прояснении вопроса в Песочнице.
strtoi
возвращает целое число - правильно? Если так, то все нормально, это законно, как есть.Ответы:
APL (Dyalog) , 26 байтов
Спасибо ngn за сохранение 1 байта :)
Попробуйте онлайн!
Вдохновение взять от Дзайма и Нгн
источник
100⊥⍣¯1⊢⍵
->⍵⊤⍨⍵/100
работает на 26.100⊥⍣¯1⊢⍵
->⍵⊤⍨⍴⍨100
{⍵[⍋⌽↑,⍨⌿⍴⌿⊃⊥⍣¯1/10 100⍵]}
R , 141 байт
Попробуйте онлайн!
Довольно трудоемкий ответ - но он работает на всех тестовых примерах. Создает вывод пары цифр и сортирует вход в соответствии с этим.
источник
v
для переменной из ваших других ответов - я никогда не использовалv
раньше. И хорошее использованиеintToUtf8
!R , 120 байт
Попробуйте онлайн!
Разоблаченный код с объяснением:
источник
[!1:0]
Трюк реально хорошо - никогда не видел его раньше.[!1:0]
парни прячут что-то аккуратное. Я играл с этим и с советами по игре в гольф R, пытаясь получить число из цифр арифметически (безas.double
), но только придумал 132-байтовую версию: TIOPyth , 14 байт
Попробуй это здесь! | Тестирование! | 12 байтов со списком цифр ввода / вывода
Как это устроено?
источник
Желе , 10 байт
Попробуйте онлайн!
Проверьте набор тестов!
Как это устроено
источник
2537
и3725
не представляют одно и то же число.[2537, 3725]
. Я никогда не сомневался, что это совпадение, поэтому я включил эту записку в ответPerl 6 , 53 байта
Попробуйте онлайн!
Анонимно Любая лямбда, которая берет список значений и сортирует его по описанию пар чисел.
В этом случае я меняю номер на противоположный, затем делаю
rotor
список на два, чтобы получить каждую пару чисел. Это исключит первую цифру для чисел нечетной длины, но, поскольку это преобразуется в0
умноженное на это число, все в порядке. Кроме того, он выравнивает значения для[x]
правильного использования .источник
Python 2 ,
8074 байтаПопробуйте онлайн!
источник
Haskell ,
8988 байтСохраненный байт благодаря ovs
Последняя строка определяет анонимную функцию, которую можно использовать следующим образом:
Основные функциональные возможности обеспечиваются оператором инфикса,
(?)
который отслеживает множительm
и оставшиеся входные данные RLEn
.(?)
непрерывно вычитает 10 из, вn
то время как есть десятки цифр, из которых нужно вычитать, и при этом она выталкивает еще одну копию последней цифры в начало вывода (через множительm
, который увеличивается на 10 каждый раз). Когда место в десятках исчерпано, последние две цифры отбрасываются, и процесс повторяется до тех пор, пока число не уменьшится до 0. Наконец, мы используем оператор (с начальным множителем 1) в качестве ключа сортировки.источник
m?n|n<1=0|n%100<10=m?div n 100|w<-n-10=m*10?w+m*n%10
на байт короче.Шелуха , 10 байт
Попробуйте онлайн!
объяснение
источник
Dyalog APL,
41393635313029 байтПопробуйте онлайн!
-2 благодаря Cows quack
-4 (плюс -4 за базовую идею преобразования) благодаря ngn
-2 благодаря H.PWiz
источник
⊃,/
может стать∊
{⍺⍴⍨⍎⍵}
->⍴⍨∘⍎
{⍵[⍋F ⍵]}
как⊂⌷¨⍨∘⍋F
C (gcc) (32-битные системы),
188177176 байтПопробуйте онлайн!
на
amd64
надстройке флаг-m32
для компиляции.Использование :
s(x,n);
гдеx
указывает на массив целых чисел для сортировки иn
является длиной этого массива.Второй тест дает неверный результат, потому что преобразование
25257
дает2222277777
переполнение 32-битного целого числа - добавлен 5-й тест без этого числа.Объяснение:
источник
d()
длинна из-за строк и функций, связанных с ними, вы можете сохранить много байтов, просто прочитав последние 2 цифры и сформировав вывод следующим образом:o;u;i;d(x){for(u=1,o=0;x;x/=100)for(i=0;i++<x%100/10;o+=x%10*u,u*=10);x=o;}m(int*a,int*b){u=d(*a)-d(*b);}s(l,c){qsort(l,c,4,m);}
вы также будете сохранять байты, избегая объявления и инициализацииchar
s.b-~sprintf(b+1,"%d",x)%2
вместоb+!(sprintf(b+1,"%d",x)&1)
x/10%10
вместоx%100/10
Python 2 ,
10210197101 байтПопробуйте онлайн!
источник
Брахилог , 18 байт
Попробуйте онлайн!
объяснение
Множество мелочей, необходимых для учета трех разных случаев: нечетное количество цифр, пара по 0 раз и нормальные пары.
источник
|Ȯt
это ненужно, и фактически делает его сортировку неправильной: это эквивалентно заполнению 1 вместо 0, поэтому, учитывая [125, 26, 1], сортирует его как [1, 26, 125] вместо [1 , 125, 26].Perl 5 , 76 байт
Функция вместо однострочника на этот раз.
Совершенно прямо:
g
сортирует входные данные численно, используяh
для преобразования чисел.h
делает это с помощью регулярного выраженияs/(.)(.)/$2x$1/gre
(которое, вероятно, достаточно читабельно). И0
левый отступ делается с0 x("@_"=~y///c%2)."@_"
(гдеy///c
краткий способ записиlength
,x
оператор повтора и.
конкатенация).Попробуйте онлайн!
Я ожидаю увидеть некоторые короткие ответы Perl, хотя!
источник
Сетчатка , 44 байта
Попробуйте онлайн! Генерировать ключ сортировки в начале строки сложнее, но короткая стадия сортировки приводит к общей экономии 3 байта. Объяснение:
Примените первые два этапа на каждой линии в отдельности.
Совпадение и копирование четного числа завершающих цифр.
Замените каждую пару цифр их описанным значением.
\G\d
Вызывает матч до остановки в пространстве.Сортировать численно.
Удалить ключи сортировки.
источник
05AB1E ,
2019 байтовИсправлена ошибка в +1 байт, а затем добавлялось в -2 байта благодаря @sundar .
Попробуйте онлайн или проверьте все тесты .
Можно определенно играть в гольф .. Не слишком рад этому ...
Объяснение:
источник
Атташе , 50 байт
Попробуйте онлайн!
объяснение
источник
JavaScript (ES8),
7270 байтПопробуйте онлайн!
источник
Japt, 13 байт
Попробуйте или запустите все тесты
объяснение
источник
Желе , 14 байт
Попробуйте онлайн!
источник
Рубин , 71 байт
Попробуйте онлайн!
источник
Java 11,
204189 байтПринимает List of Longs в качестве параметра и сортирует этот input-List (без возврата нового List).
Попробуйте онлайн (ПРИМЕЧАНИЕ:
String.repeat(int)
эмулируется,repeat(String,int)
потому что Java 11 еще не на TIO. Число байтов остается тем же.)Объяснение:
источник
+""
чтобы преобразовать число в строку. Должно быть исправлено сейчас. :)