(ns day-3.core
(:require [clojure.java.io :as io])
(:require [clojure.string :as str])
(:use [clojure.test :only [is]])
(:use [clojure.pprint])
(:gen-class))
(def test-set "xmul(2,4)%&mul[3,7]!@^do_not_mul(5,5)+mul(32,64]then(mul(11,8)mul(8,5))")
(def test-set-second "xmul(2,4)&mul[3,7]!^don't()_mul(5,5)+mul(32,64](mul(11,8)undo()?mul(8,5))")
(defn solve-first [data]
(->> (re-seq #"mul\((\d+),(\d+)\)" data)
(map (partial drop 1))
(map (partial map #(Integer/parseInt %)))
(map (partial reduce *))
(reduce +)))
(defn solve-second [data]
(->> (str/split data #"do")
(filter #(not (str/starts-with? % "n't()")))
(map solve-first)
(reduce +)))
(defn -main
[& args]
(let [data-set (slurp "data/day3.txt")]
(println "(1) Test set...")
(println (solve-first test-set))
(println "(1) Large set...")
(println (solve-first data-set))
(println "(2) Test set...")
(println (solve-second test-set-second))
(println "(2) Large set...")
(println (solve-second data-set))))