Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- program Project1;
- {$APPTYPE CONSOLE}
- uses
- System.SysUtils, Generics.Collections;
- //
- // Generate a list of all sub-lists that sum to the target figure.
- //
- // Nice reference : https://stackoverflow.com/questions/9315275/dynamic-tlist-of-tlist
- function target_sum(const a : TList<integer>; const k,x : integer) : TObjectlist< TList<integer> >;
- begin
- if k = a.Count then begin
- result := TObjectlist< TList<integer> >.create; // []
- exit;
- end;
- if x = a[k] then begin
- var single := TList<integer>.Create; // []
- single.add( a[k] ); // [ a[k] ]
- result := TObjectlist< TList<integer> >.create;
- result.add(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]
- if t.count > 0 then
- for var list in t do begin
- list.Insert(0, a[k]);
- s.add( list );
- end
- else t.free;
- result := s;
- end;
- end;
- procedure print_list(const list : TList<integer>);
- begin
- for var i in list do write(i, ', '); writeln;
- end;
- var
- a : TList<integer>;
- s : TObjectlist< TList<integer> >;
- const
- target = 0;
- begin
- ReportMemoryLeaksOnShutdown := true; // leaking objects
- a := TList<integer>.Create;
- a.AddRange([1, 4, 5, 2, 7, 8, -3, -5, -6, 9, 3, -7, -1, 5, 6]); // result = 436
- //a.addrange([1,2,-1,-2]); // result = 3
- s := target_sum(a,0,target);
- write('Target = ', target, ' from : '); print_list(a); writeln;
- writeln('# Solutions = ', s.count); writeln;
- if s.Count > 0 then for var list in s do print_list(list)
- else writeln('x');
- s.free;
- a.free;
- 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