<p>有关独立的解决方案和测试,请参见下文:</p>
<pre class="lang-py prettyprint-override"><code>list_of_tuples = [
('A', 'R'),
('B', 'R'),
('C', 'G'),
('D', 'G'),
('E', 'B'),
('D', 'B'),
('R', 'B'),
('F', 'R'),
('V', 'R'),
('A', 'G')
]
def validate(submitted_word, list_of_tuples):
# Check length of word
if len(submitted_word) == 0:
raise ValueError("len(submitted_word) must be > 0")
# Initialise options for first character
options = [[tup for tup in list_of_tuples if tup[0] == submitted_word[0]]]
# Iterate through the rest of the characters
for char in submitted_word[1:]:
# Initialise set of characters in second position of previous tuple
forbidden_chars = set(tup[1] for tup in options[-1])
# Add valid options for the next character
options.append([
tup
for tup in list_of_tuples
if (tup[0] == char) and len(forbidden_chars - set(tup[1])) > 0
])
# If there are no options, then submitted_word does not validate
if len(options[-1]) == 0:
print(options)
return False
print(options)
return True
print(validate("ACE", list_of_tuples))
print()
print(validate("ACED", list_of_tuples))
print()
print(validate("ACFFFED", list_of_tuples))
</code></pre>
<p>控制台输出:</p>
<pre><code>[[('A', 'R'), ('A', 'G')], [('C', 'G')], [('E', 'B')]]
True
[[('A', 'R'), ('A', 'G')], [('C', 'G')], [('E', 'B')], [('D', 'G')]]
True
[[('A', 'R'), ('A', 'G')], [('C', 'G')], [('F', 'R')], []]
False
</code></pre>