¡Es la temporada de regreso a la escuela! Entonces, para un trabajo de medio tiempo, estás ayudando en la biblioteca de la escuela. El problema es que el bibliotecario jefe nunca ha escuchado las palabras "Dewey Decimal", y mucho menos implementó ese sistema. En cambio, el sistema de clasificación en uso ha crecido "orgánicamente" a medida que la biblioteca se ha expandido ...
En un esfuerzo por mantener la cordura, ha elegido escribir un programa para ayudarlo a clasificar los libros a medida que se devuelven, porque ¡ay de usted si clasifica los libros mal! (El bibliotecario jefe es MUY estricto).
De entrada y salida
- La entrada será una lista de títulos de libros (hipotéticos), uno por línea, de STDIN / idioma equivalente.
- Puede suponer no más de 100 libros ingresados a la vez (solo puede llevar tantos por la biblioteca a la vez).
- Los libros pueden tener varias palabras en sus títulos, y estas palabras pueden estar separadas por espacios u otros signos de puntuación (por ejemplo, dos puntos
:
, un guión).-
, etc.). - Para facilitar el cálculo, suponga que todos los títulos son UTF-8.
La salida es los mismos títulos, ordenados de acuerdo con las siguientes reglas, nuevamente una por línea, a STDOUT / idioma equivalente.
Las reglas de clasificación
Los libros se ordenan numéricamente según su valor de carácter promedio (es decir, el valor de carácter acumulativo divide el número de caracteres en el título del libro), contados por las siguientes reglas:
- Todos los caracteres cuentan para determinar el número de caracteres en un título.
- Las letras minúsculas se cuentan por su posición en el alfabeto. (a = 1, b = 2, ... z = 26)
- Si el título contiene letras mayúsculas, esas cuentan para 1.5 su valor en minúsculas (A = 1.5, B = 3, ... Z = 39). ("¡Las letras mayúsculas son importantes!", Dice el bibliotecario).
- Cada signo de puntuación / símbolo en esta lista
!@#$%^&*()-=_+[]\{}|;':",./<>?~
cuenta -1 desde el valor acumulado antes del promedio. ("¡Los títulos grandiosos no lo son!") - Si el título contiene un número, escrito en números arábigos , ese número se resta del valor promedio antes de ordenar. Múltiples dígitos consecutivos se tratan como un número (por ejemplo,
42
restarían 42, no restarían 4 y luego restarían 2). Los dígitos individuales no cuentan para el valor acumulado (es decir, cada dígito contribuye con 0), pero sí cuentan para el número de caracteres. Tenga en cuenta que esto puede resultar en un valor negativo y debe tratarse adecuadamente. (Se rumorea que el bibliotecario ha estado enamorado de un instructor de matemáticas durante varios años, ahora). - Si el título contiene dos palabras separadas que comienzan con un
R
, el libro obtiene una puntuación de "infinito" y se arroja a una pila en la esquina (es decir, ordenado al azar al final de la lista). (El bibliotecario fue abandonado una vez por una persona con esas iniciales, o eso has escuchado). - Los espacios no cuentan para el valor de carácter acumulativo (es decir, contribuyen con 0), pero contribuyen con el número de caracteres en un título.
- Caracteres que no se ajustan a las reglas anteriores (por ejemplo, un
ÿ
) no cuentan para el valor de carácter acumulativo (es decir, contribuyen con 0), pero sí contribuyen al número de caracteres en un título. - Por ejemplo, un libro hipotético
ÿÿÿÿÿ
tendría una "puntuación" de(0+0+0+0+0) / 5 = 0
, pero un libro hipotéticoÿÿyÿÿ
tendría una "puntuación" de(0+0+25+0+0) / 5 = 5
. - Dos libros que "puntúan" de la misma manera pueden aparecer en su orden de elección. (Están en el mismo estante, de todos modos)
Entrada de ejemplo 1
War and Peace
Reading Rainbow: The Best Unicorn Ever
Maus
Home for a Bunny
Ejemplo de salida 1 (con "puntajes" entre paréntesis para mostrar el razonamiento; no es necesario imprimirlos)
War and Peace (8.5)
Home for a Bunny (10.125)
Maus (15.125)
Reading Rainbow: The Best Unicorn Ever (infinity)
Ejemplo de entrada 2
Matthew
Mark
Luke
John
Revelations
Ejemplo de salida 2 (con "puntajes" entre paréntesis para mostrar el razonamiento; no es necesario imprimirlos)
Mark (12.375)
John (13)
Revelations (13.545454...)
Luke (13.75)
Matthew (~13.786)
Entrada de ejemplo 3
42
9 Kings
1:8
7th
Ejemplo de salida 3 (con "puntajes" entre paréntesis para mostrar el razonamiento; no es necesario imprimirlos)
42 (-42)
1:8 (-9.3333...)
9 Kings (~0.36)
7th (2.3333...)
Otras restricciones
- Este es Code-Golf, porque necesita mantener el programa en secreto de los ojos siempre observadores del bibliotecario, y cuanto más pequeño sea el programa, más fácil será ocultarlo.
- Se aplican restricciones de escapatoria estándar
- No dejes que el bibliotecario te pille holgazaneando gastando todo tu tiempo en PPCG.