整数のセットを取り、セットのすべての順列を出力する関数を記述し、各ステップ間でスワップを実行します
入力
整数のセット、たとえば(0、1、2)
出力
(set)(swap)(set)という形式の順列とスワップのリスト...
テストケース
Input:
(3, 1, 5)
Output:
(3, 1, 5)
(3, 1)
(1, 3, 5)
(3, 5)
(1, 5, 3)
(1, 3)
(3, 5, 1)
(3, 5)
(5, 3, 1)
(3, 1)
(5, 1, 3)
ルール
- 必要に応じて、数値セットをフォーマットできます。
- スワップは任意の順序で行うことができます
- 新しいものを得るために順列と交換を繰り返すことができます
- コードは実際にスワップを実行する必要はありません。出力は、最後の出力と現在の出力の間で行われたスワップを示す必要があります。
- コードは、2つ以上の要素を持つセットに対してのみ機能する必要があります
- 指定されたセットには繰り返し要素がありません(例(0、1、1、2)は無効です)
これはコードゴルフなので、最短のコードが勝ちます!
ランダム性を使用できますか?
—
Zgarb
あなたは偶然にすべての順列を達成するまで、ランダムなスワップをロードすることを意味しますか?はい、ただし、すべての順列が印刷されていることを確認する必要があります
—
Billyoyo
PPCGへようこそ!素敵な最初の挑戦。私は、使用セットのように、要素がインデックスと混同されませんので、例を編集することをお勧め
—
AdmBorkBork 2016
(3, 1, 4)またはそう-それを最初のスワップはので、私は非常に混乱していた初めて読んだ0,1の要素スワップ0,1だけでなく、指数を0,1、その後、次スワップはそのパターンに従っていませんでした。また、チャレンジを投稿したり、メインサイトに投稿する前にフィードバックを得たりできるサンドボックスも紹介します。
@TimmyD提案をありがとう、私は例を変更しました。投稿直後にサンドボックスへのリンクを見たので、これから先に投稿します!
—
Billyoyo
シュタインハウス・ジョンソン・トロッターアルゴリズムは、必要最小限の配列を生成します。
—
Neil