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. d
E w
, l
e 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 a
e ne ha ancora 4:
aaa 4: j
result: aaaj
Suggerimento: questa parte è fondamentalmente divmod
tranne per il fatto che si arrotonda verso lo zero, non -infinity
(ad esempio -43 diventerebbe 3 z
'e e a -4
che è p
così 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 ...