Menu
CoddyTech

Рваные массивы

Часть раздела Логика и потоки выполнения путешествия по GDScript на Coddy. Урок 16 из 78.

Строки двумерного массива не обязательно должны иметь одинаковую длину. Двумерный массив, строки которого имеют разную длину, называется рваным массивом. Здесь каждая строка содержит очки одного игрока, а игроки сыграли разное количество раундов:

var scores := [
	[90, 85, 70],
	[60],
	[75, 80]
]
print(scores[0].size()) # 3
print(scores[1].size()) # 1

В зубчатом массиве scores[0].size() — это не длина каждой строки. Перебирай столбцы текущей строки с помощью scores[r].size():

for r in range(scores.size()):
	var total := 0
	for c in range(scores[r].size()):
		total += scores[r][c]
	print("Player ", r + 1, ": ", total)
Player 1: 245
Player 2: 60
Player 3: 155

Цикл, который всегда использует длину первой строки, выходит за пределы коротких строк: scores[1][2] — это ошибка, потому что в строке 1 есть только индекс 0. for value in row всегда подходит для строки, по которой он проходит.

Ты строишь ступенчатый массив, как сетку, с разной длиной каждой строки. В этом треугольнике строка r содержит r + 1 ячеек:

var triangle := []
for r in range(4):
	var row := []
	for c in range(r + 1):
		row.append("*")
	triangle.append(row)
for row in triangle:
	print("".join(row))
*
**
***
****

Строка может быть даже пустой: [[1, 2], [], [3]] — это допустимый зубчатый массив из трёх строк.

challenge icon

Задание

Легко

Напиши функцию с именем make_triangle с одним параметром типа int — n. Она возвращает рваный массив из n строк:

  • В строке 1 — 1 ячейка, в строке 2 — 2 ячейки и так далее, вплоть до строки n, в которой n ячеек.
  • Если считать строки и столбцы начиная с 1, каждая ячейка содержит произведение номера своей строки на номер своего столбца. В ячейке строки 3, столбца 2 находится 3 * 2 = 6.

Например, make_triangle(3) возвращает:

[[1], [2, 4], [3, 6, 9]]

Тесты самостоятельно вызывают make_triangle() и проверяют возвращённый массив. Не вызывай её и ничего не выводи.

Попробуйте сами

func make_triangle(n: int):
	# Напишите код здесь
	pass
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Логика и потоки выполнения

Потренируйтесь самостоятельно: Онлайн-компилятор GDScript