Matheus Matos 0 Denunciar post Postado Setembro 11, 2010 Vamos lá. Ó só. Estou criando um jogo de formar palavras, como esse. Ele mostra uma combinação de 6 letras, e tenho que formar palavras de 3, 4, 5 ou 6 letras com essa combinação. Então, não to sabendo como fazer essa parte. Eu cadastro a combinação no BD e mando uma linguagem de programação embaralhar? (javascript ou PHP) O problema é que isso geraria milhões de combinações, e dessas, as que realmente são palavras são apenas algumas. ;p Já tive outras idéias, mas alguém sabe como fazer isso? Podemos debater sobre isso. Abraços Compartilhar este post Link para o post Compartilhar em outros sites
guidjos 65 Denunciar post Postado Setembro 13, 2010 O que você precisa é de um dicionário. Depois disso, você sorteia as letras do alfabeto (deve haver algum mecanismo que garanta que sempre sejam sorteados números "coerentes" de consoantes e vogais) e calcula as permutações possíveis com essas letras, salvando as combinações que têm correspondente no seu dicionário em uma estrutura de dados qualquer (um vetor faz sentido). A partir daí, você precisa bolar uma interface que limite as letras usadas pelo usuário para as letras sorteadas. O usuário deve ter alguma forma de dizer que acabou de combinar as letras. Um exemplo: "se o usuário usou todas as letras a ele disponibilizadas, ele acabou de combiná-las. Se ele não usou todas as disponibilizadas, mas pressionar [return] (enter), ele acabou de combiná-las." A cada vez que o usuário acabar de combinar as letras, o programa deve verificar se a combinação feita pelo usuário: 1. Já não foi computada como acerto; 2. Não combina com cada uma das combinações com entradas correspondentes no dicionário (previamente calculadas e verificadas). Aqui, faz sentido pensar em algum dispositivo de caching de letras/palavras... algo que permita que você "carregue" sorteios de letras (e suas respectivas palavras possíveis) previamente computados. Não tem por quê refazer todos os cálculos, todas as vezes. Com isso, aconselho fazer com que parte do programa sempre rode novos sorteios e calcule novos "cenários" pra que o usuário nunca tenha que esperar muito pra jogar. Calcular tudo na hora pode levar muito tempo, especialmente se alguma parte da implementação ficar ruim. Compartilhar este post Link para o post Compartilhar em outros sites
Matheus Matos 0 Denunciar post Postado Outubro 9, 2010 Obrigado pela atenção guidjos http://forum.imasters.com.br/public/style_emoticons/default/ermm.gif Pois é, consegui quase 25.000 palavras do português. Estou planejando fazer um script que seria pra salvar no banco, porque como você falou, se fossemos fazer isso cada vez que o usuário for jogar, demoraria bastante. O script faria mais ou menos isso: Ir na palavra; Gerar os anagramas possíveis, com 3, 4, 5 e 6 letras; Comparar com a lista de palavras; Salvar com referência a sí as que existirem. Beeem básicamente seria isso, em um laço de repetição para que fizesse com todas ou pelo menos de 500 em 500 ou 1.000 em 1.000. Se der certo fica legal e prático, e quando o usuário for jogar, só vai ter que esperar o tempo de ir no banco pegar a palavra, e não sortear tudo na hora. http://forum.imasters.com.br/public/style_emoticons/default/clap.gif Vou ver se faço isso amanhã pela manhã, já são quase duas da manhã... osso. Qualquer coisa posto aqui de novo. Abraços Matheus Matos Compartilhar este post Link para o post Compartilhar em outros sites
Matheus Matos 0 Denunciar post Postado Outubro 23, 2010 Com a ajuda de uma uma função disponibilizada neste tópico aqui do fórum, consegui fazer resolver o meu problema. Alguém perguntou lá como fazia para gerar com caracteres iguais, é simples fica assim: function anagrama($palavra, $tamanho) { function sequencias($s = array(),$tam) { if ($tam>count($s)) return FALSE; $a[0] = $s; for ($nq=1;$nq<$tam;$nq++) { $a[$nq] = array(); foreach($a[$nq-1] as $chave => $valor) { for ($num=0;$num<count($s);$num++) { if (substr_count($valor,$s[$num])==0) $a[$nq][] = $valor.$s[$num]; } } } return end($a); } $pal = str_split($palavra); $a = sequencias($pal,$tamanho); foreach($a as $chave => $valor) { if ($a[$chave-1][0]!=$valor[0] && $chave!=0); return $valor; } } Desta forma basta utilizar a função assim: echo anagrama("imasters", "4"); Postei aqui porque o tópico lá estava fechado. E esse tópico que fiz, também tem a ver com resolução de anagramas. Tópico Resolvido. Abraços Matheus Matos Compartilhar este post Link para o post Compartilhar em outros sites