Drunk Uncle (lo siento ME y AUS por el bloqueo regional) es un personaje ficticio de Saturday Night Live. A menudo confunde palabras para otros que suenan como ellas. Para este desafío, debe convertir el habla normal en lenguaje borracho.
Algoritmo
Traducir a drunkspeak requiere intercambiar el orden de las palabras en el texto. El intercambio se basa en la similitud de embriaguez de dos palabras. La similitud de borrachera se define como el número de letras que dos palabras tienen en los mismos índices . Sin embargo, dos palabras idénticas tienen una similitud de embriaguez de -1 . Por ejemplo, tree
y friend
tienen una similitud de embriaguez de 2, porque ambos tienen una 'r' en el índice 1 y una 'e' en el índice 3.
Todo lo que tiene que hacer es encontrar las dos palabras en el texto con la mayor similitud de borrachera, luego intercambiarlas. Una vez que intercambias dos términos, ya no se mueven. Luego observa los términos intercambiables restantes e intercambia los dos que tienen la mayor similitud de borrachera. Sigue haciendo esto hasta que no puedas cambiar más. Luego saca (o devuelve, para una función) el texto actualizado.
Detalles específicos
- Para simplificar, la entrada es una lista de palabras que consta de caracteres en [A-Za-z]
- Cada entrada contiene al menos una palabra
- La coincidencia de letras no distingue entre mayúsculas y minúsculas:
A
coincide cona
( Nota: debido a esta reglaDog
ydog
son idénticas, y por lo tanto tienen un DS de -1) - Si varios pares tienen la mayor similitud de borrachera:
- De las palabras, que pueden maximizar la similitud de borrachera, elija la que tenga el índice más bajo en la lista
- Empareje esa palabra con la palabra de índice más bajo que maximice la similitud de embriaguez
Ejemplos
Drunk Uncle needs your help
(título)- S 1 : Borracho <=> tu (DS: 1)
your Uncle needs Drunk help
- S 2 : necesita <=> ayuda (DS: 1)
your Uncle help Drunk needs
- Salida:
your Uncle help Drunk needs
- S 1 : Borracho <=> tu (DS: 1)
I love fidget spinners
(ejemplo aburrido)- S 1 : I <=> amor (DS: 0)
love I fidget spinners
- S 2 : fidget <=> hiladores (DS: 0)
love I spinners fidget
- S 1 : I <=> amor (DS: 0)
dog eat dog ear
- S 1 : comer <=> oreja (DS: 2)
dog ear dog eat
- S 2 : perro <=> perro (DS: -1)
dog ear dog eat
(este paso solo formalidad)
- S 1 : comer <=> oreja (DS: 2)
Let me tell you a story
- S 1 : Déjame <=> (DS: 1)
me Let tell you a story
- S 2 : decirte <=> (DS: 0)
me Let you tell a story
- S 3 : una historia <=> (DS: 0)
me Let you tell story a
- S 1 : Déjame <=> (DS: 1)
Too many money and purple people
- S 1 : púrpura <=> personas (DS: 4)
Too many money and people purple
- S 2 : muchos <=> dinero (DS: 2)
Too money many and people purple
- S 3 : Demasiado <=> y (DS: 0)
and money many Too people purple
- S 1 : púrpura <=> personas (DS: 4)
Avíseme si hay más ejemplos que desea que cubra.
fuente
Respuestas:
JavaScript -
286279 bytesPuedes probarlo en JSFiddle .
fuente
Python 3,
285277270267 Bytes, no funcionaTraté de hacer que la salida coincidiera con el desafío, no con los casos de prueba, ya que un par de casos de prueba contradicen el desafío.
Editar: golfed la cosita 'inferior'.
Editar: cambio de división ("") a división ()
Editar: me di cuenta de que esto en realidad no completa todas las cosas, y aunque podría llegar a una respuesta de trabajo completa, mientras tanto, también podría agregar que esto solo completa una iteración.
fuente
g = str.lower
og = lambda s: s.lower()
qué puede usar de esta manera ..split(' ')
puede ser reemplazado por.split()
.