शेल्फ स्टैकिंग के लिए छद्म कोड

वोट
2

कि जरूरत पंक्तियों में प्रदर्शित करने के लिए मान लीजिए कि मैं कुछ क्रमानुसार गिने आइटम है कि विस्तृत 1-एन इकाइयां हैं है। प्रत्येक पंक्ति मीटर इकाइयों चौड़ा है। मैं कुछ छद्म कोड कि उत्पादन पंक्तियाँ, मेरे लिए तो यह है कि एम-चौड़ाई सीमा रखा जाता है की जरूरत है। यह एक नेप्सेक समस्या नहीं है के रूप में आइटम क्रम संख्या के क्रम में ही रहना चाहिए - पंक्तियों के अंत में खाली स्थान ठीक कर रहे हैं।

मैं इस पर मेरे पूंछ का पीछा करते हुए किया गया है, आंशिक रूप से, क्योंकि मैं यह दोनों PHP और jQuery / जावास्क्रिप्ट, इसलिए छद्म कोड के लिए अनुरोध में की जरूरत है ....

03/08/2009 को 16:43
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


4 जवाब

वोट
3

while (!items.isEmpty()) {
  rowRemain = m;
  rowContents = [];
  while (!items.isEmpty() && rowRemain > items[0].width) {
    i = items.shift();
    rowRemain -= i.width
    rowContents.push(i);
  }
  rows.push(rowContents);
}

समय चल रहा है Θ है (मदों की संख्या)

03/08/2009 को 16:47
का स्रोत उपयोगकर्ता

वोट
0

मापांक अपने दोस्त है। मैं कुछ ऐसा करना होगा:

$items = array(/* Your list of stuff */);
$count = 0;
$maxUnitsPerRow = 4; // Your "m" above

while ($item = $items[$count]) {
 if ($count % $maxUnitsPerRow == 0) {
    $row = new row();
 }
$row->addItemToRow($item);
$count++;
}
03/08/2009 को 16:47
का स्रोत उपयोगकर्ता

वोट
0

क्या इसके लायक है के लिए, मुझे लगता है कि मैं क्या मैं, के लिए देख रहा था PHP के लिए है - लेकिन यकीन नहीं अगर वहाँ एक आसान तरीका है ...

<?php
// working with just a simple array of widths...
$items     = array(1,1,1,2,1,1,2,1);
$row_width = 0;
$max_width = 2;

echo "Begin\n"; // begin first row
foreach($items as $item=>$item_width) {
  // can we add item_width to row without going over?
  $row_width += $item_width;
  if($row_width < $max_width) {
    echo "$item_width ";
  } else if($row_width == $max_width) {
    echo "$item_width";
    echo "\nEnd\nBegin\n"; // end last row, begin new row
    $row_width = 0;
  } else if($row_width == 2* $max_width) {
    echo "\nEnd\nBegin\n"; // end last row, begin new row
    echo "$item_width";
    echo "\nEnd\n"; // end new row
    $row_width = 0;
    if($item < count($items)) echo "Begin\n"; // new row
  } else if($row_width > $max_width) {
    echo "\nEnd\nBegin\n"; // end last row, begin new row
    echo "$item_width";
    $row_width = $item_width;
  }
}
echo "\nEnd\n"; // end last row

?>
03/08/2009 को 17:06
का स्रोत उपयोगकर्ता

वोट
0

यहाँ एक वैकल्पिक php कोड है ...

function arrayMaxWidthString($items, $maxWidth) {
    $out = array();
    if (empty($items)) {
        return $out;
    }

    $row = $maxWidth;
    $i = 0;

    $item = array_shift($items);
    $row -= strlen($item);
    $out[0] = $item;

    foreach ($items as $item) {
        $l = strlen($item);
        $tmp = ($l + 1);
        if ($row >= $tmp) {
            $row -= $tmp;
            $out[$i] = (($row !== $maxWidth) ? $out[$i] . ' ' : '') . $item;
        } elseif ($row === $maxWidth) {
            $out[$i] = $item;
            ++$i;
        } else {
            ++$i;
            $row = $maxWidth - $l;
            $out[$i] = $item;
        }
    }
    return $out;
}
03/08/2009 को 17:46
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more