Está de volta à temporada escolar! Então, para um emprego de meio período, você está ajudando na biblioteca da escola. O problema é que o bibliotecário chefe nunca ouviu as palavras "Dewey Decimal", muito menos implementou esse sistema. Em vez disso, o sistema de classificação em uso cresceu "organicamente" à medida que a biblioteca se expandia ...
Em um esforço para manter sua sanidade, você optou por escrever um programa para ajudá-lo a classificar os livros à medida que eles são devolvidos, porque ai de você se você classificar os livros de maneira errada. (O bibliotecário-chefe é MUITO rigoroso.)
Entrada / Saída
- A entrada será uma lista de títulos de livros (hipotéticos), um por linha, de STDIN / idioma equivalente.
- Você pode assumir não mais do que 100 livros introduzidos por vez (você só pode transportar tantos pela biblioteca de uma só vez).
- Os livros podem ter várias palavras em seus títulos, e essas palavras podem ser separadas por espaços ou outra pontuação (por exemplo, dois pontos
:
, um hífen-
etc.). - Para facilitar o cálculo, suponha que todos os títulos sejam UTF-8.
A saída é os mesmos títulos, classificados de acordo com as regras abaixo, novamente um por linha, para STDOUT / idioma equivalente.
As regras de classificação
Os livros são classificados numericamente com base em seu valor médio de caracteres (ou seja, o valor acumulado de caracteres dividido pelo número de caracteres no título do livro), contados pelas seguintes regras:
- Todos os caracteres contam para determinar o número de caracteres em um título.
- Letras minúsculas são contadas por sua posição no alfabeto. (a = 1, b = 2, ... z = 26)
- Se o título contiver letras maiúsculas, elas contarão com 1,5 valor em minúsculas (A = 1,5, B = 3, ... Z = 39). ("Letras maiúsculas são importantes!", Diz o bibliotecário.)
- Cada sinal de pontuação / símbolo nesta lista
!@#$%^&*()-=_+[]\{}|;':",./<>?~
conta -1 do valor acumulado antes da média. ("Os títulos grandiosos não são!") - Se o título contiver um número, escrito em algarismos arábicos , esse número será subtraído do valor médio antes da classificação. Vários dígitos consecutivos são tratados como um número (por exemplo,
42
subtrai 42, não subtrai 4 e depois subtrai 2). Dígitos individuais não contam para o valor cumulativo (ou seja, cada dígito contribui com 0), mas contam para o número de caracteres. Observe que isso pode resultar em um valor negativo e deve ser tratado adequadamente. (Há rumores de que o bibliotecário tem uma queda por um instrutor de matemática há vários anos.) - Se o título contiver duas palavras separadas que começam com um
R
, o livro recebe uma pontuação de "infinito" e é jogado em uma pilha no canto (ou seja, organizado aleatoriamente no final da lista). (O bibliotecário já foi descartado por uma pessoa com essas iniciais, ou pelo menos você já ouviu falar.) - Os espaços não contam para o valor acumulado dos caracteres (ou seja, eles contribuem com 0), mas contribuem para o número de caracteres em um título.
- Os caracteres que não se encaixam nas regras acima (por exemplo, a
ÿ
) não contam para o valor acumulado dos caracteres (ou seja, contribuem com 0), mas contribuem para o número de caracteres em um título. - Por exemplo, um livro hipotético
ÿÿÿÿÿ
teria uma "pontuação" de(0+0+0+0+0) / 5 = 0
, mas um livro hipotéticoÿÿyÿÿ
teria uma "pontuação" de(0+0+25+0+0) / 5 = 5
. - Dois livros que "pontuam" o mesmo podem ser Saída em sua escolha de ordem. (Eles estão na mesma prateleira, de qualquer maneira)
Exemplo de entrada 1
War and Peace
Reading Rainbow: The Best Unicorn Ever
Maus
Home for a Bunny
Exemplo de saída 1 (com "pontuações" entre parênteses para mostrar o raciocínio - você não precisa imprimi-las)
War and Peace (8.5)
Home for a Bunny (10.125)
Maus (15.125)
Reading Rainbow: The Best Unicorn Ever (infinity)
Exemplo de entrada 2
Matthew
Mark
Luke
John
Revelations
Exemplo de saída 2 (com "pontuações" entre parênteses para mostrar o raciocínio - você não precisa imprimi-las)
Mark (12.375)
John (13)
Revelations (13.545454...)
Luke (13.75)
Matthew (~13.786)
Exemplo de entrada 3
42
9 Kings
1:8
7th
Exemplo de saída 3 (com "pontuações" entre parênteses para mostrar o raciocínio - você não precisa imprimi-las)
42 (-42)
1:8 (-9.3333...)
9 Kings (~0.36)
7th (2.3333...)
Outras restrições
- Este é o Code-Golf, porque você precisa manter o programa em segredo dos olhos sempre atentos do bibliotecário e, quanto menor o programa, mais fácil é se esconder.
- Aplicam-se restrições de brecha padrão
- Não deixe que o bibliotecário o pegue relaxando, gastando todo o seu tempo no PPCG.