Monday Mini-Golf: Serangkaian tantangan kode-golf pendek , diposting (mudah-mudahan!) Setiap hari Senin.
(Maaf ini agak terlambat.)
Saya yakin sebagian besar dari Anda pernah mendengar tentang jarak Levenshtein , sebuah algoritma untuk menghitung jarak antara dua string. Nah, tantangan ini adalah tentang mengimplementasikan algoritma serupa dari penemuan saya *, yang disebut jarak anagram . Perbedaan utama adalah bahwa urutan karakter tidak masalah; alih-alih, hanya karakter yang unik untuk satu string atau yang lain yang diukur.
Tantangan
Tujuan dari tantangan ini adalah untuk menulis program atau fungsi yang mengambil dua string dan mengembalikan jarak anagram di antara mereka. Cara utama untuk melakukan ini adalah dengan menggunakan logika berikut:
- Konversikan kedua string menjadi huruf kecil dan (secara opsional) mengurutkan masing-masing karakter secara alfabet.
- Sementara string mengandung setidaknya satu karakter yang sama, hapus instance pertama dari karakter ini dari setiap string.
- Tambahkan panjang string yang tersisa dan kembalikan / hasilkan hasilnya.
Contoh
Jika inputnya adalah:
Hello, world!
Code golf!
Kemudian, huruf kecil dan disortir, ini menjadi: (berdasarkan jenis JS default; perhatikan spasi terkemuka)
!,dehllloorw
!cdefgloo
Menghapus semua karakter yang ada di kedua string, kita berakhir dengan:
,hllrw
cfg
Dengan demikian, jarak anagram antara dua string asli = 6 + 3 = 9.
Detail
- String dapat diambil dalam format apa pun yang masuk akal.
- String hanya akan terdiri dari ASCII yang dapat dicetak.
- String itu sendiri tidak akan mengandung spasi apa pun selain ruang biasa. (Tidak ada tab, baris baru, dll.)
- Anda tidak perlu menggunakan algoritme yang tepat ini, asalkan hasilnya sama.
Kasus uji
Input 1:
Hello, world!
Code golf!
Output 1:
9
Input 2:
12345 This is some text.
.txet emos si sihT 54321
Output 2:
0
Input 3:
All unique characters here!
Bdfgjkmopvwxyz?
Output 3:
42
Input 4:
This is not exactly like Levenshtein distance,
but you'll notice it is quite similar.
Keluaran 4:
30
Input 5:
all lowercase.
ALL UPPERCASE!
Output 5:
8
Mencetak gol
Ini adalah kode-golf , jadi kode terpendek yang valid dalam byte menang. Tiebreaker pergi ke pengiriman yang mencapai jumlah byte terakhirnya terlebih dahulu. Pemenang akan dipilih Senin depan, 12 Oktober. Semoga beruntung!
Sunting: Selamat kepada pemenang, @isaacg, menggunakan Pyth (lagi) untuk 12 byte yang luar biasa !
* Jika algoritma ini telah digunakan di tempat lain dan / atau diberi nama lain, beri tahu saya! Saya tidak dapat menemukannya dengan pencarian 20 menit.