Drunk Uncle (désolé ME et AUS pour le verrouillage de la région) est un personnage fictif de Saturday Night Live. Il confond souvent les mots pour d'autres qui leur ressemblent. Pour ce défi, vous devez convertir la parole normale en ivresse.
Algorithme
La traduction en drunkspeak nécessite l'échange de l'ordre des mots dans le texte. L'échange est basé sur la similitude de l' ivresse de deux mots. La similitude d'ivresse est définie comme le nombre de lettres que deux mots ont survenant aux mêmes indices . Cependant, deux mots identiques ont une similitude d'ivresse de -1 . Par exemple, tree
et friend
ont une similitude d'ivresse de 2, car ils ont tous les deux un «r» à l'indice 1 et un «e» à l'indice 3.
Tout ce que vous avez à faire est de trouver les deux mots dans le texte avec la plus grande similitude d'ivresse, puis de les échanger. Une fois que vous avez échangé deux termes, ils ne bougent plus. Ensuite, vous regardez les termes échangeables restants et échangez les deux qui ont la plus grande similitude d'ivresse. Vous continuez ainsi jusqu'à ce que vous ne puissiez plus échanger. Ensuite, vous affichez (ou renvoyez, pour une fonction) le texte mis à jour.
Détails
- Par souci de simplicité, l'entrée est une liste de mots composés de caractères en [A-Za-z]
- Chaque entrée contient au moins un mot
- La correspondance des lettres est insensible à la casse:
A
correspond àa
( Remarque: En raison de cette règleDog
etdog
sont identiques, et ont donc un DS de -1) - Si plusieurs paires ont la similitude d'ivresse la plus élevée:
- Parmi les mots qui peuvent maximiser la similitude de l'ivresse, choisissez celui dont l'indice est le plus bas dans la liste.
- Associez ce mot avec le mot d'index le plus bas qui maximise la similitude de l'ivresse
Exemples
Drunk Uncle needs your help
(Titre)- S 1 : Ivre <=> votre (DS: 1)
your Uncle needs Drunk help
- S 2 : nécessite <=> de l'aide (DS: 1)
your Uncle help Drunk needs
- Production:
your Uncle help Drunk needs
- S 1 : Ivre <=> votre (DS: 1)
I love fidget spinners
(exemple ennuyeux)- S 1 : J'aime <=> (DS: 0)
love I fidget spinners
- S 2 : fidget <=> filateurs (DS: 0)
love I spinners fidget
- S 1 : J'aime <=> (DS: 0)
dog eat dog ear
- S 1 : manger <=> oreille (DS: 2)
dog ear dog eat
- S 2 : chien <=> chien (DS: -1)
dog ear dog eat
(cette étape n'est qu'une formalité)
- S 1 : manger <=> oreille (DS: 2)
Let me tell you a story
- S 1 : Laissez-moi <=> (DS: 1)
me Let tell you a story
- S 2 : dites à <=> que vous (DS: 0)
me Let you tell a story
- S 3 : une <=> histoire (DS: 0)
me Let you tell story a
- S 1 : Laissez-moi <=> (DS: 1)
Too many money and purple people
- S 1 : violet <=> personnes (DS: 4)
Too many money and people purple
- S 2 : beaucoup <=> d'argent (DS: 2)
Too money many and people purple
- S 3 : Trop <=> et (DS: 0)
and money many Too people purple
- S 1 : violet <=> personnes (DS: 4)
Faites-moi savoir s'il y a d'autres exemples que vous souhaitez que je couvre.
la source
Réponses:
JavaScript -
286279 octetsVous pouvez l'essayer sur JSFiddle .
la source
Python 3,
285277270267 octets, ne fonctionne pasJ'ai essayé de faire en sorte que la sortie corresponde au défi, pas aux cas de test, car quelques cas de test contredisent le défi.
Edit: golfé le truc «inférieur».
Modifier: changé le split ("") en split ()
Edit: J'ai réalisé que cela ne complète pas tous les trucs, et bien que je puisse trouver une réponse complète, en attendant, je pourrais aussi bien ajouter que cela ne termine qu'une seule itération.
la source
g = str.lower
ou l' autreg = lambda s: s.lower()
que vous pouvez ensuite utiliser comme ceci ..split(' ')
peut être remplacé par.split()
.