AtCoderにSwiftで挑戦しようとしました。
まだAtCoderのことよくわかっていないのですが、とりあえずSwiftのバージョンは未だに2.2みたいです。
Swiftは今バージョン5まで来たので、2.2なのは結構キツイです。
僕は今年からSwift勉強しはじめて、入り口はバージョン4なので、過去のバージョンアップで変更された部分はよく把握していないのですが、
ざっと見る限りバージョン2から3に上がったときの変更が結構エグかったのかな、という印象で、
メンテされてないSwiftコードは軒並みそのままだと動かなくなってるように見えます。
なので、Swift 2.2でやるとなると、その古い書き方を調べないといけなくて、しんどいです。
C++勉強しろや、ってことなんですかね。。。
詰まった部分
標準入力を受け取って、ブランクで値を分割するところですが、下記のコードだとコンパイルエラーになります。
let input_line: String = readLine()!
let split: [String] = input_line.components(separatedBy: " ") //ブランクで区切られている場合
これはSwift2.2にはcomponents(separatedBy:)ではなかったからです。
サンプルコード
練習問題を解いた例を載せます。
import Foundation
var input_lines = [String]()
let row = 3
for i in 0..<row {
input_lines.append(readLine()!)
}
let a = Int(input_lines[0])!
let split = input_lines[1].componentsSeparatedByString(" ") //components(separatedBy:)と実質同じ
let b = Int(split[0])!
let c = Int(split[1])!
let s = input_lines[2]
print((a + b + c), s)
splitでやる
charactersに対して、splitメソッドを使ってやる方法もあります。
AtCoder に登録したら解くべき精選過去問 10 問を Swift で解いてみた
こちらもSwift2.2では記法が若干違うので、辛さ的にはあまり変わりませんね。
関連
Swift3.0以降はこちらが参考になるかと。
paizaの問題をSwiftで挑戦するときの標準入出力
おまけ
Twitterやってます。エンジニアの知り合いが全然いないので、積極的につながりたいです!
よろしければフォローお願いします。