È tornato alla stagione scolastica! Quindi, per un lavoro part-time, stai aiutando nella biblioteca della scuola. Il problema è che il capo bibliotecario non ha mai nemmeno sentito le parole "Dewey Decimal" e tanto meno implementato quel sistema. Invece, il sistema di smistamento in uso è cresciuto "organicamente" man mano che la biblioteca si espande ...
Nel tentativo di mantenere la sanità mentale, hai scelto di scrivere un programma per aiutarti a ordinare i libri quando vengono restituiti, perché guai a te se smetti di ordinare i libri in modo errato. (Il capo bibliotecario è MOLTO severo.)
Input Output
- L'input sarà un elenco di (ipotetici) titoli di libri, uno per riga, da STDIN / equivalente linguistico.
- Puoi assumere non più di 100 libri alla volta (puoi portarne solo tanti in giro per la biblioteca contemporaneamente).
- I libri possono contenere più parole nei titoli e queste parole possono essere separate da spazi o altri segni di punteggiatura (ad es. Due punti
:
, un trattino-
, ecc.). - Per facilità di calcolo, supponiamo che tutti i titoli siano UTF-8.
L'output è gli stessi titoli, ordinati secondo le regole seguenti, sempre uno per riga, in STDOUT / equivalente lingua.
Le regole di classificazione
I libri sono ordinati numericamente in base al loro valore medio dei caratteri (ovvero, il valore cumulativo dei caratteri ha diviso il numero di caratteri nel titolo del libro), conteggiato dalle seguenti regole:
- Tutti i personaggi contano per determinare il numero di caratteri in un titolo.
- Le lettere minuscole sono contate dalla loro posizione nell'alfabeto. (A = 1, b = 2, ... z = 26)
- Se il titolo contiene lettere maiuscole, queste contano per 1,5 il loro valore minuscolo (A = 1,5, B = 3, ... Z = 39). ("Le lettere maiuscole sono importanti!" Dice il bibliotecario.)
- Ogni segno / simbolo di punteggiatura in questo elenco
!@#$%^&*()-=_+[]\{}|;':",./<>?~
conta -1 dal valore cumulativo prima della media. ("I titoli grandiosi non lo sono!") - Se il titolo contiene un numero, scritto in numeri arabi , quel numero viene sottratto dal valore medio prima dell'ordinamento. Le cifre consecutive multiple vengono trattate come un numero (ad esempio,
42
sottrarre 42, non sottrarre 4 e quindi sottrarre 2). Le singole cifre non contano per il valore cumulativo (ovvero ogni cifra contribuisce a 0), ma contano il numero di caratteri. Si noti che ciò può comportare un valore negativo e deve essere trattato in modo appropriato. (Si dice che il bibliotecario abbia avuto una cotta per un istruttore di matematica da diversi anni, ormai.) - Se il titolo contiene due parole separate che iniziano con una
R
, il libro ottiene un punteggio di "infinito" e viene scaricato in una pila nell'angolo (cioè, disposto in modo casuale alla fine dell'elenco). (Una volta il bibliotecario è stato scaricato da una persona con quelle iniziali, o almeno così hai sentito.) - Gli spazi non contano per il valore cumulativo del carattere (ovvero, contribuiscono 0), ma contribuiscono al numero di caratteri in un titolo.
- I caratteri che non soddisfano le regole di cui sopra (ad es. A
ÿ
) non contano per il valore cumulativo del carattere (ovvero, contribuiscono con 0), ma contribuiscono al numero di caratteri in un titolo. - Ad esempio, un libro ipotetico
ÿÿÿÿÿ
avrebbe una "partitura" di(0+0+0+0+0) / 5 = 0
, ma un libro ipoteticoÿÿyÿÿ
avrebbe una "partitura" di(0+0+25+0+0) / 5 = 5
. - Due libri che capita di "segnare" lo stesso possono essere prodotti nella tua scelta d'ordine. (Sono sullo stesso scaffale, comunque)
Esempio di input 1
War and Peace
Reading Rainbow: The Best Unicorn Ever
Maus
Home for a Bunny
Esempio di output 1 (con "punteggi" tra parentesi per mostrare il ragionamento - non è necessario stamparli)
War and Peace (8.5)
Home for a Bunny (10.125)
Maus (15.125)
Reading Rainbow: The Best Unicorn Ever (infinity)
Esempio di input 2
Matthew
Mark
Luke
John
Revelations
Esempio di output 2 (con "punteggi" tra parentesi per mostrare il ragionamento - non è necessario stamparli)
Mark (12.375)
John (13)
Revelations (13.545454...)
Luke (13.75)
Matthew (~13.786)
Esempio di input 3
42
9 Kings
1:8
7th
Esempio di output 3 (con "punteggi" tra parentesi per mostrare il ragionamento - non è necessario stamparli)
42 (-42)
1:8 (-9.3333...)
9 Kings (~0.36)
7th (2.3333...)
Altre restrizioni
- Questo è Code-Golf, perché è necessario mantenere il programma segreto agli occhi sempre attenti del bibliotecario, e più piccolo è il programma, più facile è nasconderlo.
- Si applicano le restrizioni standard sulle scappatoie
- Non lasciare che il bibliotecario ti sorprenda a perdere tempo spendendo tutto il tuo tempo su PPCG.