Autor Zpráva
midlan
Profil
Ahoj,

tápu jak vytvořit jednu funkci. Mám uspořádanou množinu {A, B, C, D} a já potřebuji funkci, která vrátí všechny možné podmnožiny sousedství (prvky spolu sousedí v původní množině) té původní množiny, tzn. pro tento případ:

{A, B}
{B, C}
{C, D}
{A, B, C}
{B, C, D}
{A, B, C, D}

Převedeno do PHP, vstupem je pole $vstup = array('A', 'D', 'C', 'D');, obdobně by měl vypadat výstup, tedy pole polí. Případně jednotlivé množiny je možné rovnou spojit do stringu pomlčkami (v programu to tak dále budu používat).

Věděl by někdo jak na to?
nightfish
Profil
<?php
$input = ['A', 'B', 'C', 'D'];
$subsetsOfNeighbors = [];
for ($length = 2; $length <= count($input); $length++) {
  $subsetsOfNeighbors = array_merge($subsetsOfNeighbors, getNeighborsOfLength($input, $length));
}
echo "<pre>";
var_dump($subsetsOfNeighbors);
echo "</pre>";

function getNeighborsOfLength($input, $length) {
  $result = [];
  for ($i = 0; $i <= count($input) - $length; $i++) {
    $result[] = implode('-', array_slice($input, $i, $length));
  }
  return $result;
}
midlan
Profil
nightfish:
Díky! to je přesně ono. Jen jsem s upravil dle svého vkusu a do jedné fce:

<?php
function getNeighboursSubsets($input) {
    
    $rtn = [];
    $ic = count($input);

    for ($i = 2; $i <= $ic; $i++) {

        $subset = [];
        for ($j = 0; $j <= $ic - $i; $j++) {
            $subset[] = implode('-', array_slice($input, $j, $i));
        }
        
        $rtn = array_merge($rtn, $subset);
    }
    
    return $rtn;
}

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: