Жангирхан Шаку, 404 CompactPairs 14233
Арсен Жуматай,304 CompactPairs 14239
f1import stringf1import string
22
3class Pairs:3class Pairs:
4    __slots__ = ('_offset',)4    __slots__ = ('_offset',)
55
6    def __init__(self, N):6    def __init__(self, N):
7        if not 1 <= N <= 26:7        if not 1 <= N <= 26:
8            raise ValueError('N must be between 1 and 26 inclusive.')8            raise ValueError('N must be between 1 and 26 inclusive.')
9        self._offset = N - 19        self._offset = N - 1
1010
11    def __getattr__(self, name):11    def __getattr__(self, name):
12        if name in string.ascii_lowercase:12        if name in string.ascii_lowercase:
13            index = string.ascii_lowercase.index(name)13            index = string.ascii_lowercase.index(name)
14        elif name in string.ascii_uppercase:14        elif name in string.ascii_uppercase:
15            index = 26 + string.ascii_uppercase.index(name)15            index = 26 + string.ascii_uppercase.index(name)
16        else:16        else:
17            raise AttributeError(f"'{type(self).__name__}' object has no17            raise AttributeError(f"'{type(self).__name__}' object has no
> attribute '{name}'")> attribute '{name}'")
18        return (self._offset + index) % 52 + 118        return (self._offset + index) % 52 + 1
1919
20    def __setattr__(self, name, value):20    def __setattr__(self, name, value):
21        if name == '_offset':21        if name == '_offset':
t22            super().__setattr__(name, value)t22            object.__setattr__(self, name, value)
23        else:23        else:
24            raise AttributeError(f"Cannot set attribute '{name}' directl24            raise AttributeError(f"Cannot set attribute '{name}' directl
>y")>y")
2525
26    def __str__(self):26    def __str__(self):
27        sorted_fields = sorted(string.ascii_lowercase + string.ascii_upp27        sorted_fields = sorted(string.ascii_lowercase + string.ascii_upp
>ercase, key=lambda x: (self.__getattr__(x), x))>ercase, key=lambda x: (self.__getattr__(x), x))
28        return ' '.join(sorted_fields)28        return ' '.join(sorted_fields)
Legends
Colors
 Added 
Changed
Deleted
Links
(f)irst change
(n)ext change
(t)op