LoginSignup
0
1

More than 3 years have passed since last update.

AIZU ONLINE JUDGE の問題をSwiftでやってみた(プログラミング入門 配列編)

Posted at

トピック #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)
}
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1