概要
プログラミングコンテストとSwift5にまつわる状況メモ(2020年2月時点)
AtCoderのバージョンアップテストで対応された模様(2020年3月現在)
AtCoder(現行)
プロコンと言えばAtCoderな訳ですが、現在採用されているバージョンは 2.2
です。リリース日は2016年3月21日であり、ほぼ4年前です。
言語別AC数で言うと、Pineさんという方が586ACしていますが、2位以下のAC数は100未満です。
→Language Owner
最新版は 5.1.4
で、リリース日は2020年1月31日です。
AtCoder(バージョンアップテスト - 2020年2月22日)
AtCoderは現在、言語のバージョンアップテスト中です(下記のリンクから飛べます)。
Language Test 202001
こちらのバージョンは 5.1.3
です。リリース日は2019年12月13日です。
ただ、提出結果を見れば分かりますが、現在のところすべて CE(CompileError)
になっています。Pineさんの提出もすべてCEなので、現在ACをするのは不可能と見るのが妥当です。 →その後、AC出来るようになりました(下記参照)。
AtCoder(バージョンアップテスト - 2020年3月1日)
2020年3月1日に再度確認したところ、Swift5.1.3で AC
しているケースが出てきています。私が2月22日に提出して CE
になっていたものも AC
になっているので、リジャッジされたものと思われます。
Paiza
プロコンと言えばPaizaな訳ですが(?)、現在採用されているバージョンは 5.0.1
で、リリース日は2019年4月18日です。
→こちらで確認できます
はじめてのあっとこーだー
テスト問題 はじめてのあっとこーだー を、Paiza(Swift 5.0.1)で通るように組んでみました。
let a = Int(readLine()!)!
let bc = readLine()!.split(separator: " ")
let b = Int(bc[0])!
let c = Int(bc[1])!
let d = a + b + c
let s = readLine()!
print (d.description + " " + s)
テストバージョンのサイトでは通らないので、通常の方(Swift2.2)にブチこんでみます。
コンパイルメッセージ
./Main.swift:2:20: error: value of type 'String' has no member 'split'
let bc = readLine()!.split(separator: " ")
~~~~~~~~~~^ ~~~~~
ダメでした。
Swift2で通す方法が知りたい訳ではないので、ここで終了です。
あーあ。
はじめてのあっとこーだー(関数を使う)
はじめてのあっとこーだー の、関数を使う版。
引数名を記述しなくてはいけません。
逆に言えば、
関数の順番通り
func k1(x: Int, y: Int) -> Int {
return x + y
}
let a = Int(readLine()!)!
let bc = readLine()!.split(separator: " ")
let b = Int(bc[0])!
let c = Int(bc[1])!
let d = k1(x: k1(x: a, y: b), y: c)
let s = readLine()!
print (d.description + " " + s)
関数の順番を変更
引数名を記述するので、順番を変えることができるのか……と思いきや。
error: argument 'x' must precede argument 'y'
(引数 'x'は引数 'y'の前になければなりません)
記述順でエラーが出ます。意味が分からない……
引数名の省略には「_」(アンダースコア)
関数名の引数名は指定しても、呼び出し側からは省略したい、という場合には 「_」(アンダースコア)を 使うと良いです。
func k1(_ x: Int, _ y: Int) -> Int {
return x + y
}
let a = Int(readLine()!)!
let bc = readLine()!.split(separator: " ")
let b = Int(bc[0])!
let c = Int(bc[1])!
let d = k1( k1(a, b), c)
let s = readLine()!
print (d.description + " " + s)