Ostatnio miałem problem do rozwiązania w pracy, gdzie miałem dwie listy: listę główną i mniejszą listę, która zawiera podzbiór elementów na liście głównej potencjalnie w innej kolejności. Musiałem zmienić kolejność listy głównej w taki sposób, aby elementy w podzestawie pojawiały się w tej samej kolejności, bez zmiany kolejności elementów nie znajdujących się na liście i utrzymywania elementów w tej samej lokalizacji, gdy tylko jest to możliwe. Okej, to chyba brzmi myląco, więc podzielę to:
- Lista główna określa domyślną kolejność elementów.
- Lista podzbiorów określa względną kolejność niektórych elementów.
- W przypadku, gdy lista główna zawiera dwa elementy niesprawne zgodnie z listą podzbiorów, element znajdujący się wcześniej na liście głównej powinien zostać przeniesiony do najwcześniejszego indeksu, gdzie znajduje się we właściwej lokalizacji względem innych elementów na liście podzbiorów. (tj. natychmiast po późniejszym elemencie)
Twoim zadaniem jest wdrożenie tego algorytmu zmiany kolejności.
Przykładowe przypadki testowe
Master: [1, 2, 3]
Subset: []
Result: [1, 2, 3]
Master: [9001, 42, 69, 1337, 420]
Subset: [69]
Result: [9001, 42, 69, 1337, 420]
Master: [9001, 42, 69, 1337, 420, 99, 255]
Subset: [69, 9001, 1337]
Result: [42, 69, 9001, 1337, 420, 99, 255]
Master: [1, 2, 3, 4, 5]
Subset: [2, 5]
Result: [1, 2, 3, 4, 5]
Master: [apple, banana, carrot, duck, elephant]
Subset: [duck, apple]
Result: [banana, carrot, duck, apple, elephant]
Master: [Alice, Betty, Carol, Debbie, Elaine, Felicia, Georgia, Helen, Ilene, Julia]
Subset: [Betty, Felicia, Carol, Julia]
Result: [Alice, Betty, Debbie, Elaine, Felicia, Carol, Georgia, Helen, Ilene, Julia]
Master: [snake, lizard, frog, werewolf, vulture, dog, human]
Subset: [snake, werewolf, lizard, human, dog]
Result: [snake, frog, werewolf, lizard, vulture, human, dog]
Master: [Pete, Rob, Jeff, Stan, Chris, Doug, Reggie, Paul, Alex]
Subset: [Jeff, Stan, Pete, Paul]
Result: [Rob, Jeff, Stan, Pete, Chris, Doug, Reggie, Paul, Alex]
Master: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
Subset: [8, 1, 2, 12, 11, 10]
Result: [3, 4, 5, 6, 7, 8, 1, 2, 9, 12, 11, 10]
Master: [lol, rofl, lmao, roflmao, lqtm, smh, jk, wat]
Subset: [wat, lmao, rofl]
Result: [lol, roflmao, lqtm, smh, jk, wat, lmao, rofl]
Zasady
- Standardowe luki, yadda yadda, wygodne we / wy, bla bla.
- Mimo że w przykładach używane są liczby i ciągi, wystarczy tylko jeden typ elementu, niezależnie od tego, czy są to liczby całkowite, ciągi, czy cokolwiek innego z dobrze zdefiniowaną semantyką równości, w tym listy heterogeniczne, jeśli jest to wygodne w twoim języku.
- Możesz założyć, że zarówno lista główna, jak i lista podzbiorów nie zawierają duplikatów
- Możesz założyć, że wszystkie elementy znajdujące się na liście podzbiorów znajdują się na liście głównej
- Każda lista może być pusta
- Musisz co najmniej obsługiwać tablice o długości do 100 elementów.
- Zmiana kolejności może być realizowana w miejscu lub poprzez utworzenie nowej listy / tablicy.
Wesołego golfa!
8 1 3 4 5 6 7 2 9 12 11 10ważne jest rozwiązanie od drugiego do ostatniego?