дякую за уроки! рішення в один цикл та три умови: 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) }
можно задать поле любого размера 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)
Здравствуйте! Не совсем понял .. вы говорите, что вместо цифр в ячейку памяти, которая (предположим) имеет тип UInt8 (1 байт = 8 битам) можно положить все что угодно, например, другой массив ... это как так?? .. как в ячейку, занимающую всего 8 бит может влезть другой массив? .. можете пояснить этот момент? нас учили так - строки двумерного массива располагаются в памяти ПОСЛЕДОВАТЕЛЬНО друг за другом! То есть, логическая структура массива (которая у вас нарисована, как двухмерная матрица) отличается от физического размещения в памяти, В памяти строки располагаются ПОСЛЕДОВАТЕЛЬНО!
Устройство памяти в современных языках отличается, есть варианты когда последовательно располагается а есть когда кусками (особенно массив модифицировался). Работа памяти со строками тоже модифицировалась несколько раз и это работает по разному в разных версиях Свифта, на данный момент у нас самая оптимизированная версия которая предполагает в некоторых случаях не последовательное расположение в памяти. На счет "как в ячейку может влезть другой массив", он туда не влазит, туда записывается только указатель на другой массив, который расположен по этому указателю в другом участке памяти.
@@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 Ну помочь разобраться) Просто я думаю что, скорее всего, ваше объяснение и рисунок неверны (я в предыдущем комментарии написал с примером, почему именно) Вообще у вас отличный курс, я не хотел вас задеть ничем, .. исключительно лишь, чтоб самому разобраться
@@electronic008 боюсь что вы на не правильный вопрос получили не правильный ответ. Хорошо, что вам ужалось в этом разобраться, потому что я так и не понял как объяснение в видео связана с этими вопросами :)
буду честен было сложно посмотрел чуть в коментариях как делать спасибо за уроки 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") }
@@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
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, як на вашу думку чи добре так писати чи краще розбити? з приводу діагоналей, шукав в математичних "класах")))
Пометить все клетки на шахматной доске (двумерный массив с 1/0) которые бьет ферзь за два цикла и три условия.
Хороший урок + интересное задание, спасибо!
Спасибо за урок!
Использовал немного другой метод, для того, чтобы распечатать доску в консоль.
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
Спасибо большое за ваш труд!
Спасибо за урок! Да, с диагоналями были проблемы)
Спасибо за Ваш труд!!!
Сделайте пожалуйста базовый курс офлайн летом этого года в Харькове, очень хочу к Вам попасть!
И спасибо огромное за Ваши уроки!
дякую за уроки!
рішення в один цикл та три умови:
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)
}
Cпасибо за видео которые снимаешь, обязательно скоро поддержу на патреоне! Скажи будет ли разбор от тебя стенфордского курса?)
Сдесь должно быть 598к просмотров) Дождусь ли новый видос?)
Дождёшься!
@@bwswift урраааа)
🔥🔥🔥
Спасибо за интересное ДЗ!! I == 4 || j == 3 считается за 2 условия?
За одно
На 4й день сделал задание с шахматами! 😒 мне 27, мозг уже не торт
// a - поле
// position.i и position.j - стартовые координаты
for i in 0..
👍
можно задать поле любого размера
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)
👍
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)
Подглядел тут у Ромы, конечно. Сложновато самому. Старый)
👍
Здравствуйте!
Не совсем понял .. вы говорите, что вместо цифр в ячейку памяти, которая (предположим) имеет тип UInt8 (1 байт = 8 битам) можно положить все что угодно, например, другой массив ... это как так?? .. как в ячейку, занимающую всего 8 бит может влезть другой массив? .. можете пояснить этот момент?
нас учили так - строки двумерного массива располагаются в памяти ПОСЛЕДОВАТЕЛЬНО друг за другом! То есть, логическая структура массива (которая у вас нарисована, как двухмерная матрица) отличается от физического размещения в памяти, В памяти строки располагаются ПОСЛЕДОВАТЕЛЬНО!
Устройство памяти в современных языках отличается, есть варианты когда последовательно располагается а есть когда кусками (особенно массив модифицировался). Работа памяти со строками тоже модифицировалась несколько раз и это работает по разному в разных версиях Свифта, на данный момент у нас самая оптимизированная версия которая предполагает в некоторых случаях не последовательное расположение в памяти.
На счет "как в ячейку может влезть другой массив", он туда не влазит, туда записывается только указатель на другой массив, который расположен по этому указателю в другом участке памяти.
@@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). То есть, на стеке - один массив (указателей), а куче - другой массив (данные)
* Поправьте меня, если я не прав
@@electronic008 вам чем-то помочь?
@@bwswift
Ну помочь разобраться)
Просто я думаю что, скорее всего, ваше объяснение и рисунок неверны (я в предыдущем комментарии написал с примером, почему именно)
Вообще у вас отличный курс, я не хотел вас задеть ничем, .. исключительно лишь, чтоб самому разобраться
@@electronic008 боюсь что вы на не правильный вопрос получили не правильный ответ. Хорошо, что вам ужалось в этом разобраться, потому что я так и не понял как объяснение в видео связана с этими вопросами :)
А вы ещё ведёте уроки в Харькове?
Веду, но не на регулярной основе. Может к лету 2021 буду новый курс набирать.
@@bwswift не на регулярной это индивидуальные?)
Жалко я не в Харькове(
буду честен было сложно посмотрел чуть в коментариях как делать
спасибо за уроки
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)
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)
👍
Why do we need to pass in "board" to "possibleMovesFor(queen: queen, onBoard: board)" if it doesn't use inside a function?
@@stanislavvorozhtsov1606 it is used when I traverse it in for loop, take a good look
@@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
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, як на вашу думку чи добре так писати чи краще розбити? з приводу діагоналей, шукав в математичних "класах")))
Ану перевір чи правильно помічає в ситуаціях 0,0 7,7 0,7 7,0 3,5 5,4
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
}