Io e il mio amico abbiamo questo gioco a cui giochiamo a parole. È un passatempo divertente e implica "cancellare" le lettere in una parola fino a quando non rimane più nulla. Sono davvero stanco che sia molto più veloce di me, quindi è il tuo compito implementarlo e lasciarmi finalmente battere. Ovviamente, dato che devo rendere il programma il più semplice possibile da nascondere, deve essere il più piccolo possibile.
Come funziona questo gioco?
Il gioco è un algoritmo piuttosto semplice. Riduce una stringa alfabetica fino a quando non può essere ulteriormente ridotta, rendendola così una sorta di hash. Il gioco reale che noi umani facciamo è molto difficile da implementare, ma può essere semplificato nel seguente algoritmo:
Si inizia piegando l'alfabeto a metà e allineando i due pezzi in questo modo:
a b c d e f g h i j k l m
z y x w v u t s r p q o n
Quindi, a partire dalla metà, assegni gli interi positivi alla metà superiore e il negativo alla fine:
a b c d e f g h i j k l m
13 12 11 10 9 8 7 6 5 4 3 2 1
z y x w v u t s r p q o n
-13 -12 -11 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1
Quindi prendi la tua stringa (che useremo hello world) e ignorando tutti i caratteri non alfabetici, traducila:
h e l l o w o r l d
6 9 2 2 -2 -10 -2 -5 2 10
Quindi sommi i valori delle lettere. Quelle allineate nel diagramma precedente (ad es. dE w, le o) verranno annullate, mentre le altre verranno sommate.
sum(6 9 2 2 -2 -10 -2 -5 2 10 )=12
12 è il numero per b, quindi l'hash di hello worldèb
Per una parola che cancella completamente fuori (ad esempio love), è uscita la "0 carattere": -. Si noti che nell'input -verrà comunque ignorato. Importa solo nell'output.
Se grandezza del numero è maggiore di 13, poi si inizia il raddoppio sulle a's e la z' s Che, fondamentalmente, prendere come molti a's o z' s misura nel numero e prendere tutto ciò che è a sinistra per l'ultima lettera in questo modo:
code golf: 43.
Adatto a 3 ae ne ha ancora 4:
aaa 4: j
result: aaaj
Suggerimento: questa parte è fondamentalmente divmodtranne per il fatto che si arrotonda verso lo zero, non -infinity(ad esempio -43 diventerebbe 3 z'e e a -4che è pcosì zzzp).
Nota: il trattino non arriva se la a"o z" si adatta perfettamente, solo se è esattamente 0.
chiarimenti:
- L'hash è case in sensitive
- Non sono ammesse scappatoie standard
- L'I / O può essere in qualsiasi formato che non sia troppo stravagante, stdin, stdout, arg della riga di comando, funzione, ecc.
- Si tratta di code-golf quindi vince la dimensione più breve in byte .
Esempi:
hello world --> b
love --> -
this is an example --> aak
hello *&*(&(*&%& world --> b
good bye --> ae
root users --> zzs
loveè vuoto ...