O tio bêbado (desculpe-me pela AUS pelo bloqueio de região) é um personagem fictício do Saturday Night Live. Ele muitas vezes confunde palavras para outros que soam como elas. Para esse desafio, você precisa converter a fala normal em fala bêbada.
Algoritmo
Traduzir para drunkspeak requer a troca da ordem das palavras no texto. A troca é baseada na semelhança de embriaguez de duas palavras. A similaridade da embriaguez é definida como o número de letras que duas palavras têm nos mesmos índices . No entanto, duas palavras idênticas têm uma semelhança de embriaguez de -1 . Por exemplo, tree
e friend
têm uma semelhança de embriaguez de 2, porque ambos têm um 'r' no índice 1 e um 'e' no índice 3.
Tudo o que você precisa fazer é encontrar as duas palavras no texto com a maior semelhança de embriaguez e depois trocá-las. Depois de trocar dois termos, eles não se movem mais. Depois, você analisa os termos trocáveis restantes e troca os dois que têm a maior semelhança de embriaguez. Você continua fazendo isso até não poder mais trocar. Em seguida, você gera (ou retorna, para uma função) o texto atualizado.
Específicos
- Para simplificar, input é uma lista de palavras que consistem em caracteres em [A-Za-z]
- Cada entrada contém pelo menos uma palavra
- A correspondência de letras não faz distinção entre maiúsculas e minúsculas:
A
corresponde aa
( Nota: devido a esta regraDog
edog
é idêntica e, portanto, tem um DS de -1) - Se vários pares tiverem a maior semelhança de embriaguez:
- Das palavras que podem maximizar a semelhança da embriaguez, escolha aquela com o menor índice da lista
- Emparelhe essa palavra com a palavra de índice mais baixo que maximize a semelhança de embriaguez
Exemplos
Drunk Uncle needs your help
(título)- S 1 : Bêbado <=> seu (DS: 1)
your Uncle needs Drunk help
- S 2 : precisa de ajuda == (DS: 1)
your Uncle help Drunk needs
- Resultado:
your Uncle help Drunk needs
- S 1 : Bêbado <=> seu (DS: 1)
I love fidget spinners
(exemplo chato)- S 1 : Eu <=> amo (DS: 0)
love I fidget spinners
- S 2 : fidget <=> spinners (DS: 0)
love I spinners fidget
- S 1 : Eu <=> amo (DS: 0)
dog eat dog ear
- S 1 : comer <=> orelha (DS: 2)
dog ear dog eat
- S 2 : cachorro <=> cachorro (DS: -1)
dog ear dog eat
(essa etapa é apenas formalidade)
- S 1 : comer <=> orelha (DS: 2)
Let me tell you a story
- S 1 : Deixe-me <=> (DS: 1)
me Let tell you a story
- S 2 : informar <=> você (DS: 0)
me Let you tell a story
- S 3 : uma história <=> (DS: 0)
me Let you tell story a
- S 1 : Deixe-me <=> (DS: 1)
Too many money and purple people
- S 1 : pessoas roxas <=> (DS: 4)
Too many money and people purple
- S 2 : muito <=> dinheiro (DS: 2)
Too money many and people purple
- S 3 : muito <=> e (DS: 0)
and money many Too people purple
- S 1 : pessoas roxas <=> (DS: 4)
Deixe-me saber se há mais exemplos que você deseja que eu cubra.
fonte
Respostas:
JavaScript -
286279 bytesVocê pode experimentá-lo no JSFiddle .
fonte
Python 3,
285277270267 bytes, não está funcionandoTentei fazer a saída corresponder ao desafio, não aos casos de teste, pois alguns deles contradizem o desafio.
Edit: jogou golfe no menor 'coisinha'.
Editar: alteração de divisão ("") para divisão ()
Edit: eu percebi que isso realmente não completa todas as coisas, e embora eu possa ter uma resposta completa, enquanto isso, devo acrescentar que isso só completa uma iteração.
fonte
g = str.lower
oug = lambda s: s.lower()
que você então pode usar como este ..split(' ')
pode ser substituído por.split()
.