@HappyCougar

Как правильно сортировать блоки?

Сломал голову думая над одним достаточно простым вопросом.

Есть область шириной 4 условные единицы. Внутри у нее строки длинной и шириной 4 условные единицы. В область, генерятся блоки разных размеров: 4x4 2x4 1x1. Вся сложность в том, что-бы вовремя закрыть строку, и перейти на новую. В строку влезает один 4x4, два 2x4, и четыре шутки 1x1, есть еще вариант со строкой с одним 2x4 и двумя 1x1.

Написал такой код, но работает не очень.

UPD: Добавил нормальный пример

$b_array = array(
		"1" => array("WIDTH" => "2"),
		"2" => array("WIDTH" => "2"),
		"3" => array("WIDTH" => "2"),
		"4" => array("WIDTH" => "2"),
		"5" => array("WIDTH" => "2"),
		"6" => array("WIDTH" => "2"),
	);
	
	function generate_metro($array) {
		static $metro_iw;
		$metro_iw = 0;
		foreach($array as $item) {
			$block_width = $item["WIDTH"];
			if((intval($metro_iw/4) < intval(($metro_iw+$block_width)/4)) && (intval($metro_iw/4) !== 0)) {
				$out .= "</div><div class='as_metro_line'> |--1--| ";
				$metro_iw += $block_width;
			}
			else {
				$out .= "|--1--|";
				$metro_iw += $block_width;
			}
		}
		return $header."<div class='as_metro_line'>".$out."</div>";
	}	
	
	echo generate_metro($b_array);


Вот код примера, вместо сортировки
1-1
1-1
1-1

Он сортирует

1-1-1
1-1
1
  • Вопрос задан
  • 165 просмотров
Пригласить эксперта
Ответы на вопрос 1
@heartdevil
плыву как воздушный шарик
А можете рассказать для чего вы так сортируете?

Я что-то вообще не уловил что у вас дано и как это используется.

Вы пишите

В строку влезает один 4x4, два 2x4,


В вашем алгоритме вы в массиве для элементов указываете ширину 2. Верно ли я понимаю, что это у вас блоки 2x4?

Если так, то почему у вас в строку влезло 3 таких элемента, когда должно быть два по условию?

4 блока может влезть только если блоки 1x1 же.

Честно говоря, вообще не уловил о каких условных единицах области вы говорите и как там строки располагаются. Это типа квадрат 4 на 4 и там каждая строка это тоже квадрат 4 на 4?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы