Amca sarhoş ihtiyacı yardım


10

Sarhoş Amca (bölge kilidi için üzgünüm ME ve AUS) Saturday Night Live'dan kurgusal bir karakter. Sıklıkla başkalarına benzeyen kelimeleri karıştırır. Bu meydan okuma için normal konuşmayı sarhoş hale dönüştürmeniz gerekir.

Algoritma

Sarhoş diline çeviri, metindeki kelimelerin sırasını değiştirmeyi gerektirir. Takas, iki kelimenin sarhoşluk benzerliğine dayanır . Sarhoşluk benzerliği, iki kelimenin aynı endekslerde meydana geldiği harf sayısı olarak tanımlanır . Bununla birlikte, iki özdeş kelimenin -1 sarhoşluk benzerliği vardır . Örneğin treeve friendsarhoşluk benzerliği 2'dir, çünkü her ikisinin de dizin 1'de 'r' ve dizin 3'te 'e' vardır.

Tek yapmanız gereken, metinde en yüksek sarhoşluk benzerliğine sahip iki kelimeyi bulmak, sonra bunları değiştirmek. İki terimi değiştirdikten sonra, artık hareket etmezler. Sonra kalan değiştirilebilir terimlere bakar ve en yüksek sarhoşluk benzerliğine sahip ikisini değiştirirsiniz. Artık değiştiremeyene kadar bunu yapmaya devam ediyorsun. Sonra güncellenen metni çıktısı (veya bir işlev için geri).

Ayrıntılı Bilgiler

  • Kolaylık olması açısından girdi, [A-Za-z] 'daki karakterlerden oluşan kelimelerin bir listesidir
  • Her girdi en az bir kelime içeriyor
  • Harf eşleşmesi büyük / küçük harfe duyarsızdır: ile Aeşleşir a( Not: Bu kural nedeniyle Dogve dogözdeştir ve bu nedenle -1 DS'ye sahiptir)
  • Birden fazla çiftin en yüksek sarhoşluk benzerliği varsa:
    1. Sarhoşluk benzerliğini en üst düzeye çıkarabilecek kelimelerden, listede en düşük endekse sahip olanı seçin
    2. Bu kelimeyi, sarhoşluk benzerliğini en üst düzeye çıkaran en düşük endeksli kelime ile eşleştirin

Örnekler

  1. Drunk Uncle needs your help (Başlık)

    • S 1 : Sarhoş <=> (DS: 1)your Uncle needs Drunk help
    • S 2 : <=> yardıma ihtiyacı var (DS: 1)your Uncle help Drunk needs
    • Çıktı: your Uncle help Drunk needs
  2. I love fidget spinners (sıkıcı örnek)

    • S 1 : Seviyorum <=> (DS: 0)love I fidget spinners
    • S 2 : fidget <=> döndürücüler (DS: 0)love I spinners fidget
  3. dog eat dog ear

    • S 1 : <=> kulak yiyin (DS: 2)dog ear dog eat
    • S 2 : köpek <=> köpek (DS: -1) dog ear dog eat(bu adım sadece formalite)
  4. Let me tell you a story

    • S 1 : Bırak <=> beni (DS: 1)me Let tell you a story
    • S 2 : size <=> söyleyin (DS: 0)me Let you tell a story
    • S 3 : bir <=> hikaye (DS: 0)me Let you tell story a
  5. Too many money and purple people

    • S 1 : mor <=> insanlar (DS: 4)Too many money and people purple
    • S 2 : birçok <=> para (DS: 2)Too money many and people purple
    • S 3 : Çok <=> ve (DS: 0)and money many Too people purple

Kaplamamı istediğiniz başka örnekler varsa bana bildirin.


8
lütfen 'fid-get spinners'ı seviyorum' olarak 'fid-get spinners'ı nefret ediyorum' olarak değiştirin
Okx

1
"doğal dil"
HyperNeutrino

Yanıtlar:


3

JavaScript - 286279 bayt

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` `}

JSFiddle'da deneyebilirsiniz .


(Tekrar) PPCG'ye hoş geldiniz :) Güzel ilk başvuru!
HyperNeutrino

2

Python 3, 285 277 270 çalışmıyor 267 Byte,

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))

Test durumlarının birkaçı zorlukla çeliştiğinden, çıktıyı test senaryolarıyla değil, meydan okumayla eşleştirmeye çalıştım.

Düzenleme: 'alt' şey golf.

Düzenle: split ("") öğesini split () olarak değiştirdi

Düzenleme: Bu aslında tüm thingys tamamlanmadığını fark ettim ve tam bir çalışma yanıtı ile gelebilirken, bu arada ben de bu sadece bir yineleme tamamlar ekleyebilirsiniz.


1
Sen tanımlamak yapmalı ya g = str.lowerya g = lambda s: s.lower()hangi sonra gibi kullanabilirsiniz bu .
ბიმო

@Bruce Forte Teşekkürler! Bu 8 bayttan kurtuldu. (Sadece 270'e düştü çünkü bunu yapmak için bir şeyi düzeltmek zorunda kaldım, böylece en yüksek benzerlik 0 olsa bile kelimeleri değiştirecekti; bu bir bayt ekledi).
Zararsız

1
Sorun değil ve PPCG'ye hoş geldiniz! Henüz görmediyseniz, bu tür yayınlar çok yardımcı olur. Btw .split(' ')ile değiştirilebilir .split().
ბიმო

Bekle, hangi test senaryolarını değiştirdin ve sorun neydi?
geokavel

Bir gönderiyi değiştirmek için yeterli temsilcim yok, ancak görünen çelişki ilk örnekti - 'sarhoş amcanın yardımına ihtiyacı var' için verilen cevap 'amcanın sarhoş yardıma ihtiyacı' amcanın sarhoş yardıma ihtiyacı 'idi. Bu cevapların her ikisi de aynı benzerlik puanına sahip kelimeleri değiştirdiler ve her ikisi de ilk kelimeyle başlayacakları anlamıyla, hangisinin değiştirileceğine karar vermek için çiftin ilkini kullanarak verilen bağlantı kesicinizi takip ediyorlar. (Bunu yazarken, çelişkinin gerçekte bu olmadığını, daha çok bir belirsizlik olduğunu anlıyorum). Karakterlerin tükenmesine karar vermenin verilen yolu bir sonraki-
Zararsız
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.