Menu
CoddyTech

הפרש קבוצות

חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-GDScript של Coddy. שיעור 35 מתוך 78.

ההפרש בין שתי קבוצות מכיל את האיברים של הקבוצה הראשונה שאינם בקבוצה השנייה. בצע לולאה על הקבוצה הראשונה והשאר את מה שחסר בקבוצה השנייה:

var needed := {"rope": true, "torch": true, "map": true}
var packed := {"torch": true, "apple": true}
var missing := {}
for item in needed:
	if not packed.has(item):
		missing[item] = true
print(missing.keys()) # ["rope", "map"]

לסדר הקבוצות יש חשיבות. ההפרש בין packed ל־needed הוא ["apple"]: מה שארזת אך לא היית צריך.

שני ההבדלים יחד יוצרים את ההפרש הסימטרי: האיברים שנמצאים בדיוק באחת מהקבוצות. כאן אלה rope, map ו־apple.

כדי לבדוק ששום דבר לא חסר, has_all() מקבלת מערך ומחזירה true כאשר כל אחד מהאיברים בו הוא מפתח במילון:

print(packed.has_all(needed.keys())) # false: החבל והמפה חסרים
challenge icon

אתגר

קל

לפני נסיעה, משווים בין מה שצריך לבין מה שארזתם. התוכנית קוראת שתי שורות, את הפריטים הדרושים ואת הפריטים שנארזו, כשהם מופרדים ברווחים, וקוד הפתיחה בונה את הקבוצות needed ו-packed.

הדפיסו שתי שורות, כשהאיברים מופרדים באמצעות , :

  • Missing: ואחריו הפריטים הדרושים שלא נארזו
  • Extra: ואחריו הפריטים שנארזו ואינם נחוצים

שמרו על הסדר של הקבוצה שעליה עוברים בלולאה. הדפיסו none במקום רשימה ריקה. עבור הקלט:

rope torch map
torch apple

הפלט הוא:

Missing: rope, map
Extra: apple

נסו בעצמכם

extends Node

func _ready():
	var needed := {}
	for item in OS.read_string_from_stdin().split(" ", false):
		needed[item] = true
	var packed := {}
	for item in OS.read_string_from_stdin().split(" ", false):
		packed[item] = true

	# בנו את שתי קבוצות ההפרש

	# הדפיסו את התוצאות
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה לוגיקה וזרימת תוכנית

תרגלו בעצמכם: קומפיילר GDScript אונליין