ソース リストと宛先リストの 2 つのリストがあります。両方のリストはすべて同じ項目で構成されていますが、リストの順序が異なります。2 つのリストがある場合、リスト内の 1 つの項目を別の項目と交換し、最終的にソース リストを宛先リストと同じ順序にする一連のスワップ操作をソース リストで見つける必要があります。
この機能はデフォルトでは MPD にないため、MPD プレイリストをアルバムごとにシャッフルするスクリプトを作成しています。スクリプトは現在、現在のプレイリスト (ソース リスト) を取得し、リストのカスタム シャッフルを実行して、最終的に曲の新しい順序 (宛先リスト) を作成します。次に、スクリプトはプレイリストからすべてのアイテムを削除し、シャッフルされた新しいプレイリストの順序でそれらをプレイリストに挿入します。すべての曲を削除および追加する操作は時間がかかります。MPD ライブラリは、プレイリスト内の 2 つの曲の代わりのスワップをはるかに迅速に提供しますが、ソース リストを新しいシャッフル リストに変換する正しい一連のスワップ操作を見つける方法がわかりません。
これは Haskell で書かれていますが、どの言語/疑似コードでも問題ありません。