Menu
CoddyTech

Tekrar - Özel Liste

Coddy'nin GDScript Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 34 / 65.

challenge icon

Görev

Orta

custom_list.gd dosyasında, özel bir Array _items sarmalayan ve metotlar ile sanal metotlar aracılığıyla bir listenin ihtiyaç duyduğu işlevleri sunan CustomList sınıfını yaz:

  • _init(items = []), items öğesinin bir kopyasını saklar; böylece kendisine aktarılan Array'de daha sonra yapılan değişiklikler listeye yansımaz.
  • append(item) sona bir öğe ekler. pop_back() son öğeyi kaldırıp döndürür veya liste boş olduğunda null döndürür.
  • get_at(index) öğeyi döndürür veya dizin 0 ile size() - 1 aralığının dışındaysa null döndürür. set_at(index, value) öğeyi değiştirip true döndürür veya dizin listenin dışındaysa false döndürür.
  • size(), has(item) ve clear(), aynı ada sahip Array metotları gibi çalışır.
  • concat(other), + operatörünün yerine geçer: bu listenin öğelerini, ardından other öğelerini içeren yeni bir CustomList döndürür ve hiçbir listeyi değiştirmez.
  • _to_string(), öğeleri Array'in yazdırdığı biçimde döndürür; örneğin [3, 1, 4].
  • _iter_init(), _iter_next() ve _iter_get(), bir for döngüsünün öğeler arasında gezinmesini sağlar.

Verilen kod başlangıç sayılarını (tek satırda, boşluklarla ayrılmış ve boş olabilir) okur, listeyi oluşturur, kendisine aktarılan Array'e 99 ekler ve listeyi yazdırır. Ardından komut sayısını okur ve her satırda bir komut çalıştırır: append N, pop, get I, set I N, has N, size, sum (liste üzerinde bir for döngüsü), clear ve concat N N .... Bu girdi için:

3 1 4
8
append 1
get 2
get 9
set 0 5
has 4
sum
pop
concat 9 2

şunu yazdırır:

[3, 1, 4]
[3, 1, 4, 1]
Item 2: 4
No item at 9
[5, 1, 4, 1]
Has 4: true
Sum: 11
Popped 1
[5, 1, 4] + [9, 2] = [5, 1, 4, 9, 2]

Kodunu custom_list.gd dosyasına yaz. main.gd, verilen girdi/çıktı kodunu içerir ve düzenlenemez.

Kendin dene

extends Node

func _ready():
	# Sağlanan girdi/çıktı kodu: olduğu gibi bırakın
	var numbers := to_numbers(OS.read_string_from_stdin().split(" ", false))
	var list := CustomList.new(numbers)
	# Liste kendi kopyasını saklamalıdır
	numbers.append(99)
	print(list)
	var count := int(OS.read_string_from_stdin())
	for i in count:
		var parts := OS.read_string_from_stdin().split(" ", false)
		match parts[0]:
			"append":
				list.append(int(parts[1]))
				print(list)
			"pop":
				var item = list.pop_back()
				print("Empty" if item == null else "Popped %d" % item)
			"get":
				var item = list.get_at(int(parts[1]))
				print(("No item at " + parts[1]) if item == null else "Item %s: %d" % [parts[1], item])
			"set":
				if list.set_at(int(parts[1]), int(parts[2])):
					print(list)
				else:
					print("No item at " + parts[1])
			"has":
				print("Has %s: %s" % [parts[1], list.has(int(parts[1]))])
			"size":
				print("Size: %d" % list.size())
			"sum":
				var total := 0
				for item in list:
					total += item
				print("Sum: %d" % total)
			"clear":
				list.clear()
				print(list)
			"concat":
				var other := CustomList.new(to_numbers(parts.slice(1)))
				print("%s + %s = %s" % [list, other, list.concat(other)])

func to_numbers(words: PackedStringArray) -> Array:
	var result := []
	for word in words:
		result.append(int(word))
	return result

Nesne Yönelimli Programlama bölümündeki tüm dersler

Kendi başına pratik yap: Online GDScript derleyicisi