Что нового

[Массивы] Перемешивание элементов массива, с условием

WSWR

AutoIT Гуру
Сообщения
941
Репутация
363
Версия AutoIt: 3.

Описание:
Есть двумерный массив с двумя колонками примерно такого вида:

строка1
строка2
строка3
строка4
строка5 1
строка6 1
строка7
строка8
строка9
строка10
строка11
строка12
строка13 1
строка14 1
строка15
строка16
строка17
строка18
строка19
строка20
В одной колонке - строки, в другой или пусто, или число, например, 1
Требуется перемешать элементы массива случайным образом, но чтобы строки, напротив которых во второй колонке есть число, также шли друг за другом, т.е. примерно так:
строка2
строка20
строка12
строка4
строка18
строка15
строка17
строка13 1
строка14 1
строка7
строка11
строка16
строка5 1
строка6 1
строка8
строка3
строка11
строка1
строка9
строка10

Строки, положение которых нужно сохранить, идут строго по 2, и только им соответствуют числа во второй колонке
Массив может состоять вообще только из таких строк, и тогда после перемешивания должен выглядеть так:
строка19 1
строка20 1

строка3 1
строка4 1

строка1 1
строка2 1

строка9 1
строка10 1

строка17 1
строка18 1

строка5 1
строка6 1

строка13 1
строка14 1

строка11 1
строка12 1

строка15 1
строка16 1

строка7 1
строка8 1

Также для упрощения задачи допускается, что числа во второй колонке могут различаться:
строка1 1
строка2 2
строка3 1
строка4 2
строка5 1
строка6 2
строка7 1
строка8 2
строка9 1
строка10 2
строка11 1
строка12 2
строка13 1
строка14 2
строка15 1
строка16 2
строка17 1
строка18 2
строка19 1
строка20 2

Примечания:
Лучше без использования UDF
 

СН3СН2ОН

Знающий
Сообщения
78
Репутация
12
Данные 2 колонка нумерация Признак пары
данные 1 4 1 1
данные 2 4 2 1
данные 3 0 3 0
данные 4 3 4 0
данные 5 1 5 0
данные 6 2 6 0
данные 7 1 7 0
данные 8 2 8 0
данные 9 0 9 0
данные 10 5 10 2
данные 11 5 11 2
данные 12 5 12 0
данные 13 3 13 0
данные 14 5 14 0
данные 15 5 15 0
данные 16 4 16 0
данные 17 0 17 0
данные 18 0 18 0
данные 19 3 19 0
данные 20 5 20 0
данные 21 3 21 3
данные 22 3 22 3
данные 23 3 23 0
данные 24 2 24 0
данные 25 5 25 0
данные 26 3 26 0

Сам писать не буду. неужели это сложно?
Я бы сделал так. Добавили 2 колонки справа
3 колонка - нумерация тупо с 1.
4 колонка - если следующая за ней с тойже цифрой то ставим цифру по счеткику этой паре.
перемешали хорошенько массив.
Бежим по 4 колонке, встретили цифру, ищем такую же(в 4 колонке), поменяли местами следующей ща ней найденой.
Извините что код не приложил.
Может эту идею ктото в код быстро перекинет
 
Автор
W

WSWR

AutoIT Гуру
Сообщения
941
Репутация
363
СН3СН2ОН
Ну, хотелось бы все-таки сразу роботоспособный код.
Поэтому теме ап.
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
WSWR,

Вы яснее описывайте задачу.
В результирующем файле пара строк с общим признаком может быть переставлена местами?
строка17
строка14 1
строка13 1
строка7

Что делать если одинаковые признаки идут подряд?
строка5 1
строка6 1
строка7 1
строка8 1

А ещё хуже если встретилось вот такое
строка5
строка6 1
строка7 1
строка8 1
строка9

Пока вы чётко не опишите задачу, вряд ли кто-то захочет за неё браться.

А вот это я вообще не понял...
Также для упрощения задачи допускается, что числа во второй колонке могут различаться:
 
Автор
W

WSWR

AutoIT Гуру
Сообщения
941
Репутация
363
C2H5OH
Такое
Код:
строка5
строка6 1
строка7 1
строка8 1 
строка9
не встретится, число таких строк в первоначальном массиве всегда четное и они идут подряд.

Так не должно быть
Код:
строка17 
строка14 1
строка13 1
строка7
только
Код:
строка17 
строка13 1
строка14 1
строка7

И как раз тут может помочь
Также для упрощения задачи допускается, что числа во второй колонке могут различаться:
Это вот так
Код:
строка4 1
строка5 2
строка6  
строка7 1
строка8 2
а после перемешивания, например, так:
Код:
строка7 1
строка8 2
строка4 1
строка5 2
строка6



Пока вы чётко не опишите задачу, вряд ли кто-то захочет за неё браться.
Да ладно, довольно подробно, да и никто доп объяснений не требовал)

OffTopic:
Если никто не напишет, сделаю сам, естественно)
Возможно, у кого-то в наличии идея сделать это проще и короче.
Просто, когда пишешь прожку 10000+ строк, для экономии времени хочется иметь побольше готовых компонентов для выполнения не самых важных функций. Почему бы не попросить помощи сообщества?
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
Да ладно, довольно подробно, да и никто доп объяснений не требовал)

Если ничего не спрашивают, то либо всё понятно, либо ничего не понятно.
Мне кажется что тут второй вариант, потому что никто ничего и не предлагает.
Для примера возьмите
Код:
строка4
строка5 1
строка6 1
строка7 2
строка8 2 
строка9

Сто пудов все обработают такой набор строк совсем не так как Вы ожидаете.
 
Верх