質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

1866閲覧

配列から順列を作るためのプログラム

shalin

総合スコア11

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

1クリップ

投稿2017/04/24 06:12

###前提・実現したいこと
Swift3 Xcode8のPlaygroundにて、配列から全てのパターンの順列を取り出す
###発生している問題・エラーメッセージ
関数の引数としてInt型の可変長引数を渡スト、配列に格納されます。
そしてその後その配列から全てのパターンの順列を取り出したいと考え、いろいろ調べているんですが、良い情報が見当たりません。
###該当のソースコード

//Swift3.0 //: Playground - noun: a place where people can play import UIKit func algorithm(someInt:Int...) { }

###試したこと
いろいろ調べているものの、探し不足なのか見当たりません。参考になる記事などだけでもいいのでご教授願います。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

非常に効率の悪いものですが書いてみました。引数の整数は重複がないものと勝手に想定しています。

主な処理はpermutateで行っています。考え方は「restにある要素を順番にひとつづつpermの末尾へ移動しつつ、残ったrestの組み合わせを再帰呼び出しで作る」というものです。

普段swiftを使っておられるプログラマーの方から見れば相当不格好なものであると思います。

swift

1func algorithm(someInt:Int...) { 2 func permutate(perm:[Int], rest:[Int]) -> [[Int]] { 3 var result:[[Int]] = [] 4 if rest.isEmpty { 5 return [perm] 6 } 7 for i in 0..<rest.count { 8 var nextPerm = perm 9 nextPerm.append(rest[i]) 10 var nextRest = rest 11 nextRest.remove(at: i) 12 result += permutate(perm:nextPerm, rest:nextRest) 13 } 14 return result 15 } 16 17 let initialPerm:[Int] = [] 18 let allPerm = permutate(perm:initialPerm, rest:someInt) 19 20 // print result for debug 21 for i in 0..<allPerm.count { 22 print(i.description + ": " + allPerm[i].description) 23 } 24 // ... 25} 26 27algorithm(someInt: 1, 2, 3)

==>結果
0: [1, 2, 3]
1: [1, 3, 2]
2: [2, 1, 3]
3: [2, 3, 1]
4: [3, 1, 2]
5: [3, 2, 1]

投稿2017/04/24 09:50

KSwordOfHaste

総合スコア18394

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問