Это снова в школьный сезон! Так что на неполный рабочий день вы помогаете в школьной библиотеке. Проблема в том, что главный библиотекарь никогда даже не слышал слова «Десятичный Дьюи», не говоря уже о внедрении этой системы. Вместо этого используемая система сортировки выросла «органично», поскольку библиотека расширилась ...
Стремясь сохранить свое здравомыслие, вы решили написать программу, которая поможет вам сортировать книги по мере их поступления, потому что горе вам, если вы неправильно сортируете книги. (Главный библиотекарь ОЧЕНЬ строг.)
Ввод, вывод
- Входными данными будет список (гипотетических) названий книг, по одному на строку, из STDIN / языкового эквивалента.
- Вы можете принять не более 100 книг одновременно (вы можете носить с собой только столько книг одновременно).
- В названиях книг может быть несколько слов, и эти слова могут быть разделены пробелами или другой пунктуацией (например, двоеточие
:
, тире-
и т. Д.). - Для простоты расчета предположим, что все названия имеют UTF-8.
Выходные данные - это те же заголовки, отсортированные в соответствии с приведенными ниже правилами, снова по одному на строку, в STDOUT / эквивалент языка.
Правила сортировки
Книги отсортированы по номерам на основе их среднего значения символов (т. Е. Совокупного значения символов, разделенного на количество символов в названии книги), рассчитанного по следующим правилам:
- Все символы учитываются для определения количества символов в заголовке.
- Строчные буквы подсчитываются по их положению в алфавите. (А = 1, B = 2, ... г = 26)
- Если заголовок содержит заглавные буквы, они считаются для 1,5 их строчными буквами (A = 1,5, B = 3, ... Z = 39). («Заглавные буквы важны!» - говорит библиотекарь.)
- Каждый знак пунктуации / символ в этом списке
!@#$%^&*()-=_+[]\{}|;':",./<>?~
отсчитывает -1 от совокупного значения перед усреднением. («Грандиозных названий нет!») - Если заголовок содержит число, написанное арабскими цифрами , это число перед сортировкой вычитается из среднего значения. Несколько последовательных цифр обрабатываются как одно число (например,
42
вычтет 42, а не вычтет 4, а затем вычтет 2). Отдельные цифры не учитываются для совокупного значения (т. Е. Каждая цифра дает 0), но ДО учитываются для количества символов. Обратите внимание, что это может привести к отрицательному значению и должно рассматриваться соответствующим образом. (По слухам, библиотекарь уже несколько лет влюблен в преподавателя математики.) - Если заголовок содержит два отдельных слова, которые начинаются с «,»
R
, книга получает оценку «бесконечность» и сбрасывается в стопку в углу (т. Е. Случайно расположенную в конце списка). (Библиотекарь был когда-то брошен человеком с этими инициалами, или вы так слышали.) - Пробелы не учитывают совокупное значение символа (т. Е. Они дают 0), но ДО способствуют количеству символов в заголовке.
- Символы, которые не соответствуют указанным выше правилам (например, a
ÿ
), не учитываются в совокупном значении символа (т. Е. Они дают 0), но ДОЛЖНЫ вносить вклад в количество символов в названии. - Например, гипотетическая книга
ÿÿÿÿÿ
будет иметь «оценку»(0+0+0+0+0) / 5 = 0
, а гипотетическая книгаÿÿyÿÿ
будет иметь «оценку»(0+0+25+0+0) / 5 = 5
. - Две книги, которые "забивают" одно и то же, могут быть выведены на ваш выбор. (Во всяком случае, они на одной полке)
Пример ввода 1
War and Peace
Reading Rainbow: The Best Unicorn Ever
Maus
Home for a Bunny
Пример вывода 1 (в скобках указаны «оценки», чтобы показать обоснование - вам не нужно их печатать)
War and Peace (8.5)
Home for a Bunny (10.125)
Maus (15.125)
Reading Rainbow: The Best Unicorn Ever (infinity)
Пример ввода 2
Matthew
Mark
Luke
John
Revelations
Пример вывода 2 (с «счетами» в скобках, чтобы показать обоснование - вам не нужно их печатать)
Mark (12.375)
John (13)
Revelations (13.545454...)
Luke (13.75)
Matthew (~13.786)
Пример ввода 3
42
9 Kings
1:8
7th
Пример вывода 3 (в скобках указаны «показатели», чтобы показать обоснование - вам не нужно их печатать)
42 (-42)
1:8 (-9.3333...)
9 Kings (~0.36)
7th (2.3333...)
Другие ограничения
- Это Code-Golf, потому что вы должны держать программу в секрете от постоянных глаз библиотекаря, и чем меньше программа, тем легче ее скрыть.
- Стандартные ограничения лазейки применяются
- Не позволяйте библиотекарю отвлечь вас, потратив все свое время на PPCG.