Последний раз редактировалось wrest 20.01.2023, 13:58, всего редактировалось 5 раз(а).
а вот forperm([1,1,0,0],dex,print(dex)) Vecsmall([1, 1, 0, 0]) и всё Надо доки читать , ибо Цитата: and if a is a small vector then p goes through the (multi)permutations lexicographically larger than or equal to a. То есть если вы подаёте на вход forperm() не число, а вектор, то генерируются не все перестановки, а только стартовая и бОльшие (в лексикографическом смысле) чем стартовая (стартовая -- поданный на вход вектор). То есть то же самое будет например со стартовой перестановкой [4,3,2,1]? forperm([4,3,2,1],i,print(i)) Vecsmall([4, 3, 2, 1]) ?Чтобы получить ВСЕ перестановки [1,1,0,0] (которых будет 4!), можно попробовать так: ? v=[1,1,0,0];forperm(#v,i,print(vecextract(v,i)))Но тогда туда попадут и совпадающие. Чтобы получить только уникальные перестановки, можно попробовать так: ? v=[1,1,0,0];L=List();forperm(#v,i,listput(~L,vecextract(v,i)));listsort(~L,1);v1=Vec(L);print(v1) [[0, 0, 1, 1], [0, 1, 0, 1], [0, 1, 1, 0], [1, 0, 0, 1], [1, 0, 1, 0], [1, 1, 0, 0]] ?Тут идея такая, что сначала набирается список из всех перестановок, а потом удаляются повторяющиеся. Работает и со стульями: ? v=["table","table","chair","chair"];L=List();forperm(#v,i,listput(~L,vecextract(v,i)));listsort(~L,1);v1=Vec(L);print( v1) [["chair", "chair", "table", "table"], ["chair", "table", "chair", "table"], ["chair", "table", "table", "chair"], ["table", "chair", "chair", "table"], ["table", "chair", "table", "chair"], ["table", "table", "chair", "chair"]] ?
|