Pamanmu butuh bantuan Mabuk

10

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, treedan friendmemiliki 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: Acocok dengan a( Catatan: Karena aturan ini Dogdan dogidentik, dan karenanya memiliki DS -1)
  • Jika beberapa pasangan memiliki kesamaan mabuk tertinggi:
    1. Dari kata-kata itu, yang dapat memaksimalkan kesamaan mabuk, pilih satu dengan indeks terendah dalam daftar
    2. Pasangkan kata itu dengan kata indeks terendah yang memaksimalkan kesamaan kemabukan

Contohnya

  1. 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
  2. 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
  3. 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)
  4. 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
  5. 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

Beri tahu saya jika ada lebih banyak contoh yang ingin saya sampaikan.

geokavel
sumber
8
tolong ubah 'Saya suka pemintal fid-get' menjadi 'Aku benci pemintal fid-get'
Okx
1
"bahasa alami"
HyperNeutrino

Jawaban:

3

JavaScript - 286 279 byte

f=(a,n=(a=a.split` `).length)=>{for(d=n>>1;w=-2,d--;){for(i=n;i--;)for(j=n;j--;)s=((a,f,v=0)=>{for(u=s=a!=f;(r=a[v])&&(t=f[v++]);s+=(p=a=>a.toLowerCase())(r)==p(t));return u*s-1})(a[i],a[j]),!(f[i]|f[j])&&s>=w&&(w=s,x=i,y=j);f[x]=f[y]=1,[a[x],a[y]]=[a[y],a[x]];}return a.join` `}

Anda bisa mencobanya di JSFiddle .


sumber
Selamat datang (lagi) ke PPCG :) Pengiriman pertama yang bagus!
HyperNeutrino
2

Python 3, 285 277 270 267 Bytes, tidak berfungsi

i=input().split();r=range;l=len;t=y=z=-1;n=str.lower
for p in r(l(i)):
 for q in r(p):
  b=min(l(i[p]),l(i[q]));x=0
  for s in r(b):
   if n(i[p][s])==n(i[q][s]):
    x=x+1
  if n(i[p])==n(i[q]):
   x=-1
  if x>t:
   t=x;y=p;z=q
i[y],i[z]=i[z],i[y]
print(" ".join(i))

Saya 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.

Tidak berbahaya
sumber
1
Anda perlu mendefinisikan salah satu g = str.loweratau g = lambda s: s.lower()yang dapat Anda gunakan seperti ini .
ბიმო
@ Bruce Forte Terima kasih! Ini menghilangkan 8 byte. (Hanya turun ke 270 meskipun karena saya juga harus memperbaiki sesuatu untuk membuatnya sehingga akan bertukar kata bahkan jika kesamaan tertinggi adalah 0; ini menambahkan satu byte).
Harmless
1
Tidak masalah dan selamat datang di PPCG! Jika Anda belum melihat sudah, ini jenis tulisan yang sangat membantu. Btw .split(' ')bisa diganti dengan .split().
ბიმო
Tunggu, kasus uji mana yang Anda ubah, dan apa yang salah dengan mereka?
geokavel
Saya tidak punya cukup perwakilan untuk mengubah posting, tetapi kontradiksi yang tampak adalah untuk contoh pertama - jawaban yang diberikan untuk 'paman mabuk membutuhkan bantuan Anda' adalah 'paman Anda membantu kebutuhan mabuk' daripada 'paman Anda membutuhkan bantuan mabuk'. Kedua jawaban ini bertukar kata-kata dengan skor kesamaan yang sama, dan keduanya mengikuti tie-breaker yang diberikan dengan menggunakan pasangan pertama untuk memutuskan mana yang akan ditukar, dalam arti bahwa keduanya dimulai dengan kata pertama. (Saya menyadari sekarang ketika saya menulis ini bahwa kontradiksinya tidak benar-benar seperti itu, tetapi lebih merupakan ambiguitas). Cara yang diberikan untuk memutuskan kehabisan karakter lihat selanjutnya
Harmless