게임 해결의 일반적인 문제에 접근하는 여러 가지 방법이 있으며 인간 전략을 모방하는 것이 항상 최선의 방법은 아닙니다.
첫번째 방법,
는 기본적으로, 우리는 세포의 조합의 모든 가능성을 시도하려는 짐승 - forcy하고 올바른 합계를 가지고있는 사람을 선택 : 그것은 여기에 당신이 당신의 질문을 해결할 수있는 방법은 말했다.
cell_1 = [1,3,4,9]
cell_2 = [2,4,5]
cell_3 = [3,4,9]
all_valid_combinations = cell_1.product(cell_2,cell_3).select {|combo| combo.sum == 12}
# => [[1, 2, 9], [3, 5, 4], [4, 4, 4], [4, 5, 3]]
#.sum isn't a built-in function, it's just used here for convenience
은 개별 셀이 아래로 껍질을 벗기다, 당신은 할 수 있습니다 : 당신은 세포의 거대한 대형 세트가없는 경우
cell_1 = all_valid_combinations.map {|combo| combo[0]}.uniq
# => [1, 3, 4]
cell_2 = all_valid_combinations.map {|combo| combo[1]}.uniq
# => [2, 5, 4]
. . .
는,이 방법으로 코드 쉽습니다. 그것은 약간의 비능률적 인 것을 얻을 수 있습니다. 작은 문제의 경우, 이것이 제가 사용하는 방법입니다. 검색
또 다른 잘 알려진 기술을 역 추적
두번째 방법은 다른 접근 방식에서 문제가 걸립니다. 기본적으로 각 셀에 대해 "이 셀을 다른 셀에 지정할 수 있습니까?"라고 물어보십시오.
셀 1부터 시작하여 숫자는 1 일 수 있습니까? 확인하기 위해 셀 2와 셀 3의 합이 11이 될 수 있는지 확인합니다. (12-1) * 셀 2의 값은 2입니까? 확인하려면 셀 3 합계 9 (11-1)
등등 수 있습니다. 아주 많은 경우에 유효한 조합을 여러 개 가질 수있는 경우 셀에 대해 유효한 숫자를 처음 발견 할 때 'true'를 반환 할 수 있기 때문에 약간 더 빠릅니다. 어떤 사람들은 재귀 알고리즘이 좀 더 어려워지기 때문에 마일리지가 다를 수 있습니다.
이것은 역 추적을 통해 얻을 수 있습니다. –
개념적 단계에 머물러있는 것처럼 들립니다. 당신을 도울 누군가를 고용했다고 생각 했습니까? – pguardiario
@pguardiario 당신은 "누군가"가되고 싶습니까? –