Занятие 21 - Многомерные массивы

แชร์
ฝัง
  • เผยแพร่เมื่อ 4 ต.ค. 2024

ความคิดเห็น • 48

  • @bwswift
    @bwswift  3 ปีที่แล้ว +5

    Пометить все клетки на шахматной доске (двумерный массив с 1/0) которые бьет ферзь за два цикла и три условия.

  • @fantomas3213
    @fantomas3213 3 ปีที่แล้ว +2

    Хороший урок + интересное задание, спасибо!

  • @romankhilyuk6439
    @romankhilyuk6439 ปีที่แล้ว +1

    Спасибо за урок!
    Использовал немного другой метод, для того, чтобы распечатать доску в консоль.
    var board = Array(repeating: Array(repeating: "0", count: 8), count: 8)
    func printBoard (array: [[String]]) {
    print("
    ")
    print(array.map { $0.joined(separator: " ") }.joined(separator: "
    "))
    }
    func changeBoard (array: inout [[String]], piece: (x: Int, y: Int)) {
    if piece.x

  • @ТихоновЮрий-л8я
    @ТихоновЮрий-л8я 3 ปีที่แล้ว +2

    Спасибо большое за ваш труд!

  • @СергейМолодец-н2й
    @СергейМолодец-н2й 2 ปีที่แล้ว +1

    Спасибо за урок! Да, с диагоналями были проблемы)

  • @user-iOSnick-dev
    @user-iOSnick-dev 10 หลายเดือนก่อน

    Спасибо за Ваш труд!!!

  • @den6335
    @den6335 3 ปีที่แล้ว +1

    Сделайте пожалуйста базовый курс офлайн летом этого года в Харькове, очень хочу к Вам попасть!
    И спасибо огромное за Ваши уроки!

  • @illia.yehorov
    @illia.yehorov 2 ปีที่แล้ว +1

    дякую за уроки!
    рішення в один цикл та три умови:
    var imputOptional = (Int("3"), Int("6")) // imput your queen target (x, y)
    var board = Array(repeating: Array(repeating: 0, count: 8), count: 8)
    var queen = (-1, -1)
    func showBoard (_ board: [[Int]]) {
    board.forEach { print($0) }
    }
    if let queenX: (Int) = imputOptional.0 {
    if 0...7 ~= queenX { queen.0 = queenX }
    else { print("X is out of range") }
    } else { print("X is not an Int") }
    if let queenY: (Int) = imputOptional.1 {
    if 0...7 ~= queenY { queen.1 = queenY }
    else { print("Y is out of range") }
    } else { print("Y is not an Int") }
    func match (on board: inout [[Int]], put queen: (Int, Int)) {
    for i in -7...7 {
    if 0...7 ~= i {
    board[i][queen.0] = 1
    board[queen.1][i] = 1
    }
    if 0...7 ~= queen.0+i && 0...7 ~= queen.1+i {
    board[queen.1+i][queen.0+i] = 1
    }
    if 0...7 ~= queen.0-i && 0...7 ~= queen.1+i {
    board[queen.1+i][queen.0-i] = 1
    }
    }
    }
    if 0...7 ~= queen.0 && 0...7 ~= queen.1 {
    match(on: &board, put: queen)
    showBoard(board)
    }

  • @ОлегШульженко-б7у
    @ОлегШульженко-б7у 3 ปีที่แล้ว +1

    Cпасибо за видео которые снимаешь, обязательно скоро поддержу на патреоне! Скажи будет ли разбор от тебя стенфордского курса?)

  • @SergSphinx
    @SergSphinx 3 ปีที่แล้ว +1

    Сдесь должно быть 598к просмотров) Дождусь ли новый видос?)

    • @bwswift
      @bwswift  3 ปีที่แล้ว +1

      Дождёшься!

    • @SergSphinx
      @SergSphinx 3 ปีที่แล้ว

      @@bwswift урраааа)

  • @KseniiaFedotova
    @KseniiaFedotova 2 ปีที่แล้ว

    🔥🔥🔥

  • @babaika_dev
    @babaika_dev 2 ปีที่แล้ว +1

    Спасибо за интересное ДЗ!! I == 4 || j == 3 считается за 2 условия?

    • @bwswift
      @bwswift  2 ปีที่แล้ว +1

      За одно

  • @mkrosavsky
    @mkrosavsky 8 หลายเดือนก่อน

    На 4й день сделал задание с шахматами! 😒 мне 27, мозг уже не торт
    // a - поле
    // position.i и position.j - стартовые координаты
    for i in 0..

    • @bwswift
      @bwswift  8 หลายเดือนก่อน

      👍

  • @etronik3339
    @etronik3339 ปีที่แล้ว +1

    можно задать поле любого размера
    var board = Array(repeating: Array(repeating: 0, count: 8), count: 8)
    func showBoard(_ board: [[Int]]) {
    board.forEach { print($0) }
    }
    func changeBoard(_ board: inout [[Int]], withQueenPosition position: (Int, Int)) {
    let colCount = board[0].count - 1
    let rowCount = board.count - 1
    let x = max(0, min(rowCount, position.0))
    let y = max(0, min(colCount, position.1))
    for (i, row) in board.enumerated() {
    for(j, _) in row.enumerated() {
    if i == x || j == y {
    board[i][j] = 1
    }
    if i - j == x - y {
    board[i][j] = 1
    }
    if i - j == x + y - colCount {
    board[i][colCount-j] = 1
    }
    }
    }
    }
    showBoard(board)
    print("------")
    changeBoard(&board, withQueenPosition: (5, 6))
    showBoard(board)

  • @Crocopizdel
    @Crocopizdel ปีที่แล้ว +2

    var board = Array(repeating: Array(repeating: 0, count: 8), count: 8)
    func print(board: [[Int]]) {
    board.forEach({print($0)})
    }
    func change(board: inout [[Int]], queen: (Int, Int)){
    let outOfRange = ((queen.0 < 0 || queen.0 > 7) || (queen.1 < 0 || queen.1 > 7))
    if outOfRange {
    print("You are out of range")
    } else {
    for (i, row) in board.enumerated() {
    for (j, _ ) in row.enumerated() {
    if i == queen.0 || j == queen.1 {
    board[i][j] = 1
    }
    if i - j == queen.0 - queen.1 {
    board[i][j] = 1
    }
    if i + j == queen.0 + queen.1 {
    board[i][j] = 1
    }
    }
    }
    }
    }
    change(board: &board, queen: (4, 4))
    print(board: board)
    Подглядел тут у Ромы, конечно. Сложновато самому. Старый)

  • @electronic008
    @electronic008 11 หลายเดือนก่อน

    Здравствуйте!
    Не совсем понял .. вы говорите, что вместо цифр в ячейку памяти, которая (предположим) имеет тип UInt8 (1 байт = 8 битам) можно положить все что угодно, например, другой массив ... это как так?? .. как в ячейку, занимающую всего 8 бит может влезть другой массив? .. можете пояснить этот момент?
    нас учили так - строки двумерного массива располагаются в памяти ПОСЛЕДОВАТЕЛЬНО друг за другом! То есть, логическая структура массива (которая у вас нарисована, как двухмерная матрица) отличается от физического размещения в памяти, В памяти строки располагаются ПОСЛЕДОВАТЕЛЬНО!

    • @bwswift
      @bwswift  11 หลายเดือนก่อน

      Устройство памяти в современных языках отличается, есть варианты когда последовательно располагается а есть когда кусками (особенно массив модифицировался). Работа памяти со строками тоже модифицировалась несколько раз и это работает по разному в разных версиях Свифта, на данный момент у нас самая оптимизированная версия которая предполагает в некоторых случаях не последовательное расположение в памяти.
      На счет "как в ячейку может влезть другой массив", он туда не влазит, туда записывается только указатель на другой массив, который расположен по этому указателю в другом участке памяти.

    • @electronic008
      @electronic008 11 หลายเดือนก่อน

      @@bwswift
      В таком случае ваше объяснение и ваш рисунок неверны!!
      Это типичный массив указателей в С
      char *fruit[] = {"apricot", "apple", "banana", "lemon", "orange"};
      Здесь массив указателей fruit хранит пять строк - фактически пять адресов, по которым размещены начальные символы каждой строки.
      fruit[1] == apricot
      fruit[2] == apple
      fruit[3] == banana
      fruit[4] == lemon
      fruit[5 == ]orange
      Соответственно - сам массив указателей расположен на стеке, а данные (в матрице) хранятся в куче (Heap). То есть, на стеке - один массив (указателей), а куче - другой массив (данные)
      * Поправьте меня, если я не прав

    • @bwswift
      @bwswift  11 หลายเดือนก่อน

      @@electronic008 вам чем-то помочь?

    • @electronic008
      @electronic008 11 หลายเดือนก่อน

      @@bwswift
      Ну помочь разобраться)
      Просто я думаю что, скорее всего, ваше объяснение и рисунок неверны (я в предыдущем комментарии написал с примером, почему именно)
      Вообще у вас отличный курс, я не хотел вас задеть ничем, .. исключительно лишь, чтоб самому разобраться

    • @bwswift
      @bwswift  11 หลายเดือนก่อน

      @@electronic008 боюсь что вы на не правильный вопрос получили не правильный ответ. Хорошо, что вам ужалось в этом разобраться, потому что я так и не понял как объяснение в видео связана с этими вопросами :)

  • @ТихоновЮрий-л8я
    @ТихоновЮрий-л8я 3 ปีที่แล้ว

    А вы ещё ведёте уроки в Харькове?

    • @bwswift
      @bwswift  3 ปีที่แล้ว +2

      Веду, но не на регулярной основе. Может к лету 2021 буду новый курс набирать.

    • @ТихоновЮрий-л8я
      @ТихоновЮрий-л8я 3 ปีที่แล้ว

      @@bwswift не на регулярной это индивидуальные?)

    • @SergSphinx
      @SergSphinx 3 ปีที่แล้ว

      Жалко я не в Харькове(

  • @MeMOoo444
    @MeMOoo444 8 หลายเดือนก่อน

    буду честен было сложно посмотрел чуть в коментариях как делать
    спасибо за уроки
    var board = Array (repeating: Array(repeating: 0, count: 8), count: 8)
    func print( board: [[Int]]) {
    board.forEach ({ print ($0) })
    }
    func queen (board: inout [[Int]], x: Int, y: Int ) {
    if (1...8).contains(x), (1...8).contains(y) {
    for (i, element) in board.enumerated() {
    for (j, _) in element.enumerated() {
    if i == (x - y) || j == (x - y) {
    board[i][j] = 1
    } else if (i - j == y - x ) || ( j + i == x + y - 2 ) {
    board[i][j] = 1
    }
    }
    }
    } else {
    print("is out of range")
    }

    }
    queen (board: &board, x: 1, y: 1)
    print()
    print(queen)

  • @nadirnetaliyev8921
    @nadirnetaliyev8921 11 หลายเดือนก่อน

    var board = Array(repeating: Array(repeating: 0, count: 8), count: 8)
    let queen = (4,5)
    func printBoard(_ board: [[Int]]) {
    guard queen.0 > 8 || queen.0 < 1 || queen.1 > 8 || queen.1 < 1 else {
    for (i, _) in board.enumerated() {
    for (j, _) in board.enumerated() {
    print(board[i][j], terminator: " ")
    }
    print()
    }
    print()
    return
    }
    print("Impossible position for the Queen")
    }
    printBoard(board)
    func possibleMovesFor(queen: (Int, Int), onBoard: [[Int]]) {
    guard queen.0 > 8 || queen.0 < 1 || queen.1 > 8 || queen.1 < 1 else {
    var queen = (queen.0 - 1, queen.1 - 1)
    for (i, _) in board.enumerated() {
    for (j, _) in board.enumerated() {
    if(i == queen.0 || j == queen.1 || abs(i-queen.0) == abs(j-queen.1)) {
    board[i][j] = 1
    }
    }
    }
    board[queen.0][queen.1] = 8
    print("Possible positions are printed on the board as 1, Queen is printed as 8")
    return
    }
    print("Impossible position for the Queen")
    }
    possibleMovesFor(queen: queen, onBoard: board)
    print()
    printBoard(board)

    • @bwswift
      @bwswift  11 หลายเดือนก่อน

      👍

    • @stanislavvorozhtsov1606
      @stanislavvorozhtsov1606 7 หลายเดือนก่อน

      Why do we need to pass in "board" to "possibleMovesFor(queen: queen, onBoard: board)" if it doesn't use inside a function?

    • @nadirnetaliyev8921
      @nadirnetaliyev8921 7 หลายเดือนก่อน

      @@stanislavvorozhtsov1606 it is used when I traverse it in for loop, take a good look

    • @stanislavvorozhtsov1606
      @stanislavvorozhtsov1606 7 หลายเดือนก่อน

      @@nadirnetaliyev8921 Sorry, but you are wrong. Inside for-in loop you should use onBoard value that you accept as parameter of the function rather than variable board directly which you define at the begging of your's example

  • @vitalijsminins8305
    @vitalijsminins8305 ปีที่แล้ว

    var chessBoard = Array(repeating: Array(repeating: 0, count: 8), count: 8)
    func printBoard(_ board: [[Int]]) {
    board.forEach({ print($0) })
    }
    func go(_ board: inout [[Int]], x: Int, y: Int) {
    if (1...8).contains(x), (1...8).contains(y) {
    for (i, row) in board.enumerated() {
    for (j, _) in row.enumerated() {
    if i == (y - 1) || j == (x - 1) {
    board[i][j] = 1
    } else if (i - j == y - x ) || ( j + i == x + y - 2 ) {
    board[i][j] = 1
    }
    }
    }
    } else {
    print("not possible: x or y is out of range")
    }
    }
    go(&chessBoard, x: 1, y: 1)
    print()
    printBoard(chessBoard)

  • @СашаВосколович
    @СашаВосколович ปีที่แล้ว

    if (x == location.x || y == location.y) || abs(x - location.x) == abs(y - location.y) && board[x][y] != 1 {
    board[x][y] = 1
    } не хотілось писати два рази board[x][y] = 1, тому вирішив зробити в одному if, як на вашу думку чи добре так писати чи краще розбити? з приводу діагоналей, шукав в математичних "класах")))

    • @bwswift
      @bwswift  ปีที่แล้ว +1

      Ану перевір чи правильно помічає в ситуаціях 0,0 7,7 0,7 7,0 3,5 5,4

  • @VityaSochniy
    @VityaSochniy 7 หลายเดือนก่อน

    var board = Array(repeating: Array(repeating: 0, count: 8), count: 8)
    func printBoard(board: [[Int]]) {
    board.forEach({print($0)})
    }
    func changeBoard(array: inout [[Int]], piece: (x: Int, y: Int)) -> [[Int]] {
    if piece.x < 0 || piece.x > 7 || piece.y < 0 || piece.y > 7 {
    print("There are no coordinates")
    }
    for (i, row) in array.enumerated() {
    for (j, _) in row.enumerated() {
    if i == piece.x || j == piece.y {
    array[i][j] = 1
    }
    if i - j == piece.x - piece.y || i + j == piece.x + piece.y {
    array[i][j] = 1
    }
    }
    }
    return array
    }