値取得・出力サンプルコードの中にSwiftの例がない。
Swiftで標準入出力もらうことがほとんどないので、最初結構戸惑った。
(なんでサンプルないんだ?)
標準入力(単行)
let input_line=readLine()!
print("XXXXXX")
paizaのデフォルトで表示されるのがこれ。
readLine()で入力値を受け取れる。
!付きなのは、標準入力使うと、通常Optional型でラップされて返ってくるので、
強制アンラップをかけており、input_lineの型はString型になっている。
(標準入力は、nilが入ってくる可能性がある)
!をあんまりつけたくない気持ちはあるのだが、paizaがこれでいいと言ってくれるならば、これで行こう。
入力値が単行の場合、複数のデータが一行で入っていて、
それを分割するところから処理をはじめるケースが多い。
また、Dランクあたりは、2つの数値が文字列で来て、
数値型に変換して、何かしら計算して返せ、みたいなお題が多いように見えた。
標準入力受けるだけならデフォルトの一行なんだけど、
実際は下記くらいのことはだいたいやるんじゃないか。
//aとbふたつの数値をなんかしろ、みたいな課題
//このときの入力データは「8 15」みたいな形式
import Foundation
let input_line: String = readLine()!
let split: [String] = input_line.components(separatedBy: " ") //ブランクで区切られている場合
let a = Int(split[0])!
//String -> Intの型変換はnilが返る可能性があるので、ラップされたOptional<Int>型が返るので強制アンラップ
let b = Int(split[1])!
この辺の基本的な型変換とかできますか、というのがDランクで問われてることなのかな?
標準入力(複数行)
で、ここから僕がハマったポイントなんだけど、
複数行あると、readLine()は複数回行う必要がある。
EOFまでまとめて受け取れないかな〜と思ったが、そんな方法はないようだ。
func readLine(strippingNewline: Bool = default) -> String?
strippingNewlineなる引数があるが、
これはどうも改行文字(\n)を戻り値に含めるか、含めない(stripするか)かの指定っぽい。
2,3行だったら、決め打ちでreadLineを2,3回すればいいと思う。
それ以上になると、配列つくって、ループ文で受け取って、とやるしかない。
/*
25
5
10
みたいな入力を受け取りたい
*/
var input_lines = [String]()
let row = 3 //3行
for i in 0..<row {
input_lines.append(readLine()!)
}
print(input_lines) // ["25", "5", "10"]
Int型への変換とかは単行のときと同様。
標準出力
pritn()で出せば終わり。
問題文の最後に「最後は改行し、余計な文字、空行を含んではいけません」とあるので、
\nを最後につけなきゃいけないのかと思ったのだけど、
どうやらpirnt関数は最後勝手に改行するらしく、これは不要。