조합을 고유 한 합으로 저장하는 간단한 숫자 패턴
-
19-09-2019 - |
문제
이것은 수학 문제이지만, 이것이 일부 프로그래밍 시나리오에서 등장해야한다고 확신합니다. 적어도 그렇게 희망하며, 이런 유형의 상황에 대한 이름이 있는지 궁금합니다.
시리즈에 7 개의 항목이 있다고 가정합니다. 이 예를 위해, 요일을 사용해 봅시다. 나는 다음 주에 그들이 올 요일을 제출하기를 원합니다. 그들은 매주 매일 하나의 표준 확인란을 제공합니다.
하나의 데이터베이스 필드에서 하나의 정수로 선택한 날을 저장하고 싶습니다.
분명히, 나는 매일 숫자, 1-7을 할당 할 수 있습니다 (사용자가 모든 선택을 선택하지 않은 경우 0을 남겨 두십시오). 그러나 한 사용자가 월요일과 화요일 (1 + 2)을 선택하고 다른 사용자가 수요일 (3)을 선택하면 문제가 발생합니다.
나는 또한 매주 매주 다른 조합의 조합이 다른 조합과 동일하게하는 것이 불가능한 기괴한 독특한 독특한 것을 줄 수있었습니다.
내 희망은 두 번째 시나리오에 대한 그러한 시리즈를 구성하기보다는 이미 잘 사용되고 존경받는 일부 수치 속성 (시리즈의 각 숫자의 제곱 등)이 존재하기를 바랍니다. 이상적으로, 이것은 프로그래밍에 너무 익숙 할 것이므로 개별 숫자를 도출하는 것은 일반적인 프로그래밍 언어 (내 경우 PHP)의 오버 헤드가 거의 사용되지 않을 것입니다.
나는 단지 이것을 꿈꾸 었습니까, 아니면 이와 같은 것이 존재합니까?
해결책
비트 마스크 - 파워 2를 사용하십시오.
Monday = 2 ^ 0 = 1
Tuesday = 2 ^ 1 = 2
등등. 그런 다음 월요일과 화요일은 다음과 같습니다.
Monday | Tuesday = 3 (or 00000011 in binary)
다른 팁
당신은 사용할 수 있습니다
Monday = 1
Tuesday = 2
Wednesday = 4
Thursday = 8
Friday = 16
Saturday = 32
Sunday = 64
조합은 독특합니다.
그런 다음 월요일과 화요일 = 3, 수요일 = 4.
이것은 C#에서 IDEE에 대한 좋은 설명을 제공합니다.
메모리가 소중한 시대에 프로그래머는 종종 설정, 매개 변수, 게임 레이아웃 등을 인코딩하는 데 많은 어려움을 겪었습니다. 일부 언어에는 비트 세트가 내장되어있었습니다.
한 번은 여덟 여왕 문제를 해결하기 위해 보드 레이아웃을 저장하는 데 사용한 비트 세트에 대한 튜토리얼을 읽은 것을 기억합니다.
대부분의 C 프로그래머는 이러한 종류의 문제에 대해 비트 조작 매크로의 작은 라이브러리를 가지고있었습니다. 보다 비트 세트 예를 들어. 예를 들어 디지털 I/O에서 비트를 켜고 끄는 직접 하드웨어 조작을 수행하는 코드에 여전히 많이 사용됩니다.