Mini-golf del lunedì: una serie di sfide da golf a codice corto , pubblicate (si spera!) Ogni lunedì.
(Mi dispiace, questo è un po 'in ritardo.)
Sono sicuro che molti di voi hanno sentito parlare della distanza di Levenshtein , un algoritmo per calcolare la distanza tra due stringhe. Bene, questa sfida riguarda l'implementazione di un algoritmo simile della mia invenzione *, chiamato distanza anagramma . La differenza principale è che l'ordine dei personaggi non ha importanza; invece, vengono misurati solo i caratteri che sono univoci per una stringa o per l'altra.
Sfida
L'obiettivo della sfida è scrivere un programma o una funzione che comprenda due stringhe e restituisca la distanza anagramma tra di esse. Il modo principale per farlo è utilizzare la seguente logica:
- Converti entrambe le stringhe in minuscolo e (facoltativamente) ordina i caratteri di ciascuno in ordine alfabetico.
- Mentre le stringhe contengono almeno un carattere uguale, rimuovi la prima istanza di questo carattere da ogni stringa.
- Aggiungi le lunghezze delle stringhe rimanenti e restituisce / emette il risultato.
Esempio
Se gli ingressi sono:
Hello, world!
Code golf!
Quindi, in minuscolo e ordinati, questi diventano: (secondo l'ordinamento predefinito di JS; notare gli spazi iniziali)
!,dehllloorw
!cdefgloo
Rimuovendo tutti i caratteri che si trovano in entrambe le stringhe, finiamo con:
,hllrw
cfg
Pertanto, la distanza anagramma tra le due stringhe originali = 6 + 3 = 9.
Dettagli
- Le stringhe possono essere prese in qualsiasi formato ragionevole.
- Le stringhe saranno costituite solo da ASCII stampabile.
- Le stringhe stesse non conterranno spazi bianchi diversi dagli spazi regolari. (Nessuna scheda, newline, ecc.)
- Non è necessario utilizzare questo algoritmo esatto, purché i risultati siano gli stessi.
Casi test
Ingresso 1:
Hello, world!
Code golf!
Uscita 1:
9
Ingresso 2:
12345 This is some text.
.txet emos si sihT 54321
Uscita 2:
0
Ingresso 3:
All unique characters here!
Bdfgjkmopvwxyz?
Uscita 3:
42
Ingresso 4:
This is not exactly like Levenshtein distance,
but you'll notice it is quite similar.
Uscita 4:
30
Ingresso 5:
all lowercase.
ALL UPPERCASE!
Uscita 5:
8
punteggio
Questo è code-golf , quindi vince il codice valido più breve in byte. Tiebreaker va all'invio che ha raggiunto per primo il numero di byte finale. Il vincitore verrà scelto lunedì prossimo, 12 ottobre. Buona fortuna!
Modifica: Congratulazioni al vincitore, @isaacg, usando Pyth (di nuovo) per un sorprendente 12 byte!
* Se questo algoritmo è stato utilizzato altrove e / o è stato assegnato un altro nome, per favore fatemi sapere! Non sono riuscito a trovarlo con una ricerca di 20 minuti.