Skip to content

Instantly share code, notes, and snippets.

@sshaplygin
Last active December 9, 2023 14:24
Show Gist options
  • Select an option

  • Save sshaplygin/9b5f840799cb3e23c907f04ea5fd1b8f to your computer and use it in GitHub Desktop.

Select an option

Save sshaplygin/9b5f840799cb3e23c907f04ea5fd1b8f to your computer and use it in GitHub Desktop.

Revisions

  1. sshaplygin revised this gist Dec 9, 2023. 1 changed file with 12 additions and 1 deletion.
    13 changes: 12 additions & 1 deletion main.py
    Original file line number Diff line number Diff line change
    @@ -29,7 +29,18 @@ def total_points(text: list[str]):
    r += 1 << (l - 1) if l > 1 else l
    return r

    def total_scratchcards(text: list[str]):
    arr = [1] * len(text)
    for idx, row in enumerate(text):
    [prefix, nums_str] = row.split('|')
    [_, win_nums] = prefix.split(':')
    l = len(parse_nums(win_nums) & parse_nums(nums_str))
    for _ in range(arr[idx]):
    for i in range(l):
    arr[idx + i + 1] += 1
    return sum(arr)

    if __name__ == '__main__':
    text = get_text()
    print(total_points(text))
    print(total_points(text))
    print(total_scratchcards(text))
  2. sshaplygin revised this gist Dec 9, 2023. No changes.
  3. sshaplygin created this gist Dec 9, 2023.
    35 changes: 35 additions & 0 deletions main.py
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,35 @@
    def get_text(is_test = False):
    if is_test:
    return [
    'Card 1: 41 48 83 86 17 | 83 86 6 31 17 9 48 53',
    'Card 2: 13 32 20 16 61 | 61 30 68 82 17 32 24 19',
    'Card 3: 1 21 53 59 44 | 69 82 63 72 16 21 14 1',
    'Card 4: 41 92 73 84 69 | 59 84 76 51 58 5 54 83',
    'Card 5: 87 83 26 28 32 | 88 30 70 12 93 22 82 36',
    'Card 6: 31 18 13 56 72 | 74 77 10 23 35 67 36 11',
    ]
    text = []
    with open('input.txt', 'r') as file:
    for line in file:
    text.append(line.strip())

    return text

    def parse_nums(parse_nums):
    nums = filter(lambda n: n.isdigit(), [num for num in parse_nums.strip().split(' ')])
    return set([int(num) for num in nums])

    def total_points(text: list[str]):
    r = 0
    for row in text:
    [prefix, nums_str] = row.split('|')
    [_, win_nums] = prefix.split(':')
    l = len(parse_nums(win_nums) & parse_nums(nums_str))

    r += 1 << (l - 1) if l > 1 else l
    return r


    if __name__ == '__main__':
    text = get_text()
    print(total_points(text))