from functools import reduce

def lines_with_sequence(char):
    def with_char(length):
        sequence = char * length

        def with_length(doc):
            return reduce(lambda count, line: count + int(sequence in line), doc.split("\n"), 0)
            
        return with_length
    return with_char



part1 = lines_with_sequence('C')
line_match_counter = part1(4)
doc = """
hello
world
CCCC CCCC
CCCC
"""
result = line_match_counter(doc)
print(result)

######

def count_matching_lines(doc: str, needle: str) -> int:
    """Returns the number of lines where needle is in doc."""
    return sum(1 for line in doc.splitlines() if needle in line)


def lines_with_sequence(char):
    def with_char(length):
        return lambda doc: count_matching_lines(doc, char * length)
    return with_char

part1 = lines_with_sequence('C')
line_match_counter = part1(4)
doc = """
hello
world
CCCC CCCC
CCCC
"""
result = line_match_counter(doc)
print(result)


#####

from functools import partial

def count_matching_lines(char: str, length: int, doc: str) -> int:
    needle = char * length
    return sum(1 for line in doc.splitlines() if needle in line)
# lines_with_sequence
# part1 = lines_with_sequence('C')
# line_match_counter = part1(4)
part1 = partial(count_matching_lines, 'C')
line_match_counter = partial(part1, 4)

doc = """
hello
world
CCCC CCCC
CCCC
"""
result = line_match_counter(doc)
print(result)

