タイトルで問題を説明する方法がわからない。
ここに問題があります:
4つのグループがあると仮定します。
(a, b, c, d)
(e, f)
(g, h, i)
(j, k, l, m, n)
これで、4つの要素のタプルが与えられました。たとえば(a, e, h, m)
、どちらも1つのグループからのものではないため、Trueを返します。が与えられた場合(a, b, e, g)
、それa, b
は1つのグループからのものであり、Falseを返します。
次に、これが私の現在のアイデアです。各要素にグループ番号で始まるIDを指定し、重複をテストします。
g1 = ['1a', '1b', '1c', '1d']
g2 = ['2e', '2f']
g3 = ['3g', '3h', '3i']
g4 = ['4j', '4k', '4l', '4m', '4n']
def test(elements):
if len(elements) != 4:
return False
stack = []
for e in elements:
mark = e[:1]
if mark in stack:
return False
stack.append(mark)
ga = set(g1 + g2 + g3 + g4)
return set(elements).issubset(ga)
print test(('1a', '1b', '2e', '3g'))
print test(('1a', '2e', '3g', '4m'))
しかし、文字列比較はあまり洗練されたソリューションではないと思います。これは別のより高速なアルゴリズムで実行できますか?