[Arquivo!] Pura matemática, física, química, etc.: problemas de treinamento do cérebro não relacionados ao comércio de qualquer forma - página 511

 

MaxZ:

Eu entendo as mudanças. É que eu ainda não descobri:

   for(int i=5;i>-1;i--)
     {
      XX|=int(1<<A[i]);
     }
   if(XX==0x7E) {return true;}

"|=" é o OR lógico? E depois é um beco sem saída...

"|=" é, neste caso, um pouco "ou". Esta coisa levanta bits por XX em posições iguais a A[i].

E se, após o loop, todos os bits de um a seis forem 1, significa que todos os dígitos de 1 a 6 se encontraram exatamente uma vez no número X.

0x7E é a representação hexadecimal do número binário 1111110. (o bit direito é zero)

 
jartmailru:

Ou talvez seja em C++ ?
.
Validar - uma função de um único parâmetro.
Talvez devêssemos fazer do jeito antigo... alocar memória e cache um bool
para todos os valores válidos do argumento?

Na MQL você pode abrir uma ordem caso, por algum milagre, os números do hóquei se dividam uniformemente! :))

Mas falando sério, eu definitivamente não sou seu igual.


MetaDriver:

"|=" é um pouco "ou" neste caso. Isto eleva os bits em XX em posições iguais a A[i].

E se após o loop todos os bits de um a seis forem 1, significa que todos os dígitos de 1 a 6 ocorrem exatamente uma vez no número X.

0x7E é a representação hexadecimal do número binário 1111110. (o bit direito é zero)
Isso foi o que mais me incomodou. Obrigado. Consegui!
 
jartmailru:

E que tal C++, no entanto?
.
2. Validar - uma função de parâmetro.
Talvez devêssemos fazê-lo à moda antiga... ...alocar memória e cache um bool
para todos os valores válidos do argumento?

1. Bem, a linguagem e o ambiente não são realmente o ponto. A questão é o próprio algoritmo.

2....Uh...O que é mais?

 
MaxZ:

Mas 125 ms claramente não está se recuperando.

Você não deveria fazer isso. Sua leitura é de 47 ms.

Pena que você não tenha uma solução, é difícil comparar resultados... :)))

.

Mas ainda não entendo porque temos que comparar por caracteres.

if(A6!=B6 && A5!=B5 && A4!=B4 && A3!=B3 && A2!=B2 && A1!=B1)

?

Parece que as sobreposições em uma única posição não são críticas?

 
MetaDriver:

Você não deveria fazer isso. Sua leitura é de 47 ms.

Pena que você não tenha uma solução, é difícil comparar resultados... :)))

.

Mas ainda não entendo porque temos que comparar por caracteres.

if(A6!=B6 && A5!=B5 && A4!=B4 && A3!=B3 && A2!=B2 && A1!=B1)

?

Parece-me que as coincidências em uma única posição são acríticas?

Vejam só! :DDD


Eu estava lutando por velocidade.

Acredito que a condição:

if (A6 != B6 && A5 != B5 && A4 != B4 && A3 != B3 && A2 != B2 && A1 != B1)

Executará muitas vezes mais rápido do que as linhas a seguir:

int A = A6*100000+A5*10000+A4*1000+A3*100+A2*10+A1;
int B = B6*100000+B5*10000+B4*1000+B3*100+B2*10+B1;

E esta condição é acionada mais de uma vez. Não é um mau ganho de velocidade. Embora possa não ser tão significativo. Você pode removê-lo e verificá-lo. Mas ainda estou do lado de que esta condição se justifica.

 
MaxZ:


Eu estava lutando por velocidade:

Acredito que a condição:

if (A6 != B6 && A5 != B5 && A4 != B4 && A3 != B3 && A2 != B2 && A1 != B1)

funcionará muitas vezes mais rápido do que as linhas a seguir:

int A = A6*100000+A5*10000+A4*1000+A3*100+A2*10+A1;
int B = B6*100000+B5*10000+B4*1000+B3*100+B2*10+B1;

E esta condição é acionada mais de uma vez. Acontece que é um bom ganho em desempenho. Embora talvez não seja tão considerável. Você pode removê-lo e verificá-lo. Mas ainda estou do lado de que esta condição se justifica

Mas parece ser incorreto. Por exemplo, se A4==B4 a condição será falsa, enquanto os números podem ser diferentes (por exemplo, 654321 e 124365)
 

corrigido, fez com que fosse assim.

                                    for(int B1=1; B1<=6; B1++)
                                      {
                                       if(B1==B2 || B1==B3 || B1==B4 || B1==B5 || B1==B6) continue;
//                                       if(A6!=B6 && A5!=B5 && A4!=B4 && A3!=B3 && A2!=B2 && A1!=B1)
                                         {
                                          int A = A6*100000+A5*10000+A4*1000+A3*100+A2*10+A1;
                                          int B = B6*100000+B5*10000+B4*1000+B3*100+B2*10+B1;
                                          if (A==B) continue;
                                          if(MathMod(A,B)==0)
                                             Print(A6,A5,A4,A3,A2,A1,"/",B6,B5,B4,B3,B2,B1,"=",A/B);
                                         }
                                      }
                                   }

Os mesmos 47 ms.

Portanto, não há necessidade de se preocupar com esta condição.

 
MetaDriver:

corrigido, fez com que fosse assim.

Os mesmos 47 ms.

Portanto - não se preocupe com essa condição.

Entendi errado... E eu estou falando de velocidade! :)) Eu não consigo pensar direito. Já passou da minha hora de dormir. Minha hora local é 6:00 da manhã.

É assim que se faz o código:

                                    for (int B1=1; B1<=6; B1++)
                                    {
                                       if (B1==B2 || B1==B3 || B1==B4 || B1==B5 || B1==B6) continue;
                                       if (A6==B6 && A5==B5 && A4==B4 && A3==B3 && A2==B2 && A1==B1) continue;
                                       
                                       int A = A6*100000+A5*10000+A4*1000+A3*100+A2*10+A1;
                                       int B = B6*100000+B5*10000+B4*1000+B3*100+B2*10+B1;
                                       if (A < B) continue;
                                       if (MathMod(A,B)==0)
                                           Print(A6,A5,A4,A3,A2,A1,"/",B6,B5,B4,B3,B2,B1,"=",A/B);
                                    }

Isso é demais.

                                       if (A==B) continue;
                                       if (MathMod(A,B)==0)

porque o roteiro teria de dividir quanto menos por mais...

 

Merda. Volodya E você tem que congelar com isso? Lá vai você - fogo! Quantas vezes!

O seu é um porco. Sinceramente...

 
MaxZ:

É assim que se faz com o código:


Sim, é melhor assim. 31 ms.

Svinozavr 22.08.2011 01:58

Merda. Volodya E isto é para congelar? Aí está - pare com isso! O quanto você pode!

O seu é Pig. Sinceramente...

Capricho do artista.... :)

As motivações mercantis ficam entediantes em uma semana. Às vezes você pode sair por amor à arte. ;)