Menu
CoddyTech

差集合

CoddyのGDScriptジャーニー「ロジックとフロー」セクションの一部。レッスン 35/78。

2つの集合の差には、最初の集合の要素のうち、2つ目の集合に含まれていないものが入ります。最初の集合をループして、2つ目の集合にないものを残します。

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"]です。つまり、荷造りしたけれど必要なかったものです。

この2つの差を合わせたものが対称差です。つまり、どちらか一方の集合だけに含まれる要素です。ここでは、rope、map、appleです。

何も欠けていないことを確認するために、has_all()は配列を受け取り、そのすべての要素が辞書のキーである場合にtrueを返します。

print(packed.has_all(needed.keys())) # false: rope と map が足りない
challenge icon

チャレンジ

簡単

旅行の前に、必要なものと荷造りしたものを比べます。プログラムは、必要なアイテムと荷造りしたアイテムをスペースで区切った2行を読み込み、スターターコードは集合 needed と packed を作成します。

メンバーを , でつないで、2行を出力します。

  • 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

	# 2つの差集合を作成する

	# 結果を出力する
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

ロジックとフローのすべてのレッスン

自分で練習してみよう: GDScriptオンラインコンパイラ