Задача вроде не сложная но увы :
Надо перемешать ряд цифр или слов в произвольном порядке
чтобы ни одно не повторялось и не потерялось.
Зачем:
Есть допустим 20 блоков кода которые должны быть выполнены в произвольной последовательности и причем все (или определенное число) не повторяясь.
Функцию такую не нашел.
А goto(rndfrom(1,2,3,......,20) или gosub(rndfrom(a,b,c,.....k) дает только одно значение. И если повторять 20 раз, то будут не нужные повторы.
Может есть простое решение?
Пока придумалось решение через опу - через запись в 2 файла.
И пробовать прицепить фильтр....
Попробовал делать это через запись в файл так как очередной блок из 20 запускается примерно раз в час. Но пока не решилось как.
В первый записывается вначале все 20 цифр.
STRWRITELN("volni.txt","1,2,3,4,5,...20",0)
Во второй записывается одна циферка увы:
STRWRITELN("volni1.txt",RNDFROM(1,2,3,4,5,...20),0)
И после фильтром была идея исключать каждую последнюю циферку из основной последовательности "volni.txt"
STRFILTER("string", "set", 0)
Но как это связать не понял так как в справке написано - фильтр возвращает цифру или значение... куда возращает??? как это виртуальное возвращает хз куда увязать с продолжением исключения основной последовательности....
И уже уменьшенный на одну записанную циферку список вставлять в
STRWRITELN("volni.txt","......
Далее опять полученную следующую рандомную циферку вставить в
STRWRITELN("volni1.txt",RNDFROM(
И опять фильтр
и тд... по кругу пока все 20 цифр не кончатся... и будет щастье....
в итоге должен появиться файлик volni1.txt со столбиком (и его можно перевести в строку) из 20 циферок в уже рандомном порядке которые можно считать из него командой чтения нужной строки из файла... и задача решена.... по идее...
но вот пока не понял и не прочуствовал термин "возвращает"
и как пользоваться соответственно фильтром если он конечно поможет
Через IF и переменную?
другого варианта пока не вижу как просто взять перемешать цифры....
может кто сталкивался с похожим... или натолкнет на мыслю...
заранее спасибо....
Ну можно конечно еще написать и вставить 400 строк (20х20=400) с рандомным неповторяющимся расположением цифр )))) и уже 400 вариантов выбирать через GOSUB(RNDFROM(... но это совсем по американски будет.....
хотя сам код уехал так за 10.000 строк и еще +400 с небольшим не слишком удлиннит....