差集合
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 が足りないチャレンジ
簡単旅行の前に、必要なものと荷造りしたものを比べます。プログラムは、必要なアイテムと荷造りしたアイテムをスペースで区切った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つの差集合を作成する
# 結果を出力する
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
ロジックとフローのすべてのレッスン
自分で練習してみよう: GDScriptオンラインコンパイラ