Quantcast
Channel: Raspberry Pi Forums
Viewing all articles
Browse latest Browse all 5597

Teaching and learning resources • Re: Advent of Code 2024

$
0
0

Code:

(* Advent of Code, day7 part1 and part2 - on BPI-F3 RISC-V SBC *)(* OCaml code *)#load "utils.cmo"open Utilslet calculate1 result nums =  let rec calc = function      rr::[] -> rr = result     | rr::a::t -> calc ((rr + a) :: t) || calc ((rr * a) :: t)    | [] -> false  in calc numslet cat a b =  int_of_string (string_of_int a ^ (string_of_int b))let calculate2 result nums =  let rec calc = function      rr::[] -> rr = result     | rr::a::t -> calc ((rr + a) :: t) ||                  calc ((rr * a) :: t) ||                  calc ((cat rr a) :: t)    | [] -> false  in calc numslet day7 file =  let rawl = read_lines file in  let nums =    List.map ((List.map int_of_string) << (string_split [':'; ' '])) rawl in  let r_tups = List.map (fun l -> (List.hd l, List.tl l)) nums in  let all_terms = List.map      (fun (r,ns) -> if calculate1 r ns then (r,[]) else (r,ns)) r_tups in  let (ok_terms,wr_terms) = filter_split      (fun x -> match x with (_,[]) -> true | _ -> false) all_terms in  let cat_terms = List.map      (fun (r,ns) -> if calculate2 r ns then r else 0) wr_terms in  let (a,b) = (List.(fold_left (+) 0 (map fst ok_terms)),               List.fold_left (+) 0 cat_terms) in  (a, a + b)
utop[121]> time (fun () -> day7 "input.txt");;
Execution time: 16.006478s
- : int * int = (4364915411363, 38322057216320)

Part one is only 0.092s, but anyway, I'll have to use ocamlopt again.

hrvoje@BPI-F3:~/Projects/advent-of-code/2024/day-07/OCaml$ time ./day7 input.txt
4364915411363
38322057216320

real0m9.608s
user 0m9.594s
sys0m0.013s

Statistics: Posted by hrvoje064 — Sat Dec 07, 2024 4:08 pm



Viewing all articles
Browse latest Browse all 5597

Trending Articles