checar palavras duplicadas num array

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

checar palavras duplicadas num array

Mensagem por 7hiagomp em Sex 18 Jul 2014, 20:03

Opa,
esse acho que é um pedido de engine praticamente, ou de link pra tutorial de quem conhecer;

Estou querendo checar a existência de palavras duplicadas na mesma linha ou coluna, num array de 5 linhas e 4 colunas;
o código abaixo é o que a célula 0,0 checaria se fosse feito manualmente;

Código:
if array_name[0,0] == "noone"  
   {array_check[0,0] = "empty" //se estiver vazio
   }else if array_name[0,0] == array_name[0,1] ||
            array_name[0,0] == array_name[0,2] ||
            array_name[0,0] == array_name[0,3] ||
            array_name[0,0] == array_name[1,0] ||
            array_name[0,0] == array_name[2,0] ||
            array_name[0,0] == array_name[3,0] ||                        
            array_name[0,0] == array_name[4,0]
            {
             array_check[0,0] = "invalid" // encontrou uma repetição
            }else array_check[0,0] = "valid" //nenhuma repetição

a questão é que gostaria de fazer isso de maneira automática para;

4.0, 4.1, 4.2, 4.3
3.0, 3.1, 3.2, 3.3
2.0, 2.1, 2.2, 2.3
1.0, 1.1, 1.2, 1.3
0.0, 0.1, 0.2, 0.3

de forma que cada célula checasse apenas sua linha e coluna e não checasse a si mesma.
quem puder me ajudar, ou der uma orientação por favor.  flws.

7hiagomp

Número de Mensagens : 124
Idade : 31
Data de inscrição : 21/04/2014
Reputação : 24
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: checar palavras duplicadas num array

Mensagem por PedroX em Sex 18 Jul 2014, 20:08

Use dois loops for.

Código:
linha = linha_celula;
coluna = coluna_celula;
for(col=0; col<total_colunas; col+=1)
if (array[linha, col]==valor_desejado)
{}

for(lin=0; lin<total_linhas; lin+=1)
if (array[coluna, lin]==valor_desejado)
{}

PedroX

Ranking : Nota C
Número de Mensagens : 6034
Idade : 21
Data de inscrição : 26/07/2008
Notas recebidas : C+B
Reputação : 286
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

Voltar ao Topo Ir em baixo

Re: checar palavras duplicadas num array

Mensagem por 7hiagomp em Sex 18 Jul 2014, 20:19

Opa, Pedro valeu a ajuda, mas não entendi exatamente onde ficou a checagem do próprio array. Em "valor desejado" entendi que vou apenas achar 1 palavra específica e na verdade eu não tenho a informação de qual palavra vai ser repetida.

O que estou tentando é comparar cada célula com todas as outras na mesma linha e coluna, e ver se existe repetição ou não.

7hiagomp

Número de Mensagens : 124
Idade : 31
Data de inscrição : 21/04/2014
Reputação : 24
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: checar palavras duplicadas num array

Mensagem por PedroX em Sex 18 Jul 2014, 20:29

Então, valor_desejado pode ser trocado por array[linha, coluna].

PedroX

Ranking : Nota C
Número de Mensagens : 6034
Idade : 21
Data de inscrição : 26/07/2008
Notas recebidas : C+B
Reputação : 286
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

Voltar ao Topo Ir em baixo

Re: checar palavras duplicadas num array

Mensagem por 7hiagomp em Sex 18 Jul 2014, 20:36

Mas aí vai gerar um problema que é se auto conferir, gerando um falso resultado de palavra repetida.

7hiagomp

Número de Mensagens : 124
Idade : 31
Data de inscrição : 21/04/2014
Reputação : 24
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: checar palavras duplicadas num array

Mensagem por PedroX em Sex 18 Jul 2014, 20:57

Dentro da condição do if, coloque um and:

if (array[col, linha]==valor_desejado and col!=coluna)
e também
if (array[coluna, lin]==valor_desejado and lin!=linha)

PedroX

Ranking : Nota C
Número de Mensagens : 6034
Idade : 21
Data de inscrição : 26/07/2008
Notas recebidas : C+B
Reputação : 286
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

Voltar ao Topo Ir em baixo

Re: checar palavras duplicadas num array

Mensagem por 7hiagomp em Sex 18 Jul 2014, 21:47

Eu to aplicando tentando fazer funcionar aqui lek, daqui a pouco ja dou retorno.

7hiagomp

Número de Mensagens : 124
Idade : 31
Data de inscrição : 21/04/2014
Reputação : 24
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: checar palavras duplicadas num array

Mensagem por Kapoty em Sex 18 Jul 2014, 22:49

Fiz uma engine aqui que faz exatamente oque você deseja:

Dropbox

Essa imagem explica oque ela faz:



O verde é a célula atual, o azul é por onde ela começara a checar se seu valor é o mesmo que o da célula atual (célula verde), os azuis claros são os próximos a serem checados, a próxima célula faz a mesma coisa, mas não checa as celulas que já passaram.

Kapoty

Ranking : Nota B
Número de Mensagens : 635
Data de inscrição : 05/11/2011
Notas recebidas : E + D + C + B + D +B + A
Reputação : 22
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 1

Voltar ao Topo Ir em baixo

Re: checar palavras duplicadas num array

Mensagem por 7hiagomp em Sex 18 Jul 2014, 23:09

Eu to aplicando tentando fazer funcionar aqui lek, daqui a pouco ja dou retorno.

----------------------------------------------------------------------------------

Bem, eu não consegui adaptar de maneira apropriada. Então vou por aqui como está;
Esse é o objeto que mapeia a matrix 5x4, ele desenha e mapeia; O código atual desenha a matrix
recebe o nome do objeto nas posições determinadas, então fica uma matriz assim;
como as caixas estão no jogo, e como fica a matriz


o array_name recebe o nome dos objetos na posição e se vc troca o objeto(essa é dinamica do jogo)
ele troca o nome no array;  tem um exemplo do jogo online aqui; mprado.info/sudocarga

o array_check recebe "vazio", "repetido", "ok", na mesma posição da caixa que ele checou,  sendo os nomes auto-explicativos.

Essa foi uma breve explicação, então agora ao código;

Create:

Código:
for (i=0; i<5; i++)
    {
     for (j=0; j<4; j++)
     {
      array_name[i,j] = "undefined"
      array_check[i,j] = "vazio"
     }
    }    
    
n = 650; //x
m = 650; //y

Step:

Código:
for (i=0; i<5; i++)
    {
     m -= 100;
     for (j=0; j<4; j++)
     {
      n += 100;
      array_name[i,j] = object_get_name(instance_position(n+40,m+40,all).object_index);
      if m == 150 && n == 1050 {m = 650;}
      if n == 1050 {n = 650;}
      
      //checagem começa aqui
      if array_name[i,j] == "vazio"   //checar para 'vazio' primeiro
      {
       array_check[i,j] = "vazio";
      } else
        {
         for (line=0; line<5; line++)
          {
          for (col=0; col<4; col++)
          {   for (line2=line+1; line2<5; line2++)
              {  if array_name[line, col] == array_name[line2, col]
                 {
                  array_check[i,j] = "repetido"; //retorna outra matriz na mesma posição como "repetido"
                 }else array_check[i,j] = "ok";  //retorna outra matriz na mesma posição como "ok"
              }
          }
           for (col2=col+1; col2<4; col2++)
           {   if array_name[line, col] == array_name[line, col2]
                {
                 array_check[i,j] = "repetido"; //retorna outra matriz na mesma posição como "repetido"
                }else array_check[i,j] = "ok";  //retorna outra matriz na mesma posição como "ok"
           }
          }
        }
      }
    }

problemas;
1 - qualquer caixa em qualquer posição recebe "repetido";
result:

2 - olhando o step devagar, percebi que o valor está sobrescrevendo. Por exemplo, quando ele encontra uma ocorrencia de repetição no código, ele alerta, mas como ele continua checando, se na próxima checagem ele está "Ok" ele apaga a condição "repetição" anterior.

7hiagomp

Número de Mensagens : 124
Idade : 31
Data de inscrição : 21/04/2014
Reputação : 24
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: checar palavras duplicadas num array

Mensagem por Kapoty em Sab 19 Jul 2014, 01:26

Adaptei seu código e fiz um exemplo usando ele:

Dropbox

Kapoty

Ranking : Nota B
Número de Mensagens : 635
Data de inscrição : 05/11/2011
Notas recebidas : E + D + C + B + D +B + A
Reputação : 22
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 1

Voltar ao Topo Ir em baixo

Re: checar palavras duplicadas num array

Mensagem por 7hiagomp em Sab 19 Jul 2014, 09:18

CAARAAAAAA! TA funcionando perfeitamente, muuuito obrigado. Salvou p semmpre kk

7hiagomp

Número de Mensagens : 124
Idade : 31
Data de inscrição : 21/04/2014
Reputação : 24
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: checar palavras duplicadas num array

Mensagem por Conteúdo patrocinado Hoje à(s) 09:36


Conteúdo patrocinado


Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum