Дан список из двух или более прописанных серийных номеров одинаковой длины, превышающих два, например
[[ "three" , "one" , "four" ],
[ "one" , "five" , "nine" ],
[ "two" , "six" , "five" ],
[ "three" , "five" , "eight" ]]
отсортировать список по номерам, которые представляют слова:
[[ "one" , "five" , "nine" ],
[ "two" , "six" , "five" ],
[ "three" , "one" , "four" ],
[ "three" , "five" , "eight" ]]
Вы можете потребовать, чтобы числа были написаны в нижнем или верхнем, но не в смешанном регистре.
Контрольные примеры
[["three","one","four"],["one","five","nine"],["two","six","five"],["three","five","eight"]]
дает[["one","five","nine"],["two","six","five"],["three","one","four"],["three","five","eight"]]
[["two","seven"],["one","eight"],["two","eight"],["one","eight"],["two","eight"],["four","five"]]
дает[["one","eight"],["one","eight"],["two","seven"],["two","eight"],["two","eight"],["four","five"]]
[["one","four","one","four","two"],["one","three","five","six","two"],["three","seven","three","zero","nine"]]
дает[["one","three","five","six","two"],["one","four","one","four","two"],["three","seven","three","zero","nine"]]
[["zero","six","one"],["eight","zero","three"],["three","nine","eight"],["eight","seven","four"],["nine","eight","nine"],["four","eight","four"]]
дает[["zero","six","one"],["three","nine","eight"],["four","eight","four"],["eight","zero","three"],["eight","seven","four"],["nine","eight","nine"]]
["three","one","four"] === 314
?[314,159,265,358]
→[159,265,314,358]
.You may require the numbers to be spelled in lower or upper, but not mixed, case.
Ответы:
Шелуха ,
98 байтПопробуйте онлайн!
Алгоритм, "вдохновленный" ответом Stax рекурсива (я только что немного изменил строку поиска), поднимите его!
Хитрость заключается в отображении каждой буквы в ее положение в строке
tfsen
(сжато в конце этой программы). Списки шелухи основаны на 1, а отсутствующие элементы возвращают 0, поэтому мы получаем следующее отображение:Как видите, списки идеально упорядочены.
Для ясности, вот как работает сравнение списков в Husk (и во многих других языках):
источник
tfrsen
но я предполагаю, что такие слова какwith
иsen
там помогают сжатию.[1,0,0]
считается меньше, чем[1,0,0,0]
(но для этой программы это не будет иметь никакого значения)Stax ,
2422171614 байтЗапустите и отладьте его
Эта программа принимает массивы строчных букв для ввода. Вывод разделен новой строкой, вот так.
Эта программа сортирует входные данные, используя порядок, полученный при определенном преобразовании. Каждый символ в каждом слове заменяется своим индексом в строке
"wo thif sen"
. Исходные массивы отсортированы по этому порядку. Затем результаты печатаются после объединения с пробелом.Пробелы не служат цели, но на самом деле позволяют большее сжатие в строковом литерале.
источник
Желе , 12 байт
Монадическая ссылка.
Попробуйте онлайн! ... или посмотрите набор тестов
Как?
Преобразование цифр в порядковые и затем из базы 10, затем взятие по модулю 4752, затем 147 дает восходящий порядок:
Затем его можно использовать в качестве ключевой функции для сортировки:
источник
Python , 62 байта
Попробуйте онлайн! ... или посмотрите набор тестов
Замечания:
который работает в Python 2 (но не 3) длиннее на два байта.
источник
APL (Dyalog Classic) , 12 байт
Попробуйте онлайн!
Вот как я нашел подходящий левый аргумент для двоичного
⍒
(⍋
сначала я попытался и длина 6):источник
Perl 6 , 37 байт
Попытайся
Expanded:
Блок кода примет значение формы
("three","one","four")
и переведет его в("3","1","4")
значение, которое.sort
можно легко использовать.источник
APL (Dyalog) , 38 байт
Попробуйте онлайн!
На основе потрясающего решения Джонатана Аллана .
источник
⊂⌷¨⍨∘⍋(531⊥531|6779|36⊥9+⎕A⍳⊢)¨
но вы можете сделать это намного проще, менее чем за половину вашего текущего количества байтов.Рубин, 48 байтов
Используется тот факт, что
"zero".to_i(35)
0 (поскольку «z» не является действительной цифрой в базе 35), так что намного проще использовать формулу для грубых формул для остальных девяти цифр.источник
K (нгн / к) , 14 байтов
Попробуйте онлайн!
источник
JavaScript (Node.js) , 70 байт
Попробуйте онлайн!
источник
Рубин , 47 байтов
Попробуйте онлайн!
Использует тот факт, что использование основания меньше максимальной цифры дает нулевой результат (как указал гистократ в своем ответе )
источник
Python 2 ,
858180 байтПросто использует первые две буквы каждого слова для определения числа, затем сортирует каждый список, используя эту функцию индексации в качестве ключа.
Попробуйте онлайн!
Сохранено 4 байта, благодаря Джонатану Аллану
источник
Рубин , 49 байтов
Попробуйте онлайн!
источник
05AB1E , 27 байт
Попробуйте онлайн!
источник
Haskell ,
133122109107106 байтUngolfed:
источник
Python 2 , 59 байт
Попробуйте онлайн!
Опираясь на решение Джонатана Аллана Python 3 ...
источник
Java (JDK 10) , 132 байта
Попробуйте онлайн!
источник
Рубин , 64 байта
Попробуйте онлайн!
Лямбда, принимающая 2D-массив строк и возвращающая 2D-массив строк.
Откат от Python 2 от mbomb007 отвечает за -26 байт от того, что я собирался опубликовать.
источник
Perl 5 , 103 байта
Попробуйте онлайн!
источник
Сетчатка 0.8.2 , 38 байт
Попробуйте онлайн! Ссылка включает тестовый набор. Работает, временно заменяя буквы
zowithfsen
с их положением в этой строке, что позволяет сортировать цифры лексически.источник
Желе ,
302827 байтПопробуйте онлайн!
-1 спасибо Джонатану Аллану.
Находит индекс каждой цифры в строке 'onetwo ... nine', затем сортирует, используя это как ключевую функцию с
Þ
. Не нужно включать'zero'
в начале, потому что поиск первых двух символов'zero'
не удастся и0
будет возвращен вместо индекса, что делает'zero'
лексикографически «рано».источник
'zeontw...ni'
закончилось дольше.Python 3, 141 байт
Попробуйте онлайн!
источник
C (лязг) , 229 байтов
Попробуйте онлайн!
Не существует простого способа отправки массива массивов строк в функции C, поэтому в духе code-golf я взял небольшую свободу в формате ввода.
f()
принимает массив указателей на строки, где каждая строка представляет собой число, представленное прописными цифрами, разделенными запятыми, в нижнем регистре. Кроме того, ему нужно количество строк в массиве во втором параметре. Я надеюсь, что это приемлемо.f()
заменяет указатели на месте в отсортированном порядке, используяqsort()
.r()
читает входной номер из разделенной запятыми числовой строки. Он сравнивает только первые два символа для определения номера.c()
функция сравненияисточник
strstr("i"-19,t)-"zeontwthfofisiseeini"
? Это компилятор или стандарт?.rodata
,0x69 0x00
а компилятор размещает адрес"i"
в конце"zeo..."