Jump to content
Fórum Script Brasil
  • 0

Ajuda em Logica para acertar uma senha...


Luiz Antonio

Question

ola pessoal, tudo bem?

Preciso de uma ajuda...

Estou criando uma area de promoções em um site...e tem um tipo de jogo e quem acertar uma senha leva o brinde...

Quando o usuario digitar a senha de 4 digitos, se ele não acertar a senha, a programação deve dizer quantos numeros ele acertou...não precisa ser da ordem certa...mas apenas o numero...tipo você acertou 3 numeros da senha ...

Qual a melhor forma de fazer esta programação? Pensei em pegar o numero digitado pelo usuario e com a funçao substr, comparar numero por numero... e com a função strpos verificar se existe o numero na senha ... se tiver soma em um contador... mas o meu problema é se tiver numeros iguais na senha vai dar o numero errado do contador. Por exemplo a senha é 5452, e o cara digitou 5196 ... o usuario na verdade acertou apenas um cinco...mas no contador vai estar 2... segue o codigo:

$senha = 5452; // Senha no banco de dados
                       $senhadigitada = $_POST['senhadigitada']; // Senha digitada pelo usuario         
                                $verifica1 = strpos($senha, substr($senhadigitada, 0, 1));
                if($verifica1){
                    $contador= $contador + 1;
                }
                
                $verifica2 = strpos($senha, substr($senhadigitada, 1, 1));
                if($verifica2){
                    $contador= $contador + 1;
                }

                $verifica3 = strpos($senha, substr($senhadigitada, 2, 1));
                if($verifica3){
                    $contador= $contador + 1;
                }

                $verifica4 = strpos($senha, substr($senhadigitada, 3, 2));
                if($verifica4){
                    $contador= $contador + 1;
                }

alguém sabe uma forma mais correta de fazer esta programação?

Obrigado pessoal....

Edited by Luiz Antonio
Link to comment
Share on other sites

5 answers to this question

Recommended Posts

  • 0

Hi.

Que tal quebrar a string em um array e ir comparando os índices?

Fiz uma funçãozinha de exemplo pra ti.

function comp($a, $b) {
    if(strlen($a) != strlen($b)) return 0;
    list($a, $b, $c) = array(str_split($a), str_split($b), 0);
    for($i = 0; $i < count($a); $i++)
        if($a[$i] == $b[$i])
            $c += 1;
    return $c;
}

$senha = 5452;
$in = 5196;

var_dump(comp($senha, $in));

Se não for isso, me avisa que eu não entendi direito. =P

Se precisar de explicação, também é só falar.

[]'s

Link to comment
Share on other sites

  • 0
Hi.

Que tal quebrar a string em um array e ir comparando os índices?

Fiz uma funçãozinha de exemplo pra ti.

function comp($a, $b) {
    if(strlen($a) != strlen($b)) return 0;
    list($a, $b, $c) = array(str_split($a), str_split($b), 0);
    for($i = 0; $i < count($a); $i++)
        if($a[$i] == $b[$i])
            $c += 1;
    return $c;
}

$senha = 5452;
$in = 5196;

var_dump(comp($senha, $in));

Ola amigo, muito obrigado pela ajuda...mas ainda não esta funcionando corretamente...pois não é para comparar apenas pela posição...tenho que passar de todas as posições... tipo assim... a senha é 1234, digitei 4321 ... acertei portanto os 4 numeros...porem as posições que não estão corretas... mas tenho que exibir o numero 4 como resposta...que o usuario acertou todos os numeros...entendeu? Ele não acertou a senha correta...mas é uma pista que ele acertou todos os numeros e agora precisa acertar a posição dos numeros... Essa é a dificuldade ...

Se não for isso, me avisa que eu não entendi direito. =P

Se precisar de explicação, também é só falar.

[]'s

Link to comment
Share on other sites

  • 0

Hmm, acho que saquei.

Vê aí agora:

function comp($a, $b) {
    list($a, $b, $c) = array(str_split($a), str_split($b), 0);
    for($i=0;$i<count($a);$i++){
        for($j=0;$j<count($b);$j++)
            if($a[$i] == $b[$j])
                $c += 1;
    }
    return $c;
}

$senha = 1234;
$in = 4321;

echo 'Você acertou: ', comp($senha, $in), "\n";

[]'s

Link to comment
Share on other sites

  • 0
Hmm, acho que saquei.

Vê aí agora:

function comp($a, $b) {
    list($a, $b, $c) = array(str_split($a), str_split($b), 0);
    for($i=0;$i<count($a);$i++){
        for($j=0;$j<count($b);$j++)
            if($a[$i] == $b[$j])
                $c += 1;
    }
    return $c;
}

$senha = 1234;
$in = 4321;

echo 'Você acertou: ', comp($senha, $in), "\n";

[]'s

valeu Fvox tá quase certo, porem quando o usuario digita numeros repetidos da problema... por exemplo:

$senha = 1234;

$in = 4444;

O sistema diz que você acertou 4 numeros...mas na verdade acertou apenas 1 ... ai que esta o problema entendeu?

Link to comment
Share on other sites

  • 0

Nada que um break no loop não resolva... =p

function comp($a, $b) {
    list($a, $b, $c) = array(str_split($a), str_split($b), 0);
    for($i=0;$i<count($a);$i++)
        for($j=0;$j<count($b);$j++)
            if($a[$i] == $b[$j]){
                $c += 1;
                break;
            }
    return $c;
}

$senha = 1234;
$in = 4444;

echo 'Você acertou: ', comp($senha, $in), "\n";

[]'s

Edited by Fvox
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...