using
System;
using
System.Collections.Generic;
using
System.Linq;
class
GFG
{
class
Pair
{
public
int
index1;
public
int
index2;
public
Pair(
int
x,
int
y)
{
index1 = x;
index2 = y;
}
}
public
static
void
GetQuadruplets(List<
int
> nums,
int
target)
{
Dictionary<
int
, List<Pair>> map =
new
Dictionary<
int
, List<Pair>>();
for
(
int
i = 0; i < nums.Count - 1; i++)
{
for
(
int
j = i + 1; j < nums.Count; j++)
{
int
sum = nums[i] + nums[j];
if
(!map.ContainsKey(sum))
{
List<Pair> temp =
new
List<Pair>();
Pair p =
new
Pair(i, j);
temp.Add(p);
map.Add(sum, temp);
}
else
{
List<Pair> temp = map[sum];
Pair p =
new
Pair(i, j);
temp.Add(p);
map[sum] = temp;
}
}
}
HashSet<Tuple<
int
,
int
,
int
,
int
>> ans =
new
HashSet<Tuple<
int
,
int
,
int
,
int
>>();
for
(
int
i = 0; i < nums.Count - 1; i++)
{
for
(
int
j = i + 1; j < nums.Count; j++)
{
int
lookUp = target - (nums[i] + nums[j]);
if
(map.ContainsKey(lookUp))
{
List<Pair> temp = map[lookUp];
foreach
(Pair pair
in
temp)
{
if
(pair.index1 != i && pair.index1 != j && pair.index2 != i && pair.index2 != j)
{
List<
int
> l1 =
new
List<
int
> {nums[pair.index1], nums[pair.index2], nums[i], nums[j]};
l1.Sort();
Tuple<
int
,
int
,
int
,
int
> values = Tuple.Create(l1[0], l1[1], l1[2], l1[3]);
ans.Add(values);
}
}
}
}
}
foreach
(
var
arr
in
ans) {
Console.WriteLine(String.Join(
", "
, arr));
}
}
public
static
void
Main(
string
[] args)
{
List<
int
> arr =
new
List<
int
>();
arr.Add(1);
arr.Add(0);
arr.Add(-1);
arr.Add(0);
arr.Add(-2);
arr.Add(2);
int
K = 0;
GetQuadruplets(arr, K);
}
}