トピック #1 配列
AIZU ONLINE JUDGEの問題にSwiftで解答したものになります。競技プログラミングは普段やりませんので、こうしたほうが簡単!などがあればコメントで教えて下さい。
ブラウザでプログラミング・実行ができる「オンライン実行環境」paiza.IOでテスト出力が行えます
6_A
問題
与えられた数列を逆順に出力するプログラムを作成して下さい。入力は以下の形式で与えられます
n
a_1 a_2 a_3...a_n
逆順の数列を1行に出力して下さい。数列の要素の間に1つの空白を入れて下さい(最後の数の後に空白は入らないことに注意して下さい)。
解答
let a = Int(readLine()!)!
var arr = readLine()!.split(separator: " ").map({Int($0)})
print(arr.reversed())
6_
問題
解答
let a = Int(readLine()!)!
var sArr:[Int] = []
var hArr:[Int] = []
var cArr:[Int] = []
var dArr:[Int] = []
for i in 0 ..< a {
var b = readLine()!.split(separator: " ")
var num = Int(b[1]) ?? 0
switch b[0] {
case "S":
sArr.append(num)
case "H":
hArr.append(num)
case "C":
cArr.append(num)
case "D":
dArr.append(num)
default:
break
}
}
func checkTramp(_ tramp: [Int]) -> [Int] {
var notHaveArr:[Int] = []
for i in 0 ..< tramp.count {
if tramp.contains(i) == false {
notHaveArr.append(i)
}
}
return notHaveArr
}
for i in checkTramp(sArr) {
print("S \(i)")
}
for i in checkTramp(hArr) {
print("H \(i)")
}
for i in checkTramp(cArr) {
print("C \(i)")
}
for i in checkTramp(dArr) {
print("D \(i)")
}
6_B
問題
太郎が花子と一緒にトランプ遊びをしようとしたところ、52枚あるはずのカードが n 枚のカードしか手元にありません。これらの n 枚のカードを入力として、足りないカードを出力するプログラムを作成して下さい。
太郎が最初に持っていたトランプはジョーカーを除く52枚のカードです。
52枚のカードは、スペード、ハート、クラブ、ダイヤの4つの絵柄に分かれており、各絵柄には13のランクがあります。
入力
最初の行に太郎が持っているカードの枚数 n (n ≤ 52)が与えられます。
続いて n 組のカードがそれぞれ1行に与えられます。各組は1つの空白で区切られた文字と整数です。文字はカードの絵柄を表し、スペードが'S'、ハートが'H'、クラブが'C'、ダイヤが'D'で表されています。整数はそのカードのランク(1 〜 13)を表しています。
出力
足りないカードをそれぞれ1行に出力して下さい。各カードは入力と同様に1つの空白で区切られた文字と整数です。
解答
let a = Int(readLine()!)!
var sArr:[Int] = []
var hArr:[Int] = []
var cArr:[Int] = []
var dArr:[Int] = []
for i in 1 ... a {
var b = readLine()!.split(separator: " ")
var num = Int(b[1]) ?? 0
switch b[0] {
case "S":
sArr.append(num)
case "H":
hArr.append(num)
case "C":
cArr.append(num)
case "D":
dArr.append(num)
default:
break
}
}
func checkTramp(_ tramp: [Int]) -> [Int] {
var notHaveArr:[Int] = []
for i in 1 ... tramp.count {
if tramp.contains(i) == false {
notHaveArr.append(i)
}
}
return notHaveArr
}
for i in checkTramp(sArr) {
print("S \(i)")
}
for i in checkTramp(hArr) {
print("H \(i)")
}
for i in checkTramp(cArr) {
print("C \(i)")
}
for i in checkTramp(dArr) {
print("D \(i)")
}
6_C 公舎の入居数
問題
A大学は1フロア10部屋、3階建ての公舎4棟を管理しています。公舎の入居・退去の情報を読み込み、各部屋の入居者数を出力するプログラムを作成して下さい。
n件の情報が与えられます。各情報では、4つの整数b, f, r, vが与えられます。これは、b棟f階のr番目の部屋にv人が追加で入居したことを示します。vが負の値の場合、-v人退去したことを示します。
最初、全ての部屋には誰も入居していないものとします。
入力
最初の行に情報の数 n が与えられます。
続いて n 件の情報が与えられます。各情報には4つの整数 b, f, r, v が空白区切りで1行に与えられます。
出力
4棟について入居者数を出力して下さい。各棟について、1階、2階、3階の順に入居者数を出力します。各階については、1番目、2番目、・・・、10番目の部屋の入居者数を順番に出力します。入居者数の前には1つの空白を出力して下さい。また、各棟の間には####################(20個の#)で区切って下さい。
出力例
3
1 1 3 8
3 2 2 7
4 3 8 1
0 0 8 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
####################
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
####################
0 0 0 0 0 0 0 0 0 0
0 7 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
####################
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 1 0 0
解答
let a = Int(readLine()!)!
var room1 = [[Int]](repeating: [Int](repeating: 0, count: 10), count: 3)
var room2 = [[Int]](repeating: [Int](repeating: 0, count: 10), count: 3)
var room3 = [[Int]](repeating: [Int](repeating: 0, count: 10), count: 3)
var room4 = [[Int]](repeating: [Int](repeating: 0, count: 10), count: 3)
func make(_ b: Int, _ f: Int, _ r: Int, _ v: Int) -> Void {
switch b {
case 1:
room1[f-1][r-1] += v
case 2:
room2[f-1][r-1] += v
case 3:
room3[f-1][r-1] += v
case 4:
room4[f-1][r-1] += v
default:
break
}
}
for i in 0 ..< a {
var c = readLine()!.split(separator: " ").map({Int($0)!})
make(c[0], c[1], c[2], c[3])
}
for i in 0 ..< 3 {
for j in 0 ..< 10 {
print(room1[i][j], terminator: " ")
}
print("\n")
}
print(String(repeating: "#", count: 20))
for i in 0 ..< 3 {
for j in 0 ..< 10 {
print(room2[i][j], terminator: " ")
}
print("\n")
}
print(String(repeating: "#", count: 20))
for i in 0 ..< 3 {
for j in 0 ..< 10 {
print(room3[i][j], terminator: " ")
}
print("\n")
}
print(String(repeating: "#", count: 20))
for i in 0 ..< 3 {
for j in 0 ..< 10 {
print(room4[i][j], terminator: " ")
}
print("\n")
}
6_D ベクトルと行列の積
問題
長いので省略
サイトを見て下さい。
解答
let a = readLine()!.split(separator: " ").map({Int($0)!})
var matrix = [[Int]]()
var vector = [Int]()
var solution = [Int](repeating: 0, count: a[0])
for i in 0 ..< a[0] {
var m1 = readLine()!.split(separator: " ").map({Int($0)!})
matrix.append(m1)
}
for i in 0 ..< a[1] {
vector.append(Int(readLine()!)!)
}
for i in 0 ..< a[0] {
for j in 0 ..< a[1] {
solution[i] += matrix[i][j] * vector[j]
}
}
for i in solution {
print(i)
}