@com poprosilbym w kolejnosci i w zbiorze wynikow dokladnie takim, jaki podalem

@Crozin jest tam wiele ciekawych rzeczy, ale wiekszosc w c,z ktorym juz dawno nie mialem do czynienia, a przez co nie rozumiem idei.
Dorwalem jeden js stamtad, ktory chyba robi to co chce, ale kurka po przerobieniu tego na php juz nie robi tego co chce

js:
Kod
function k_combinations(set, k) {
var i, j, combs, head, tailcombs;
if (k > set.length || k <= 0) {
return [];
}
if (k == set.length) {
return [set];
}
if (k == 1) {
combs = [];
for (i = 0; i < set.length; i++) {
combs.push([set[i]]);
}
return combs;
}
// Assert {1 < k < set.length}
combs = [];
for (i = 0; i < set.length - k + 1; i++) {
head = set.slice(i, i+1);
tailcombs = k_combinations(set.slice(i + 1), k - 1);
for (j = 0; j < tailcombs.length; j++) {
combs.push(head.concat(tailcombs[j]));
}
}
return combs;
}
Ferelna przerobka na php
function k_combinations($set, $k) {
//$ i, j, combs, head, tailcombs;
if ($k > count($set) || $k <= 0
) { }
return $set;//[set];
}
if ($k == 1) {
for ($i = 0; $i < count($set); $i++) { $combs[]=$set[$i];
}
return $combs;
}
// Assert {1 < k < set.length}
for ($i = 0; $i < count($set) - $k + 1; $i++) { $tailcombs = k_combinations
(array_slice($set, $i+1
), $k - 1
); for ($j = 0; $j < count($tailcombs); $j++) { $tmp = $head;
$tmp[]=$tailcombs[$j];
$combs[]=$tmp;
}
}
return $combs;
}
$tt = k_combinations($t,3);
Albo w c, ten kod, robi to co chce:
Kod
public static IEnumerable<IEnumerable<T>> Combinations<T>(this IEnumerable<T> elements, int k)
{
return k == 0 ? new[] { new T[0] } :
elements.SelectMany((e, i) =>
elements.Skip(i + 1).Combinations(k - 1).Select(c => (new[] {e}).Concat(c)));
}
var result = Combinations(new[] { 1, 2, 3, 4, 5 }, 3);
Tylko z C juz nie mialem bardzo dawno do czynienia i nie potrafie przetlumaczyc :/
edit:
Dobra, mam. Post crozina nakierowal mnie na wlasciwą szukajkę