Pergunta

Este é um problema de matemática, mas tenho certeza que deve surgir em alguns cenários de programação, pelo menos assim espero, e fiquei pensando se existe um nome para esse tipo de situação:

Suponha que eu tenha 7 itens em uma série.Para fins deste exemplo, vamos usar os dias da semana.Gostaria que um usuário enviasse quais dias da semana planeja vir na semana seguinte.Eles são apresentados com uma série padrão de caixas de seleção, uma para cada dia da semana.

Gostaria de armazenar os dias que eles escolheram em um campo do banco de dados como um único número inteiro.

Obviamente, eu poderia atribuir a cada dia um número de 1 a 7 (deixando 0 de fora caso o usuário deixe todas as opções desmarcadas).Mas então tenho problemas se um usuário escolher segunda e terça (1 + 2) e outro escolher quarta (3).

Eu também poderia dar a cada dia da semana algo bizarro e único, de modo que fosse impossível que qualquer combinação de dígitos fosse idêntica a qualquer outra combinação.

Minha esperança é que, em vez de criar tal série para o segundo cenário, já exista alguma propriedade numérica (talvez o quadrado de cada número da série, etc.) que já seja bem utilizada e respeitada.Idealmente, isso seria tão familiar à programação que derivar os dígitos individuais exigiria muito pouca sobrecarga de uma linguagem de programação comum (no meu caso, PHP).

Acabei de sonhar com isso ou existe algo assim?

Foi útil?

Solução

Use um bitmask - poderes de 2.

Monday = 2 ^ 0 = 1
Tuesday = 2 ^ 1 = 2

e assim por diante. Então, segunda e terça -feira se tornam:

Monday | Tuesday = 3 (or 00000011 in binary)

Outras dicas

Você poderia usar

Monday = 1
Tuesday = 2
Wednesday = 4
Thursday = 8
Friday = 16
Saturday = 32
Sunday = 64

As combinações serão únicas.

Então, segunda e terça -feira = 3, e quarta -feira = 4.

Isso dá uma boa explicação do Idee em C#

Atributo enum sinalizadores

Na época em que a memória era preciosa, os programadores muitas vezes tinham muitos problemas para codificar configurações, parâmetros, layouts de jogos e assim por diante como conjuntos de bits.Algumas linguagens ainda tinham conjuntos de bits integrados.

Lembro-me de uma vez ter lido um tutorial sobre conjuntos de bits que os usava para armazenar layouts de tabuleiro para resolver o problema das Oito Rainhas.

A maioria dos programadores C tinha sua própria pequena biblioteca de macros de manipulação de bits exatamente para esse tipo de problema.Ver Conjuntos de bits por exemplo.Eles ainda são muito usados ​​em códigos que fazem manipulação direta de hardware - ligando e desligando bits em E/S digital, por exemplo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top