Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- program Project1array;
- {$APPTYPE CONSOLE}
- uses
- System.SysUtils, Generics.Collections;
- //
- // Generate a list of all sub-lists that sum to the target figure.
- //
- type
- TintArr = TArray< integer >;
- TAintArr = TArray< TArray< integer > >;
- // -- -- -- -- --
- function ArrPrepend( x : integer; A : TintArr): TintArr;
- begin
- insert(x, A, 0);
- ArrPrepend := A;
- end;
- function ListAppend( A : TintArr; L : TAintArr): TAintArr;
- begin
- insert(A, L, high(L)+1);
- ListAppend := L;
- end;
- // -- -- -- -- --
- function target_sum(const a : TintArr; const k,x : integer) : TAintArr;
- begin
- if k > high(a) then begin
- //result := TAintArr.create(); // []
- exit(0);
- end;
- if x = a[k] then begin
- var single := TintArr.Create(a[k]); // [ a[k] ]
- result := TAintArr.create(single); // [ [a[k]] ]
- exit;
- end
- else
- begin
- var s := target_sum(a, k + 1, x ); // not using a[k]
- var t := target_sum(a, k + 1, x - a[k]); // using a[k]
- for var i := 0 to high(t) do // high( [] ) = -1
- s := ListAppend( ArrPrepend(a[k],t[i]) ,s);
- result := s;
- end;
- end;
- // -- -- -- -- --
- procedure print_list(const list : TintArr);
- begin
- for var i in list do write(i, ', '); writeln;
- end;
- // -- -- -- -- --
- var
- a : TintArr;
- s : TAintArr;
- const
- target = 0;
- begin
- ReportMemoryLeaksOnShutdown := true;
- //a := TintArr.Create(1,2,-1,-2);
- a := TintArr.Create(1, 4, 5, 2, 7, 8, -3, -5, -6, 9, 3, -7, -1, 5, 6);
- s := target_sum(a,0,target);
- write('Target = ', target, ' from : '); print_list(a); writeln;
- if high(s) >0 then for var list in s do print_list(list)
- else writeln('x');
- writeln;
- writeln('# Solutions = ', high(s)+1);
- writeln;
- readln;
- end.
- (* Javascript
- function target_sum(a, k, x) {
- if (k == a.length) return [];
- if (a[k] == x) {
- return [ [a[k]] ];
- } else {
- var s = target_sum(a, k + 1, x); // not using a[k]
- var t = target_sum(a, k + 1, x - a[k]); // using a[k]
- for (var i = 0; i < t.length; ++i) {
- t[i].unshift(a[k]); // a[k] is part of the solution
- s.push(t[i]); // merge t[] into s[]
- }
- return s;
- }
- }
- var s = target_sum([1, 4, 5, 2, 7, 8, -3, -5, -6, 9, 3, -7, -1, 5, 6], 0, 0);
- for (var i = 0; i < s.length; ++i)
- console.log(s[i].join(","));
- *)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement