トップページ > プログラム > 2016年10月28日 > MsjgJgue

書き込み順位&時間帯一覧

11 位/182 ID中時間01234567891011121314151617181920212223Total
書き込み数0000000200000000000000002



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
詰めswift [無断転載禁止]©2ch.net

書き込みレス一覧

詰めswift [無断転載禁止]©2ch.net
31 :デフォルトの名無しさん[]:2016/10/28(金) 07:07:02.16 ID:MsjgJgue
>>30
enum pole:String{
case a,b,c
static func restOf(_ a1:pole, _ a2:pole)->pole {
var allValue:Set<pole> = [.a,.b,.c]
allValue.remove(a1)
allValue.remove(a2)
return allValue.first!
}
}

func hanoi(num:Int, from:pole, to:pole)->[(pole,pole)]{
var operation:[(pole,pole)]=[]
if num == 1 {
operation+=[(from,to)]
}
else {
operation += hanoi(num:num-1, from:from, to:.restOf(from,to))
operation += hanoi(num:1, from:from, to:to)
operation += hanoi(num:num-1, from:.restOf(from,to), to:to)
}
return operation
}

let moveList = hanoi(num:3, from:.a, to:.b)

print(moveList.count)
print(moveList)

String型enumは値を指定しないとenum名が値になるので省略化
workWithはenum自身に第3のポールを判断させればいいので
と思ったが帰って長くなってしまった
詰めswift [無断転載禁止]©2ch.net
32 :デフォルトの名無しさん[]:2016/10/28(金) 07:09:17.73 ID:MsjgJgue
今回気づいたけどenumの全要素でイテレートするとか、全要素のSetやArrayを作るとか簡単にはできないんだね
StackOverflowで熱く議論されていた
地味に不便


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。