 
			
				15.05.2022, 23:50
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Интересующийся 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 31.08.2021 
					
					
					
						Сообщений: 15
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
			
			 
				Как записать результаты в массив,я в ступоре.
			 
			
		
		
		
		Доброго времени суток форумчане.Я что то впал в ступор   . 
Задача такая,нужно найти все уникальные комбинации в массиве , сумма которых равна искомому числу.Это отлично решается этим кодом.Пример ниже:
 
var A = [15.8, 1.2, 1.1, 1.0, 0.9, 0.8, 0.7, 0.6, 0.6, 0.6, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5];
var K = 2;
var pr = [];
Combination(A, K);
function Combination(A, K) {
	A.sort((a, b) => a - b);
	let local = [];
	unique_combination(0, 0, K, local, A);
}
function unique_combination(l, sum, K, local, A) {
	if (sum == K) {
		pr = local;
		console.log("pr",pr);
	}
	
	for (let i = l; i < A.length; i++) {
		if (sum + A[i] > K)
		continue;
		if (i > l && A[i] == A[i - 1])
		continue;
		local.push(A[i]);
		unique_combination(i + 1, sum + A[i], K, local, A);
		local.pop();
	}
}
на выходе получаем уникальные комбинации:
 
pr (4) [0.5, 0.5, 0.5, 0.5]
pr (3) [0.5, 0.5, 1]
pr (3) [0.5, 0.6, 0.9]
pr (3) [0.5, 0.7, 0.8]
pr (3) [0.6, 0.6, 0.8]
pr (2) [0.8, 1.2]
pr (2) [0.9, 1.1]
 
и  это круто,но задача состоит в том что бы все эти комбинации развернуть в обратном порядке и записать в новый массив,должно выглядеть так на выходе  
[[0.5, 0.5, 0.5, 0.5], [1, 0.5, 0.5], [0.9, 0.6, 0.5], [0.8, 0.7, 0.5], [0.8, 0.6, 0.6], [1.2, 0.8], [1.1, 0.9]]
 . 
Проблема № 1,я пробовал применить  
reverse()
  к  
local
  так  
pr = local.reverse();
 ,но к моему глубокому удивлению на выходе получаю вот это   :
 
pr (4) [0.5, 0.5, 0.5, 0.5]//верно
pr (3) [1, 0.5, 0.5]//верно
pr (3) [0.9, 0.6, 1]//не верно!!!!!!!
pr (3) [0.8, 0.7, 0.9]//не верно!!!!!!!
pr (3) [0.8, 0.6, 0.6]//верно
pr (2) [1.2, 0.8]//верно
pr (2) [1.1, 0.9]//верно
 
Проблема № 2,как записать все результаты в новый массив  ,я пробовал  
push,splice()
 ,но толку 0.В идеале нужен код который соответственно описанного выше примера создаст новую переменную которая будет использоваться далее в которую будет помещён результат  
[[0.5, 0.5, 0.5, 0.5], [1, 0.5, 0.5], [0.9, 0.6, 0.5], [0.8, 0.7, 0.5], [0.8, 0.6, 0.6], [1.2, 0.8], [1.1, 0.9]]
 ,этот результат естественно представлен в виде примера для данных условий . 
var A и var K
  естественно могут применять и другие значения. 
В общем спасите!, почти сутки борюсь,но результатов нет.  
		
	
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось pingu, 15.05.2022 в 23:53.
				Причина: Ошибка в заголовке
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				16.05.2022, 00:06
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 27.05.2010 
					
					
					
						Сообщений: 33,150
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		pingu,
  
let A = [15.8, 1.2, 1.1, 1.0, 0.9, 0.8, 0.7, 0.6, 0.6, 0.6, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5];
let K = 2;
let arr = Combination(A, K);
function Combination(A, K) {
	A.sort((a, b) => a - b);
	let local = [], pr = [];
	unique_combination(0, 0, K, local, A, pr);
    return pr
}
function unique_combination(l, sum, K, local, A, pr) {
	if (sum == K) {
        pr.push(local.slice(0));
	}
	for (let i = l; i < A.length; i++) {
		if (sum + A[i] > K)
		continue;
		if (i > l && A[i] == A[i - 1])
		continue;
		local.push(A[i]);
		unique_combination(i + 1, sum + A[i], K, local, A, pr);
		local.pop();
	}
}
console.log("arr",arr);
 
		
	
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось рони, 16.05.2022 в 00:19.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				16.05.2022, 00:37
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Интересующийся 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 31.08.2021 
					
					
					
						Сообщений: 15
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	
		
			Сообщение от рони
			 
		
	 | 
 
	
		pingu, 
 
let A = [15.8, 1.2, 1.1, 1.0, 0.9, 0.8, 0.7, 0.6, 0.6, 0.6, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5];
let K = 2;
let arr = Combination(A, K);
function Combination(A, K) {
	A.sort((a, b) => a - b);
	let local = [], arr = [], pr = [];
	unique_combination(0, 0, K, local, A, pr, arr);
    return arr
}
function unique_combination(l, sum, K, local, A, pr, arr) {
	if (sum == K) {
		pr = local;
		//console.log("pr",pr);
        arr.push(pr.slice(0));
	}
	for (let i = l; i < A.length; i++) {
		if (sum + A[i] > K)
		continue;
		if (i > l && A[i] == A[i - 1])
		continue;
		local.push(A[i]);
		unique_combination(i + 1, sum + A[i], K, local, A, pr, arr);
		local.pop();
	}
}
console.log("arr",arr);
	 | 
 
	
 
 И как всегда вы ГУРУ   ,и как всегда идеал,но ещё одна проблема не решена,как упорядочить все элементы в массивах комбинаций от большего к меньшему перед записью в финальный массив,должно быть так 
pr (4)[0.5, 0.5, 0.5, 0.5]//верно
pr (3)[1, 0.5, 0.5]//верно
pr (3)[0.9, 0.6, 1]//не верно!!!!!!!
pr (3)[0.8, 0.7, 0.9]//не верно!!!!!!!
pr (3)[0.8, 0.6, 0.6]//верно
pr (2)[1.2, 0.8]//верно
pr (2)[1.1, 0.9]//верно
 
3 и 4 комбинации не корректны в моём случае?Должно же быть так  
pr (3)[0.9, 0.6, 1]//не верно!!!!!!! => [1, 0.9, 0.6]
pr (3)[0.8, 0.7, 0.9]//не верно!!!!!!!=>[0.9, 0.8, 0.7]
 Как это исправить перед записью в массив?Спасибо!  
		
	
		
		
		
		
		
		
	
		
			
			
	
			
			
			
			
			
				 
			
			
			
			
			
			
				
			
			
			
		 
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				16.05.2022, 00:48
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 27.05.2010 
					
					
					
						Сообщений: 33,150
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		pingu,
    
<script>
let A = [15.8, 1.2, 1.1, 1.0, 0.9, 0.8, 0.7, 0.6, 0.6, 0.6, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5];
let K = 2;
let arr = Combination(A, K);
function Combination(A, K) {
	A.sort((a, b) => a - b);
	let local = [], pr = [];
	unique_combination(0, 0, K, local, A, pr);
    return pr
}
function unique_combination(l, sum, K, local, A, pr) {
	if (sum == K) {
        pr.push(local.slice(0).sort((a, b) => b - a));
	}
	for (let i = l; i < A.length; i++) {
		if (sum + A[i] > K)
		continue;
		if (i > l && A[i] == A[i - 1])
		continue;
		local.push(A[i]);
		unique_combination(i + 1, sum + A[i], K, local, A, pr);
		local.pop();
	}
}
document.write(`<pre>${JSON.stringify(arr)}</pre>`);
  </script>
 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				16.05.2022, 00:56
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Интересующийся 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 31.08.2021 
					
					
					
						Сообщений: 15
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	
		
			Сообщение от рони
			 
		
	 | 
 
	
		pingu, 
    
<script>
let A = [15.8, 1.2, 1.1, 1.0, 0.9, 0.8, 0.7, 0.6, 0.6, 0.6, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5];
let K = 2;
let arr = Combination(A, K);
function Combination(A, K) {
	A.sort((a, b) => a - b);
	let local = [], pr = [];
	unique_combination(0, 0, K, local, A, pr);
    return pr
}
function unique_combination(l, sum, K, local, A, pr) {
	if (sum == K) {
        pr.push(local.slice(0).sort((a, b) => b - a));
	}
	for (let i = l; i < A.length; i++) {
		if (sum + A[i] > K)
		continue;
		if (i > l && A[i] == A[i - 1])
		continue;
		local.push(A[i]);
		unique_combination(i + 1, sum + A[i], K, local, A, pr);
		local.pop();
	}
}
document.write(`<pre>${JSON.stringify(arr)}</pre>`);
  </script>
	 | 
 
	
 
 Вот спасибо!Вот это высший пилотаж,раз два и готово.Супер!   
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
 
 |  
  |