четверг, 25 января 2018 г.

Swift 9: Switch

В уроке 9 рассмотрены операторы управления потоком.
Домашнее задание к  уроку 9:

/*
 1. Создать строку произвольного текста, минимум 200 символов. Используя цикл и оператор свитч посчитать количество гласных, согласных, цифр и символов.

 2. Создайте свитч который принимает возраст человека и выводит описание жизненного этапа

 3. У вас есть имя отчество и фамилия студента (русские буквы). Имя начинается с А или О, то обращайтесь к студенту по имени, если же нет, то если у него отчество начинается на В или Д, то обращайтесь к нему по имени и отчеству, если же опять нет, то в случае если фамилия начинается с Е или З, то обращайтесь к нему только по фамилии. В противном случае обращайтесь к нему по полному имени.

 4. Представьте что вы играете в морской бои и у вас осталось некоторое количество кораблей на поле 10Х10 (можно буквы и цифры, а можно только цифры). Вы должны создать свитч, который примет тюпл с координатой и выдаст один из вариантов: мимо, ранил, убил.
 */

/*
 1
 */
print("N 1\n")
let text = "1. Swift makes it easy to create arrays in your code using an array literal: simply surround a comma-separated list of values with square brackets. Without any other information, Swift creates an array that includes the specified values, automatically inferring the array’s Element type. For example:"

var vowels = 0
var consonants = 0
var digits = 0
var otherSymbols = 0

for symbol in text {
    let lowerCaseSymbol = String(symbol).lowercased()
    switch lowerCaseSymbol {
    case "a", "e", "i", "o", "u", "y":
        vowels += 1
    case "b", "c", "d", "f", "g", "h", "j", "k", "l", "m",
         "n", "p", "q", "r", "s", "t", "v", "w", "x", "z":
       consonants += 1
    case "0", "1", "2", "3", "4", "5", "6", "7", "8", "9":
        digits += 1
    default:
        otherSymbols += 1
    }
}
print("""
    Text:
        \(text)

    Total Symbols: \(text.count)
    Vowels: \(vowels)
    Consonants: \(consonants)
    Digits: \(digits)
    Other Symbols: \(otherSymbols)
    """)

/*
 2
 */
print("\nN 2\n")

let age = 35
let stage: String
switch age {
case 0:
    stage = "newborn"
    
case 1...10:
    stage = "baby"
case 11...18:
    stage = "teenager"
case 19...30:
    stage = "youth"
case 31...44:
    stage = "median age"
case 45...55:
    stage = "mature age"
case 56...70:
    stage = "advanced age"
case 71...120:
    stage = "old age"
    default:
        stage = "immortal"
}
print("Age: \(age). Stage: \(stage)")

/*
 3
 */
print("\nN 3\n")

let (lastName, firstName, middleName) = ("Иванов", "Иван", "Владимирович")

let greeting: String
switch (lastName[lastName.startIndex], firstName[firstName.startIndex], middleName[middleName.startIndex]) {
case (_, let firstNameSymbol, _) where firstNameSymbol == "А" || firstNameSymbol == "О":
    greeting = firstName
case (_, _, let middleNameSymbol) where middleNameSymbol == "В" || middleNameSymbol == "Д":
    greeting = firstName + " " + middleName;
case (let lastNameSymbol, _, _) where lastNameSymbol == "Е" || lastNameSymbol == "З":
    greeting = lastName;
default:
    greetingfirstName + " " + middleName + " " + lastName;
}

print("Привет,", greeting)


/*
 4
 */
print("\nN 4\n")

var shipsArray = [
//   A  B  C  D  E  F  G  H  I  J
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], // 1
    [0, 1, 0, 3, 3, 3, 0, 0, 2, 0], // 2
    [0, 0, 0, 0, 0, 0, 0, 0, 2, 0], // 3
    [0, 0, 0, 0, 0, 0, 4, 0, 0, 0], // 4
    [0, 0, 0, 0, 2, 0, 4, 0, 0, 0], // 5
    [0, 0, 0, 0, 2, 0, 4, 0, 0, 0], // 6
    [0, 0, 0, 0, 0, 0, 4, 0, 3, 0], // 7
    [0, 0, 0, 0, 0, 0, 0, 0, 3, 0], // 8
    [0, 1, 0, 0, 0, 0, 0, 0, 3, 0], // 9
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0// 10
];
print("Start Ship Pozition:")
print(" A  B  C  D  E  F  G  H  I  J")
print("--------------------------------")
for (n, array) in shipsArray.enumerated() {
    print("\(array) | \(n+1)")
}
print("")

let maxX = 9
let maxY = 9
let lettersDictionary =  ["A": 0, "B": 1, "C": 2, "D": 3, "E" : 4, "F": 5, "G": 6, "H": 7, "I": 8, "J": 9]

let shotsArray = ["A1", "B2", "D2""E2", "F2", "I1", "I2", "I3", "G6", "G7"]

for shot in shotsArray {
    var tempShot = shot
    let letter = String(tempShot.remove(at: tempShot.startIndex))
    var x:Int = lettersDictionary[letter] ?? 0
    var y:Int = Int(tempShot) ?? 1
    y = y - 1
    y = y <= maxY || y >= 0 ? y : 0
    x = x <= maxX || x >= 0 ? x : 0
    let result: String
    switch (x, y) {
    
    case (let x, let y) where shipsArray[y][x] == 1:
        result = "Kill"
        shipsArray[y][x] = -1
    
    case (let x, let y) where shipsArray[y][x] > 1:
        result = "Hurt"
        shipsArray[y][x] = -1
        oX: for i in (0..<x).reversed() {
            if shipsArray[y][i] == 0 {
                break oX;
            } else if shipsArray[y][i] != -1  {
                shipsArray[y][i] -= 1;
            }
        }
        x9: for i in (x + 1)...maxX {
            if shipsArray[y][i] == 0 {
                break x9;
            } else if shipsArray[y][i] != -1 {
                shipsArray[y][i] -= 1;
            }
        }
        oY: for i in (0..<y).reversed() {
            if shipsArray[i][x] == 0 {
                break oY;
            } else if shipsArray[i][x] != -1 {
                shipsArray[i][x] -= 1;
            }
        }
        y9: for i in (y + 1)...maxY {
            if shipsArray[i][x] == 0 {
                break y9;
             } else if shipsArray[i][x] != -1 {
                shipsArray[i][x] -= 1;
            }
        }
    default:
        result = "Fail"
    }
    print("Shot: \(shot). Result: \(result)")
}
print("\nFinish Ship Pozition:")
print(" A  B  C  D  E  F  G  H  I  J")
print("--------------------------------")
for (n, array) in shipsArray.enumerated() {
    print("\(array) | \(n+1)")
}





Console:

N 1

Text:
    1. Swift makes it easy to create arrays in your code using an array literal: simply surround a comma-separated list of values with square brackets. Without any other information, Swift creates an array that includes the specified values, automatically inferring the array’s Element type. For example:

Total Symbols: 300
Vowels: 107
Consonants: 138
Digits: 1
Other Symbols: 54

N 2

Age: 35. Stage: median age

N 3

Привет, Иван Владимирович

N 4

Start Ship Pozition:
 A  B  C  D  E  F  G  H  I  J
--------------------------------
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0] | 1
[0, 1, 0, 3, 3, 3, 0, 0, 2, 0] | 2
[0, 0, 0, 0, 0, 0, 0, 0, 2, 0] | 3
[0, 0, 0, 0, 0, 0, 4, 0, 0, 0] | 4
[0, 0, 0, 0, 2, 0, 4, 0, 0, 0] | 5
[0, 0, 0, 0, 2, 0, 4, 0, 0, 0] | 6
[0, 0, 0, 0, 0, 0, 4, 0, 3, 0] | 7
[0, 0, 0, 0, 0, 0, 0, 0, 3, 0] | 8
[0, 1, 0, 0, 0, 0, 0, 0, 3, 0] | 9
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0] | 10

Shot: A1. Result: Fail
Shot: B2. Result: Kill
Shot: D2. Result: Hurt
Shot: E2. Result: Hurt
Shot: F2. Result: Kill
Shot: I1. Result: Fail
Shot: I2. Result: Hurt
Shot: I3. Result: Kill
Shot: G6. Result: Hurt
Shot: G7. Result: Hurt

Finish Ship Pozition:
 A  B  C  D  E  F  G  H  I  J
--------------------------------
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0] | 1
[0, -1, 0, -1, -1, -1, 0, 0, -1, 0] | 2
[0, 0, 0, 0, 0, 0, 0, 0, -1, 0] | 3
[0, 0, 0, 0, 0, 0, 2, 0, 0, 0] | 4
[0, 0, 0, 0, 2, 0, 2, 0, 0, 0] | 5
[0, 0, 0, 0, 2, 0, -1, 0, 0, 0] | 6
[0, 0, 0, 0, 0, 0, -1, 0, 3, 0] | 7
[0, 0, 0, 0, 0, 0, 0, 0, 3, 0] | 8
[0, 1, 0, 0, 0, 0, 0, 0, 3, 0] | 9

[0, 0, 0, 0, 0, 0, 0, 0, 0, 0] | 10

Комментариев нет:

Отправить комментарий