쉘 스크립트를 사용하여 정렬 또는 결합

쉘 스크립트를 사용하여 정렬 또는 결합

매일 숫자가 파일에 추가됩니다. 예를 들어 1000, 2000, 2560, 5356 등, 해당 월 말일까지 최대 30/31 숫자까지 표현할 수 있습니다. 5560과 같은 난수를 전달할 때 이 5560은 합이 5560인 2개, 3개, 4개 또는 5개 숫자의 조합이 될 수 있는 쉘 스크립트를 작성하고 싶습니다. 이 숫자는 임의의 순열이나 조합이 될 수 있습니다. 이 모든 숫자는 합계가 전달된 난수 5560과 동일하게 인쇄되어야 합니다.

내가 생각할 수 있는 가능한 해결책은 다음과 같습니다.

  1. 파일을 반복하고 모든 값을 배열에 저장합니다.
  2. 중괄호를 사용하여 배열 요소 결합
  3. ?

답변1

덧셈은 교환 가능합니다. 따라서 특정 조합의 합은 동일한 숫자의 순열의 합과 같습니다.

이렇게 하면 시간이 좀 절약될 것입니다. 31개의 숫자 {2,3,4,5}를 동시에 조합하는 수는 다음과 같습니다.오직206,336이고 순열 {2,3,4,5}의 수는 21,172,380입니다.

컴포지션은 재귀 솔루션에 적합하지만 셸에서 실행하는 것은 성가시거나 심지어 금지될 수 있습니다. awk해결책을 고려해 보시겠습니까 ?

파일의 모든 숫자가 고유합니까? (3 + 3) = 6이면 3을 다시 정렬할 수 있으므로 두 개의 (동일한) 조합이 있습니다.

관련 정보