Tworzę grę, w której gracze będą musieli posortować obiekty na ekranie w odpowiednie lokalizacje docelowe. Szukam sposobu na przetasowanie obiektów, aby żaden obiekt nie zaczął się we właściwym miejscu. Więc nie wprowadzamy się w szalony świat podwójnych negatywów, zamierzam nazwać lokalizacje "poprawnej odpowiedzi", "unikać" lokalizacji, i "nieprawidłowej odpowiedzi" lokalizacje "prawidłowe" lokalizacje dla tego rodzaju.Jak losowo odwzorować elementy jednej tablicy na te z innej tablicy, gdy pewne obiekty muszą unikać łączenia w pary?
Macierze może wyglądać następująco:
var sort_items = [
{"avoid": ["target1", "target2"]},
{"avoid": ["target1", "target2"]},
{"avoid": ["target3"]},
{"avoid": ["target4", "target5"]},
{"avoid": ["target4", "target5"]},
];
var sort_locations = [
{"id": "target1"},
{"id": "target2"},
{"id": "target3"},
{"id": "target4"},
{"id": "target5"},
];
Tak więc, na przykład, pierwszy i drugi obiekty sort_items mogą być umieszczone na target3
, target4
lub , lecz nie target1
lub target2
.
Próbowałem już różnych metod, ale wszystkie mają problem z tym, że do końca sortowania jedyne pozostałe lokalizacje są często nieważne dla pozostałych elementów sort_item. Na przykład:
sort_items[0] placed on target3,
sort_items[1] placed on target5,
sort_items[2] placed on target2,
sort_items[3] placed on target1,
Error: sort_items[4] cannot be placed on target4
Nawet w tym przykładzie, zbieranie inny losowo i zamiana z wydaje się złym pomysłem, ponieważ połowa z pozostałych również spowodować nieprawidłową spotkanie na wymianę.
Czy istnieje dobra metoda, aby to zrobić?
Interesujący problem techniczny, ale o ile faktyczna rozgrywka idzie to tak naprawdę znaczenia, czy niektóre obiekty rozpocząć w prawidłowej pozycji? Z pewnością prostsze byłoby zwykłe tasowanie i pozostawienie go w tym miejscu ... Jeśli chodzi o algorytm, którego szukasz, czy należy założyć, że dane wejściowe są prawidłowe? (Tzn. Że "sort_items" nie określa niemożliwej kombinacji?) – nnnnnn
Interesujące. W prawdziwym przypadku, jak duże są twoje listy? – Arnauld
Czy unikasz celów zawsze konsekwentnych ..? – Redu