Groovy e o seu selo de NERD!

Você já brincou de [Pedra, Papel e Tesoura]? …

db2e_lizard_spock

Se sua infância foi normal, provavelmente a resposta será sim… No entanto, se você já jogou a sua versão extendida [Pedra, Papel, Tesoura, LAGARTO e SPOCK] não sei se podemos dizer o mesmo!

Para quem não sabe, estamos falando da versão criada por Sam Kass, que ganhou popularidade quando foi apresentado no The Big Bang Theory.

Pois bem, não estamos aqui para falar de seriados e sim de programação, programação com Groovy!
Há um tempo atrás, participei de um dojo de programação onde o problema a ser resolvido foi exatamente esse… Pouco tempo depois, só por curiosidade fui ver como Groovy poderia facilitar ou complicar na resolução deste problema.

Em um primeiro momento decidi programar normalmente (de uma maneira que um ser humano possa ler >> ler código)

def play(play1, play2){
    warning = {i, n -> (i + n) % 5}
    position = plays.indexOf(play1)
    play1 == play2 ? 'draw' : play2 in [plays[warning(position, 1)] , plays[warning(position, 3)]] ? 'play1' : 'play2'
}

Mas não demorou muito tempo para eu tentar incurtar isso, já que o objetivo também era ver maneiras diferentes de resolver o mesmo problema e o resultado foi segundo script:

Como podemos ver abaixo, usando os recursos nerds do Groovy, o mesmo algorítimo está com apenas 88 caracteres! Se é que podemos chamar isso de algorítimo!
p={p1,p2,c={a,b->l[(l.indexOf(a)+b)%5]}->p1==p2?'eq':p2 in [c(p1, 1),c(p1,3)]?'p1':'p2'}
Segue gist completo dos exemplos com seus respectivos testes:

OK OK!! Não é bonito, mas de vez em quando é legal dar uma descontraida!

Se ficou alguma dúvida ou se você sabe como deixar o código menor ainda, é só deixar um comentário.

Anúncios
Etiquetado

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: