Что нового

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

WSWR

AutoIT Гуру
Сообщения
941
Репутация
356
Версия 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
Репутация
356
СН3СН2ОН
Ну, хотелось бы все-таки сразу роботоспособный код.
Поэтому теме ап.
 

C2H5OH

AutoIT Гуру
Сообщения
1 473
Репутация
332
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
Репутация
356
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
Репутация
332
Да ладно, довольно подробно, да и никто доп объяснений не требовал)
Если ничего не спрашивают, то либо всё понятно, либо ничего не понятно.
Мне кажется что тут второй вариант, потому что никто ничего и не предлагает.
Для примера возьмите
Код:
строка4
строка5 1
строка6 1
строка7 2
строка8 2 
строка9
Сто пудов все обработают такой набор строк совсем не так как Вы ожидаете.
 
Автор
W

WSWR

AutoIT Гуру
Сообщения
941
Репутация
356
В итоге написал сам)
 
Верх