配列の要素を2個ずつ取り出して総当たり戦を行うプログラミングを作りたいです。
要素を自分で比較し勝った方には+1点、負けた方には−1点を加え最終的に要素を点数順に並び替えるソートを作りたいです。
配列を点数順に並び替えるのはソート機能を使えば出来そうなのですが、そもそも総当たりでそれぞれの要素に点数を加えていく方法が分かりません。
使える機能などがあったら教えてください。
よろしくお願いします!
色々なやり方があると思いますが、まずはあまり難しく考えずに単純にfor inとかforEachを使ってかけるところまで書いてみると良いと思いますよ。
参考
https://qiita.com/ideaagri/items/23292ca0b244c70e3558
例えばfor inの中にfor inを入れて入れ子にしてみるとか、色々考えてみましょう。
この質問文は編集・追記できますので、頑張ってかけるところまでかいてみて追記してください。正直、このヒントでコードが1行もかけないとなると、ちょっと無理かなとは思います。あまり効率とか難しいことを考えずに、まずは目的を果たすところから、とにかく手を動かして色々書いてみてください。SwiftはPlaygroundsがありますから、そこで色々試してみるといいと思います。
いきなり答えを書いちゃうと丸投げになるので、ヒントを書きます。
・まず、実際に要素の配列を用意しましょう。これがないと何も始まりません。何か具体的なプログラムを作ってるなら、そこで使うオブジェクトか構造体になるのでしょうけど、特にない (または練習のために単純なものでやりたい) なら乱数の配列を作ればいいと思います。
・次に、各要素の点数を入れる場所が必要ですね。クラスや構造体の中に持たせることもできますし、独立した配列にすることもできます。
・実際に点数を計算しましょう。 上の TakashiAbe さんのコメントが参考になると思います。
・最後にソートします。各要素の点数に応じたソートになるので、ちょっとややこしいかも。
それでは、がんばってください。
御二方とも優しいアドバイスありがとうございます。
ネットなどで調べながら自分のかけるところまで書いてみました。
そこで前回よりも具体的な質問が生まれたので改めて投稿させて頂きます。
配列の要素から2つを取り出して比較した際に、その結果を点数に反映させるのにはswitch文を使おうと思っています。
ですがそもそも比較した際の結果を外部から入力する方法が分かりません。
1を押したら左の勝ち、2を押したら引き分け、3を押したら右の勝ちという風にしてこの結果を入力してswitch文に反映させたいです。
アドバイス等ありましたらよろしくお願いします。
var member = ["A","B","C","D","E"]
var score = [0,0,0,0,0]
for l in 0...3 {
let m = l+1
for n in m...4 {
print(member[l] + "vs" + member[n])
var a = input:Int //1左を選択、2どちらでもない、3右を選択
switch a {
case 1:
score[l] += 1
score[n] -= 1
case 3:
score[l] -= 1
score[n] += 1
}
}
}
入力は、そのプログラムをどうやって動かすかによりますね。
ターミナルで動かすなら readLine() が使えますけど…。
あなたの回答
tips
プレビュー