Mabuk Paman (maaf AKU dan AUS untuk kunci wilayah) adalah karakter fiksi dari Saturday Night Live. Dia sering membingungkan kata-kata untuk orang lain yang terdengar seperti mereka. Untuk tantangan ini, Anda perlu mengubah ucapan normal menjadi drunkspeak.
Algoritma
Menerjemahkan ke drunkspeak membutuhkan pertukaran urutan kata dalam teks. Swapping didasarkan pada kemiripan kemiripan dua kata. Kesamaan kemabukan didefinisikan sebagai jumlah huruf yang memiliki dua kata pada indeks yang sama . Namun, dua kata identik memiliki kemiripan kemiripan -1 . Misalnya, tree
dan friend
memiliki kemiripan kemiripan 2, karena mereka berdua memiliki 'r' di indeks 1, dan 'e' di indeks 3.
Yang harus Anda lakukan adalah menemukan dua kata dalam teks dengan kesamaan mabuk tertinggi, kemudian menukar mereka. Setelah Anda menukar dua istilah, mereka tidak bergerak lagi. Kemudian Anda melihat persyaratan swappable yang tersisa dan menukar keduanya yang memiliki kesamaan mabuk tertinggi. Anda terus melakukan ini sampai Anda tidak dapat bertukar lagi. Kemudian Anda menampilkan (atau mengembalikan, untuk suatu fungsi) teks yang diperbarui.
Spesifik
- Untuk kesederhanaan, input adalah daftar kata yang terdiri dari karakter dalam [A-Za-z]
- Setiap input mengandung setidaknya satu kata
- Pencocokan huruf tidak peka huruf besar-kecil:
A
cocok dengana
( Catatan: Karena aturan iniDog
dandog
identik, dan karenanya memiliki DS -1) - Jika beberapa pasangan memiliki kesamaan mabuk tertinggi:
- Dari kata-kata itu, yang dapat memaksimalkan kesamaan mabuk, pilih satu dengan indeks terendah dalam daftar
- Pasangkan kata itu dengan kata indeks terendah yang memaksimalkan kesamaan kemabukan
Contohnya
Drunk Uncle needs your help
(judul)- S 1 : Mabuk <=> Anda (DS: 1)
your Uncle needs Drunk help
- S 2 : membutuhkan bantuan <=> (DS: 1)
your Uncle help Drunk needs
- Keluaran:
your Uncle help Drunk needs
- S 1 : Mabuk <=> Anda (DS: 1)
I love fidget spinners
(contoh membosankan)- S 1 : Saya <=> cinta (DS: 0)
love I fidget spinners
- S 2 : gelisah <=> pemintal (DS: 0)
love I spinners fidget
- S 1 : Saya <=> cinta (DS: 0)
dog eat dog ear
- S 1 : makan <=> telinga (DS: 2)
dog ear dog eat
- S 2 : dog <=> dog (DS: -1)
dog ear dog eat
(langkah ini hanya formalitas)
- S 1 : makan <=> telinga (DS: 2)
Let me tell you a story
- S 1 : Biarkan <=> saya (DS: 1)
me Let tell you a story
- S 2 : beri tahu <=> Anda (DS: 0)
me Let you tell a story
- S 3 : a <=> cerita (DS: 0)
me Let you tell story a
- S 1 : Biarkan <=> saya (DS: 1)
Too many money and purple people
- S 1 : ungu <=> orang (DS: 4)
Too many money and people purple
- S 2 : banyak <=> uang (DS: 2)
Too money many and people purple
- S 3 : Terlalu <=> dan (DS: 0)
and money many Too people purple
- S 1 : ungu <=> orang (DS: 4)
Beri tahu saya jika ada lebih banyak contoh yang ingin saya sampaikan.
sumber
Jawaban:
JavaScript -
286279 byteAnda bisa mencobanya di JSFiddle .
sumber
Python 3,
285277270267 Bytes, tidak berfungsiSaya mencoba membuat hasil yang sesuai dengan tantangan, bukan kasus uji, karena beberapa kasus uji bertentangan dengan tantangan.
Sunting: bermain golf 'rendah'.
Edit: ubah split ("") menjadi split ()
Sunting: Saya menyadari ini sebenarnya tidak menyelesaikan semua hal, dan sementara saya mungkin datang dengan jawaban yang berfungsi penuh, sementara itu saya mungkin juga menambahkan bahwa ini hanya menyelesaikan satu iterasi.
sumber
g = str.lower
ataug = lambda s: s.lower()
yang dapat Anda gunakan seperti ini ..split(' ')
bisa diganti dengan.split()
.