Desafio de programação: resolvendo Lights Off

Fiz essa versão do clássico joguinho Lights Off:

O jogo é simples, e o objetivo é apenas apagar todas as luzes. Por curiosidade, fiz também o algoritmo que resolve o jogo:

O desafio está lançado. O primeiro que colocar nos comentários a URL de uma página com um botão “solve” como o meu ganha uma entrada para o Codeshow. Importante:

  1. Vale o primeiro comentário. Mesmo que você comente de madrugada e eu demore a moderar, ganha quem comentar primeiro.
  2. O solucionador tem que ser escrito em Javascript. Você pode copiar minha versão do jogo e desenvolver em cima dela.
  3. Não pode resolver na base da tentativa e erro. Tem que ser uma boa solução, que resolva qualquer estado do tabuleiro em 20 passos ou menos.

Divirtam-se!

(O pessoal da Visie, se quiser participar, pode. Só não vai ganhar nada ;-))

Elcio: Elcio é sócio fundador da Visie Padrões Web. Pioneiro no uso e divulgação dos padrões do W3C no Brasil, Elcio já treinou equipes de dezenas de empresas como Globo.com, Terra, Petrobras, iG e Locaweb. Além disso, tem dirigido as equipes da Visie no desenvolvimento de projetos web para marcas como Brastemp, Itaú Unibanco, Johnson & Johnson e Rede Globo.

View Comments (14)

  • ". . A idéia do pré-processamento e "tentativa e erro" me soa brute force demais."

    A solução não tem nada de "tentativa e erro", muito pelo contrário: é uma heurística com um pequeno princípio de programação dinâmica.

    A solução dele também tem um graaande e elegante princípio de programação dinâmica, porém, não é nada eficiente, uma vez que precisamos calcular um sistema linear e o resultado de 25 equações lineares pelo método de Gauss (que é O(n³) para o pior caso). Não é tentativa e erro mas não é nada eficiente computacionalmente.

    O que seria uma matriz mais `séria´?

  • . . A idéia do pré-processamento e "tentativa e erro" me soa brute force demais. Idealmente a gente teria uma matriz mais séria de resolução pra não precisar da passagem dupla pelo algoritmo de redução.
    . . Um cara com muito tempo livre fez isso: http://aix1.uottawa.ca/~jkhoury/gamesolution.htm
    . . Loucura. Eu ficaria com essa solução mais simples, apesar de tecnicamente nem sempre ser a solução mínima.

  • Agora com tudo resolvido parece tão fácil. Mesmo que não tivesse prêmio valeu este post. Gastei meu tico e teco aqui por um tempo.

  • Viva!! :D Gostei do desenvolvimento em equipe, hehehe! Muito obrigado, Carlos, pela ajuda, estudarei direito a sua forma de animar e mostrar a solução passo a passo!

    Muito obrigado, Élcio, pela oportunidade! Estou no aguardo do contato.

  • Resolvido, desafio solucionado, e o prêmio é do André!

    André, amanhã alguém aqui vai te procurar para acertar os detalhes.

    Parabéns a todos.

  • Como eu sou malvado, dei um merge da minha ideia com a solução perfeita do André Taiar..!

    http://ferrari.eti.br/elcio/desafio2.htm

    Bom, se tudo estiver ok agora @elcio, por favor, dê o prêmio ao André Taiar ai, afinal, a solução perfeita foi ele que encontrou.. eu só fiz o negocio ficar animado.

    Abração a todos e tenham um excelente codeshow!...

    ps. o @Elcio apelou nesse desafio...

  • Adriano, não consegui ver a diferença. Para mim, parece que o jogo que você indicou está funcionando igualzinho ao meu...

    André, pega o código do Carlos como referência (ele não vai poder vir ao Codeshow mesmo...) Tendo chegado onde você chegou, vai ser muito chato se alguém resolver isso antes de você.

  • Consegui fazer uma versão otimizada que pré-processa a matriz antes de começar a iterar sobre ela.

    Em todos os meus testes, não passaram de 15 passos para resolver! :)

    http://taiar.com.br/lightsoff/

    Porém, continua sem animação... Pesquisei pra tentar fazer isso mas não consegui.