В стандартной библиотеке go есть ли инструменты для работы с многомерными срезами/массивами?
Всем привет. Го мой первый язык, и я открыл задачку для школьников на диагональ матрицы, и не смог её решить. Неужели нет никаких инструментов, чтоб не возиться с кучей вложенных циклов? Ведь без инструментов, тут нужен iq минимум 150, чтоб такие логические конструкции вместить в голове. Уже хочу бросить всё, раз даже такое не смог решить. Открыл решения, там питон в основном, и это в одну строчку всё у них. А тут городил циклы, так ничего и не вышло. И даже рабочее решение от gpt я понять не смог. На этот вопрос мне он тоже ответить не смог.
Ведь без инструментов, тут нужен iq минимум 150, чтоб такие логические конструкции вместить в голове.
Надеюсь что это не тролинг, т.к. смысла в том, чтобы решать учебные задачки при помощи готовых инструментов очень мало.
Суть в том, что в начале большинство программистов проходят через то, что им сложно реализовать простые алгоритмы. Есть https://projecteuler.net/archives, на котором разбираются задачки, можно на ютубе их посмотреть. В целом если ищете, где на каждый чих будут готовые инструменты, то го не для вас точно. Т.к. даже в бекенде(облатсь для которой он предназначен) часто приходится писать сырые sql запросы и функционал, который в яве/питоне идёт из коробки. Также часто нужно залезать в исходники библиотек/програм, поэтому го это далеко не лучший выбор для новичка, т.к. вам нужно знать предметную область в которой вы будете его применять, желательно понимать ОС, на которой вы будете его применять (по началу не так важно конечно) и быть готовым писать много кода.
А тут городил циклы, так ничего и не вышло.
Можно сюда код было выложить или тут бы подсказали как сделать правильно.
calculator212, но ведь питонисты и джависты изначально тоже не знают предметную область. И на джаве кажется пишут более сложные, большие приложения, а на го поменьше. Ну и конкуренция в питон бэкенд запредельная. А за ссылку спасибо. Задачу я решил кстати, помог чатгпт с ней, и разобрался как это делать, что самое главное. Правда словил депрессняк от этого, но это уже другая тема.
Если вы решаете задачи на алгоритмы, то вам лучше как раз без таких библиотек, которые в одну строчку делают задачу (потому что в библиотеке кто-то до вас уже написал агоритмы).
Если же по работе нужно для решения проблемы, то берите одну из библиотек, которые я предложил выше.
Ведь без инструментов, тут нужен iq минимум 150
Это вам так кажется, потому что первый язык и вы только начинаете разбираться. На самом деле такие задачи без проблем решаются на чистом го.
Так для работы с диагоналями матриц достаточно одного цикла, зачем там вложенные?
Ну и попробуйте поработать с одномерными массивами, прежде чем переходить к многомерным.
for i := 0; i < len(matrix); i++ {
fmt.Println(matrix[i][i]) //главная
}
for i := 0; i < len(matrix); i++ {
fmt.Println(matrix[i][len(matrix)-1-i]) //побочная
}
Дано число n, n ≤ 100 . Создайте массив n×n и заполните его по следующему правилу:
- числа на диагонали, идущей из правого верхнего в левый нижний угол, равны 1;
- числа, стоящие выше этой диагонали, равны 0;
- числа, стоящие ниже этой диагонали, равны 2.
Входные данные:
Программа получает на вход число n.
Выходные данные:
Необходимо вывести полученный массив. Числа разделяйте одним пробелом.
Диагональ нарисовать смог как раз одним циклом. Далее уже от этого отталкивался и дорисовал то что ниже и выше диагонали было нужно. В итоге вышло как то так
package main
import "fmt"
func main() {
var n int
fmt.Scan(&n)
matrix := make([][]int, n)
for i := range matrix {
s := make([]int, n)
matrix[i] = s
for j := range s {
if j < n-1-i {
s[j] = 0
} else if j > n-1-i {
s[j] = 2
} else {
s[j] = 1
}
}
}
for i := 0; i < len(matrix); i++ {
for j := 0; j < len(matrix[i]); j++ {
if j < len(matrix[i])-1 {
fmt.Print(matrix[i][j], " ")
} else {
fmt.Print(matrix[i][j])
}
}
if i < len(matrix)-1 {
fmt.Printf("\n")
}
}
}
Вот и думаю, это я тупой, или задачка не прям чтоб совсем лёгенькая