Определение
Ранг слова определяется как позиция слова, когда все возможные перестановки (или расположения) его букв расположены в алфавитном порядке, как в словаре, независимо от того, являются ли слова значимыми или нет.
Давайте рассмотрим эти два слова - «синий» и «увиденный». Для начала, мы бы написали все возможные расположения букв этих слов в алфавитном порядке:
"blue": "belu","beul","bleu","blue","buel","bule","eblu","ebul","elub","elbu","eubl",
"eulb","lbeu","lbue","lebu","leub","lube","lueb","ubel","uble","uebl","uelb",
"ulbe","uleb"
"seen": "eens","eesn","enes","ense","esen","esne","nees","nese","nsee","seen",
"sene","snee"
Теперь давайте посмотрим слева и найдем расположение нужных нам слов. Мы видим, что слово «синий» находится на 4-й позиции, а «видимый» - на 10-й. Таким образом, ранг слова «синий» равен 4, а ранг «увиденного» - 10. Это общий способ вычисления ранга слова. Убедитесь, что вы начинаете считать только с 1.
задача
Ваша задача - написать код, который будет принимать любое слово и отображать его рейтинг. Ранг должен быть выходным. Будьте осторожны со словами, содержащими повторяющиеся буквы.
Примеры
"prime" -> 94
"super" -> 93
"bless" -> 4
"speech" -> 354
"earth" -> 28
"a" -> 1
"abcd" -> 1
"baa" -> 3
Вы можете считать ввод полностью строчными, и ввод будет состоять только из буквенных символов . Также, если введено пустое место или неверная строка, вы можете вернуть что угодно.
счет
Это код-гольф , поэтому выигрывает самый короткий код!
источник
O(n log n)
или меньше. (извините, нет Python) Моя заявка (C ++) занимает 2,53 секунды для решения теста 14.['h', 'e', 'l', 'l', 'o']
в отличие от'hello'
?Ответы:
Gaia , 4 байта
Попробуйте онлайн!
источник
Python 3 , 71 байт
Попробуйте онлайн!
источник
05AB1E , 5 байтов
Попробуйте онлайн! или как тестовый набор
объяснение
источник
Pyth , 6 байт
Тестирование.
объяснение
источник
Желе , 5 байт
Попробуйте онлайн! или посмотрите набор тестов
Как это работает
источник
Œ¿
, не работает.ṢŒ¿
?1
Python 2 , 78 байт
Попробуйте онлайн!
Python 3 , 73 байта
Попробуйте онлайн!
источник
CJam , 8 байт
Попробуйте онлайн!
+1 байт из-за 1-индексированного требования.
источник
Haskell , 56 байт
Попробуйте онлайн!
+6 байт из-за требования 1-индексации. :(
источник
Japt ,
810 байт0 индексированные.Poxy, ненужная 1-индексация, увеличивая мой счетчик байтов на 25%!Попробуй это
объяснение
á
получает все перестановки входных,â
удаляет дубликаты,n
сортирует их иb
получает индекс первого вхождения входа,U
.источник
J ,
2823 байта-5 байт благодаря FrownyFrog
Как это работает?
Попробуйте онлайн!
источник
1+/:~@~.@(A.~i.@!@#)i.]
Tcl, 196 байт
Tcl не имеет встроенного метода для вычисления следующей лексикографической перестановки, поэтому мы должны сделать это сами. Но подождите ... это короче сделать это с помощью простой рекурсивной функции, которая вычисляет все возможные перестановки в любом порядке.
Ungolfed:
источник
K (ок) ,
2318 байтРешение:
Попробуйте онлайн!
Примеры:
Объяснение:
Генерируйте перестановки индексов отсортированной входной строки, используйте их для индексации входной строки, возьмите отличия, посмотрите, где совпадает исходная строка, и добавьте один.
источник
Java 8, 211 байт
Объяснение:
Попробуйте онлайн.
источник
Питон 3 ,
183182 байтаПервый ответ, который запускается за полиномиальное время!
Попробуйте онлайн!
Все входные данные должны быть прописными, потому что ... они сохраняют байт.
Полная программа, принимает данные от
stdin
и доstdout
.Имена переменных: (вид неопрятного кода)
К сожалению,
from math import factorial as f
занимает ровно 1 байт.(Несвязанное примечание: я проверил
Combinatorica`
пакет Mathematica, ничего полезного, в том числеRankPermutation
)источник
Шелуха , 6 байт
Попробуйте онлайн! Я чувствую, что должен быть способ бросить
(
.Объяснение:
источник
чистый ,
113111 байтПопробуйте онлайн!
+3 байта для обработки 1-индексации: /
источник
APL (Dyalog Unicode) , 33 байта (SBCS)
Попробуйте онлайн!
источник
Python 3 ,
105104103 байтаПопробуйте онлайн!
источник
Рубин , 49 байтов
Попробуйте онлайн!
источник
JavaScript (ES6),
106100 байтКонтрольные примеры
Показать фрагмент кода
Как?
P () - наша рекурсивная функция перестановки. Но охватывающий объект P также используется для хранения рангов перестановок.
Код переноса теперь читается как:
источник
C ++, 230 байт
Согласно моему требованию, код должен быть исполняемым как есть. Предложение «только функция» в основном является мусором. : - @
Спасибо тем, кто любезно ответил на вопрос, что можно вырезать для меня. В интересах действительных кода я избегал популярного GCC-изизма, включающего <bits / stdc ++. H>, который я всегда считал плохим лазейкой.
Далее следует то, что осталось от моей первоначальной публикации:
Я всегда не уверен, когда использую C и C ++, что имеет значение для общего количества байтов. Согласно программе, функции или фрагменту? ответ все еще расплывчатый (я полагаю, что это не фрагмент). Так что я собираюсь использовать самую короткую из двух возможностей.
Здесь он не имеет необходимых заголовков и т. Д.
Это сокращает до 230 байт, треть этого стандартного шаблона требуется каждый программой C ++. (Итак, я не чувствую себя слишком плохо, не считая ее, но поскольку я никогда не видел какой-либо твердой жалобы, OP должен будет сказать мне, что он предпочитает удовлетворять, «написать код, чтобы принять любое слово в качестве ввода и отображать его ранг. »)
Я также не уверен, удовлетворяет ли это «ранг должен быть выведен».
источник
using namespace std
,#include <algorithm>
заголовки используются для определения функции в байтах и ... Нет,.main(){}
Действительный C ++ (г ++) Программа на 8 байт.import math
это часто необходимо. Позвольте мне найти соответствующие мета ...puts
andprintf
). Ваш код должен скомпилироваться и успешно работать как есть, чтобы он был действительным. См: codegolf.meta.stackexchange.com/a/10085/45941main
функций не может быть запущен как есть.Perl 5 , 98 + 3 (
-pF
) = 101 байтПопробуйте онлайн!
источник
Октава , 43 байта
Попробуйте онлайн!
источник
Perl 6 , 53 байта
Попробуйте онлайн!
источник
PowerShell , 275 байт
Попробуйте онлайн!
Итак, это кровавый беспорядок.
PowerShell не имеет встроенных перестановок, поэтому в этом коде используется алгоритм отсюда (интенсивно играющий в гольф), который доступен в рамках ограниченной общественной лицензии Microsoft ( Приложение B на этой странице лицензирования).
Программа принимает ввод
$s
в виде строки, то фактическая программа начинается с$b=New-Object ...
. Мы создаем новый объект StringBuilder , который является (по сути) изменяемой строкой символов. Это позволит нам легче обрабатывать перестановки. Затем мы вызываем функциюn
(устанавливая$j
вдоль длины длину входной строки),sort
с-u
флагом nique на выходе, берем.indexOf()
чтобы найти входную строку и добавляем,1
потому что PowerShell имеет нулевую индексацию.Функция является основной частью программы. Он принимает в качестве входных данных число, и каждая итерация будет вести обратный отсчет, пока мы не достигнем
1
(т. Е. Одной буквы) Остальная часть функции по существу рекурсивно вызывает функцию, а также берет текущую букву и повторяет ее через каждую позицию.Есть один бит дополнительной логики
if($s.length-eq1){1;exit}
для учета входных строк длины1
из-за того, как работает функция перестановок.источник
Пыть , 5 байт
Объяснение:
Попробуйте онлайн!источник