first 4 days
This commit is contained in:
47
3/main.ml
Normal file
47
3/main.ml
Normal file
@@ -0,0 +1,47 @@
|
||||
open Printf;;
|
||||
open String;;
|
||||
open Str;;
|
||||
|
||||
let read_whole_file f =
|
||||
let s = really_input_string f (in_channel_length f) in
|
||||
close_in f;
|
||||
s
|
||||
|
||||
let rec process_all_mul_inner re str pos acc =
|
||||
try
|
||||
let new_pos = Str.search_forward re str pos in
|
||||
let n1 = int_of_string @@ Str.matched_group 1 str in
|
||||
let n2 = int_of_string @@ Str.matched_group 2 str in
|
||||
process_all_mul_inner re str (new_pos + 1) (acc + n1 * n2)
|
||||
with Not_found -> acc
|
||||
let rec process_all_mul_with_dont_inner re str enabled pos acc =
|
||||
try
|
||||
let new_pos = Str.search_forward re str pos in
|
||||
let command = Str.matched_group 0 str in
|
||||
if command = "do()" then
|
||||
process_all_mul_with_dont_inner re str true (new_pos + 1) acc
|
||||
else if command = "don't()" then
|
||||
process_all_mul_with_dont_inner re str false (new_pos + 1) acc
|
||||
else if enabled then
|
||||
let n1 = int_of_string @@ Str.matched_group 1 str in
|
||||
let n2 = int_of_string @@ Str.matched_group 2 str in
|
||||
process_all_mul_with_dont_inner re str enabled (new_pos + 1) (acc + n1 * n2)
|
||||
else
|
||||
process_all_mul_with_dont_inner re str enabled (new_pos + 1) acc
|
||||
with Not_found -> acc
|
||||
|
||||
let process_all_mul str =
|
||||
let re = Str.regexp "mul(\\([0-9]+\\),\\([0-9]+\\))" in
|
||||
process_all_mul_inner re str 0 0
|
||||
|
||||
let process_all_mul_with_dont str =
|
||||
let re = Str.regexp "mul(\\([0-9]+\\),\\([0-9]+\\))\\|do()\\|don't()" in
|
||||
process_all_mul_with_dont_inner re str true 0 0
|
||||
|
||||
let () =
|
||||
let f = open_in "input.txt" in
|
||||
let str = read_whole_file f in
|
||||
let result = process_all_mul str in
|
||||
let result2 = process_all_mul_with_dont str in
|
||||
printf "%d\n" result;
|
||||
printf "%d\n" result2
|
Reference in New Issue
Block a user