aboutsummaryrefslogtreecommitdiff
path: root/challenge-331/ysth/python/ch-2.py
blob: a87815fd244c70637444b94fb4fd2d52135babd6 (plain)
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
import sys
import regex
from itertools import batched

def buddy_strings(string1: str, string2: str) -> bool:
    if len(string1) != len(string2):
        return False
    swaps = 0
    pair_exists: bool = False
    previous_character1: str
    previous_character2: str
    for i in range(len(string1)):
        character1: str = string1[i]
        character2: str = string2[i]
        if swaps == 1:
            # second character of swap
            if previous_character2 != character1 or character2 != previous_character1:
                return False
            swaps = 2
        elif string1[i] != string2[i]:
            # starting the first swap
            if swaps > 0:
                return False
            previous_character1 = character1
            previous_character2 = character2
            swaps = 1
        pair_exists = pair_exists or i > 0 and string1[i-1] == string1[i]

    return pair_exists and swaps == 0 or swaps == 2

def main() -> None:
    inputs: list[str] = sys.argv[1:]

    for string1, string2 in batched(inputs, 2):
        print(f'{string1:<30}\n{string2:<30}\n   -> {"yes" if buddy_strings(string1, string2) else "no"}')

if __name__ == '__main__':
    main()