Swift2.2で競技プログラミング(AtCoder)

  • 10
    Like
  • 2
    Comment
More than 1 year has passed since last update.

ついにAtCoderにもSwiftが導入される…かな?
http://language-test-201603.contest.atcoder.jp/

実力やいかに。
以下、環境構築や競プロで出番があるかもしれないものをつらつらと。

AtCoderのSwift

言語: Swift (2.2-SNAPSHOT-2016-02-08-a)
コンパイルオプション: swiftc -o a.out Main.swift
実行コマンド: a.out

環境構築

簡単

https://github.com/kylef/swiftenv

swiftenv install 2.2-SNAPSHOT-2016-02-08-a

適当なディレクトリで swiftenv local 2.2-SNAPSHOT-2016-02-08-a としておくのも良い。

レッツトライ

入力処理

paizaでの競プロSwiftと同様、 NSFileHandle からの取得はできない模様。以下だけでCEが出る。

let standardInput = NSFileHandle.fileHandleWithStandardInput()

readLine() による1行取得は使える。もちろん戻り値は Optional<String> である。

let a = readLine()!

Stringのsplit

残念ながらSwift2ではStringが CollectionType でなくなってしまったため、 split を行うことができない。方法としては、 StringCollectionType を与えて split する能力を蘇らせるか、 String.CharacterView を経由するか。

extension String: CollectionType {}
"1 2".split(" ")
"1 2".characters.split(" ")

クロージャなどを取る split もいて、 split を使い分けることにより自由に処理ができる。一応。

3.14

M_PIFoundation 持ちなので使えない。

平方根

sqrtFoundation 持ちなので使えない。
自作関数を突っ込む以外に方法があったら教えてください。。

ソート

またソートの名前が変わっていた……。
副作用を求めていく場合:

rs.sortInPlace(<)

副作用は許さない場合:

rs.sort(<)

まとめ

さすがにネタ言語よりは上だが他の実用言語に劣る(知ってた)