배경
우리는 우리와 관련된 숫자 만 사용하여 해결할 수있는 코드로 나와 내 형제의 크리스마스 선물을 식별하는 가족 전통을 가지고 있습니다. 예를 들어, 코드는 birth month * age + graduation year
(이것은 간단한 것입니다). 숫자가 8 * 22 + 2020 = 2196
이면 모든 크리스마스 선물에 2196 이라는 숫자가 기록됩니다.
나는 모든 형제 자매와 관련된 모든 번호를 가진 목록을 만드는 Python 클래스를 이미 만들었습니다. 현재 목록은 30 개가 넘지 만 40 개 이상으로 늘어날 수 있습니다.
질문
결과 숫자와 동일한 숫자 목록의 모든 수학적 조합을 테스트하는 방법이 있습니까? 예를 들어, findPossibleCombinations( [8, 7, 4, 22, 2020, 573], 2196 )
결과 번호를 생성 할 수있는 목록 목록을 반환합니까? 따라서이 함수는 [8, 22, 2020] 및 2196과 동일하게 사용될 수있는 기타 목록을 반환합니다. 숫자는 두 번 이상 사용되지 않습니다.
O (N ^ 47) 알고리즘 (물론 농담)이되는 방법이 있다고 확신하지만, 이런 종류의 결과를 달성하기 위해 가장 최적화 된 알고리즘이 무엇인지 궁금합니다.
계산 시간을 위해 작업 수를 총 5-6 개로 제한합니다. 우리 부모님은 미친 게 아니고 최종 결과를 계산하는 데 5-6 개 이상의 숫자를 사용하지 않을 것입니다. 또한 향후 몇 년 동안 다른 작업을 추가해야 할 수도 있지만 작업을 +,-, * 및 /로 제한합니다.
모든 도움에 감사드립니다! 나는 당신이 적어도 나의 이상한 가족 전통에서 웃기를 바랍니다.
편집 : 여기에 내 수업 구조가 있습니다. 훨씬 더 최적화 될 수 있지만 지금은 충분합니다. 모든 문자열은 영숫자 및 역 영숫자로 변환되고 문자로 추가됩니다. "listofnums"는 제가 사용하고 싶은 목록입니다.
def getalpha( str, inverse ):
"Converts string to alphanumeric array of chars"
array = []
for i in range(0, len(str)):
alpha = ord(str[i]) - 96
if inverse:
array.append(27 - alpha)
else:
array.append(alpha)
return array;
class Person:
def __init__(self, name, middlename, birthmonth, birthday, birthyear, age, orderofbirth, gradyear, state, zip):
#final list
self.listofnums = []
self.listofnums.extend((birthmonth, birthday, birthyear, birthyear - 1900, age, orderofbirth, gradyear, gradyear - 2000, zip))
letters = name + middlename + state
#add all related alphanumeric letters
self.listofnums.extend(getalpha(letters, False))
self.listofnums.extend(getalpha(letters, True))
itertools.product 가 필요합니다 . 주어진 시퀀스의 데카르트 곱의 모든 튜플을 생성하는 생성기를 제공합니다.
from itertools import product
values1 = range(3) # replace with your candidate birth month values
values2 = range(3, 6) # replace with your candidate age values
values3 = range(7, 9) # replace with your candidate graduation year values
target_values = {10, 20, 30} # replace with your target values (results)
# target_values need to be a set for efficient lookup.
for val1, val2, val3 in product(values1, values2, values3):
if val1 + val2 + val3 in target_values: #replace with your function
print(val1, val2, val3)
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다