トピック #8 文字
AIZU ONLINE JUDGEの問題にSwiftで解答したものになります。競技プログラミングは普段やりませんので、こうしたほうが簡単!などがあればコメントで教えて下さい。
ブラウザでプログラミング・実行ができる「オンライン実行環境」paiza.IOでテスト出力が行えます
8_A 大文字と小文字の入れ替え
問題
大文字を小文字に、小文字を大文字にして下さい
解答
let a = readLine()!
func convert(_ text: String) -> String {
var returnText = ""
for i in text {
if i.isUppercase {
returnText.append(i.lowercased())
} else {
returnText.append(i.uppercased())
}
}
return returnText
}
print(convert(a))
8_B 数字の和
問題
複数のデータセットが入力として与えられます。各データセットは1つの整数 x を含む1行で与えられます。
x は 1000 桁以下の整数です。
x が 0 のとき入力の終わりとします。このデータセットに対する出力を行ってはいけません。
解答
while(true) {
let a = readLine()!
if Int(a) == 0{
break
}
var sum = 0
let b = Array(a).compactMap({Int(String($0))})
for i in b {
sum += i
}
print(sum)
}
8_C 文字のカウント
問題
与えられた英文に含まれる、各アルファベットの数を数えるプログラムを作成して下さい。 なお、小文字と大文字は区別しません。
解答
let lowChaArr = (97...122).map{String(Character(UnicodeScalar($0)!))}
var countArr = [Int](repeating: 0, count: 26)
var arrLowNum = 0
let a = readLine()!.lowercased()
for i in a {
var arrUpNum = 0
for j in lowChaArr {
if String(i) == j {
countArr[arrUpNum] += 1
}
arrUpNum += 1
}
}
for i in 0 ..< 26{
print("\(lowChaArr[i]) : \(countArr[i])")
}
8_D リング
問題
リング状の文字列$s$の任意の位置から、時計回りに連続した文字をいくつか選んで文字列$p$が作れるかを判定するプログラムを作成しなさい。
解答
import Foundation
let ringWords = readLine()!
let searchWord = readLine()!
let ringsWordCount = ringWords.count
let ringsWordIndexStart = ringWords.index(ringWords.startIndex, offsetBy: 0)
let ringsWordIndexHalf = ringWords.index(ringWords.startIndex, offsetBy: ringsWordCount/2)
let ringsWordIndexEnd = ringWords.index(ringWords.startIndex, offsetBy: ringsWordCount)
let frontWords = ringWords[ringsWordIndexStart..<ringsWordIndexHalf]
let backWords = ringWords[ringsWordIndexHalf..<ringsWordIndexEnd]
let convertedRingWords = backWords+frontWords
if ringWords.contains(searchWord) || convertedRingWords.contains(searchWord) {
print("Yes")
} else {
print("No")
}