blob: 59ede915f309060edb289fa2e5fa231332c19a9a (
plain) (
tree)
|
|
module Solutions.Day10
open System.IO
open System.Text.RegularExpressions
let (|InstRegex|_|) pattern line =
let matched = Regex.Match(line, pattern)
if matched.Success then
matched.Groups |> Seq.tail |> Seq.map (fun x -> x.Value) |> List.ofSeq |> Some
else None
let parseInst line =
match line with
| InstRegex "noop" [] -> [0]
| InstRegex "addx (-?\d+)" x -> [0; (int x[0])]
| _ -> failwith "invalid input"
let changes = File.ReadLines("inputs/day10.txt") |> Seq.map parseInst |> List.concat
let executeInsts changes =
List.scan (+) 1 changes
let getStateSum cycles (states: int list) =
cycles |> List.map (fun x -> x * states[x-1]) |> List.sum
let part1 () = executeInsts changes |> getStateSum [20; 60; 100; 140; 180; 220]
let part2 () = executeInsts changes
|> List.mapi (fun pixel signal -> abs (signal - (pixel % 40)) <= 1)
|> List.map (fun x -> if x then "#" else " ")
|> List.chunkBySize 40
|> List.map (String.concat "")
|> List.iter (printf "%s\n")
|