forked from adnanaziz/EPIJudge
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathis_anonymous_letter_constructible.py
41 lines (31 loc) · 1.52 KB
/
is_anonymous_letter_constructible.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import collections
from test_framework import generic_test
def is_letter_constructible_from_magazine(letter_text: str,
magazine_text: str) -> bool:
# Compute the frequencies for all chars in letter_text.
char_frequency_for_letter = collections.Counter(letter_text)
# Checks if characters in magazine_text can cover characters in
# char_frequency_for_letter.
for c in magazine_text:
if c in char_frequency_for_letter:
char_frequency_for_letter[c] -= 1
if char_frequency_for_letter[c] == 0:
del char_frequency_for_letter[c]
if not char_frequency_for_letter:
# All characters for letter_text are matched.
return True
# Empty char_frequency_for_letter means every char in letter_text can be
# covered by a character in magazine_text.
return not char_frequency_for_letter
# Pythonic solution that exploits collections.Counter. Note that the
# subtraction only keeps keys with positive counts.
def is_letter_constructible_from_magazine_pythonic(letter_text: str,
magazine_text: str) -> bool:
return (not collections.Counter(letter_text) -
collections.Counter(magazine_text))
if __name__ == '__main__':
exit(
generic_test.generic_test_main(
'is_anonymous_letter_constructible.py',
'is_anonymous_letter_constructible.tsv',
is_letter_constructible_from_magazine))