Day - 2 of the series - The challenge screams more and more like a regex problem but I still choose to start with the simplest approach as Attempt-1
We process the input string character-by-character:
""" After a line is read and processed, we do not need it anymore. So no datastructures except for a counter to keep track of no. of correct passwords.
    - Set "valid_password_counter" to 0
    - Split the line by spaces to fill 3 variables:
    -- (1) pos1-pos2 pair -- includes '-' sign
    -- (2) character to be searched
    -- (3) password
    -
    - Split the pos1-pos2 pair by '-' to fill 2 variables:
    -- (1) pos_1
    -- (2) pos_2
    - Then,
    -- if password[pos_1 -1] XOR password[pos_2-1] returns True, increment "valid_password_counter" by 1
    - At the end of loop, print "valid_password_counter"
"""
def execute():
    valid_password_counter = 0
    for line in lines:    
        ps1_pos2_pair, character, password = line.split()
        pos_1, pos_2 = map(int, ps1_pos2_pair.split('-'))
        character = character[0]
    
        """print(min_count, max_count, character, password)"""
        if (password[pos_1 - 1] == character)^(password[pos_2 - 1] == character):
            valid_password_counter += 1
    
    print(valid_password_counter)
lines = open('input-2.txt', 'r')
execute()
Here’s the time taken in 3 consecutive runs:
shashank@shashank-HP-ENVY-Notebook:~/Projects/personal/programming-challenges/advent-of-code/2020/day-2$ time python3 part-2-attempt-1.py 
313
real    0m0.039s
user    0m0.031s
sys     0m0.008s
shashank@shashank-HP-ENVY-Notebook:~/Projects/personal/programming-challenges/advent-of-code/2020/day-2$ time python3 part-2-attempt-1.py 
313
real    0m0.039s
user    0m0.035s
sys     0m0.005s
shashank@shashank-HP-ENVY-Notebook:~/Projects/personal/programming-challenges/advent-of-code/2020/day-2$ time python3 part-2-attempt-1.py 
313
real    0m0.043s
user    0m0.042s
sys     0m0.001s
shashank@shashank-HP-ENVY-Notebook:~/Projects/personal/programming-challenges/advent-of-code/2020/day-2$ 
I give another try using regex here:
import re
""" After a line is read and processed, we do not need it anymore. So no datastructures except for a counter to keep track of no. of correct passwords.
    - Set "valid_password_counter" to 0
    - Split the line by spaces to fill 3 variables:
    -- (1) pos1-pos2 pair -- includes '-' sign
    -- (2) character to be searched
    -- (3) password
    -
    - Split the pos1-pos2 pair by '-' to fill 2 variables:
    -- (1) pos_1
    -- (2) pos_2
    - Then,
    -- if password[pos_1 -1] XOR password[pos_2-1] returns True, increment "valid_password_counter" by 1
    - At the end of loop, print "valid_password_counter"
"""
def execute():
    valid_password_counter = 0
    for line in lines:    
        ps1_pos2_pair, character, password = line.split()
        pos_1, pos_2 = map(int, ps1_pos2_pair.split('-'))
        character = character[0]
    
        """ print(pos_1, pos_2, character, password) """
        regex_1 = '.{' + str(pos_1 - 1) + '}' + character + '.*'
        regex_2 = '.{' + str(pos_2 - 1) + '}' + character + '.*'
        pattern_1 = re.compile(regex_1)
        pattern_2 = re.compile(regex_2)
        """ print(pattern_1)
        print(pattern_2) """
        
        if (pattern_1.match(password) is not None)^(pattern_2.match(password) is not None):
            valid_password_counter += 1
    
    print(valid_password_counter)
lines = open('input-2.txt', 'r')
execute()
Aha! That made me give a good read of Python’s regex module and its gotchas. Now I wonder if I gained anything with this eyesore piece of code?! Aaargh!
Here’s the time taken in 3 consecutive runs:
shashank@shashank-HP-ENVY-Notebook:~/Projects/personal/programming-challenges/advent-of-code/2020/day-2$ time python3 part-2-attempt-2.py 
313
real    0m0.067s
user    0m0.059s
sys     0m0.008s
shashank@shashank-HP-ENVY-Notebook:~/Projects/personal/programming-challenges/advent-of-code/2020/day-2$ time python3 part-2-attempt-2.py 
313
real    0m0.069s
user    0m0.065s
sys     0m0.004s
shashank@shashank-HP-ENVY-Notebook:~/Projects/personal/programming-challenges/advent-of-code/2020/day-2$ time python3 part-2-attempt-2.py 
313
real    0m0.066s
user    0m0.049s
sys     0m0.017s
shashank@shashank-HP-ENVY-Notebook:~/Projects/personal/programming-challenges/advent-of-code/2020/day-2$ 
That’s a loss indeed.
Do you have a better approach? Tweet as a reply or Open an Issue referencing the title.
r' (raw strings) save us from backslash hell in regexes