| 12345678910111213141516171819202122232425262728293031323334353637383940 |
- open Stdio
- open Str
- let expand dm =
- let rec aux i acc=
- if (i >= String.length dm) then
- acc
- else (if (i == String.length dm -1)
- then
- let id = Char.chr (i/2 + int_of_char '0') in
- let file_size = (int_of_char dm.[i] - int_of_char '0') in
- let new_encoding = (String.make file_size id) in
- (acc ^ new_encoding)
- else
- let id = Char.chr (i/2 + int_of_char '0') in
- let file_size = (int_of_char dm.[i] - int_of_char '0') in
- let empty_space = (int_of_char dm.[i+1] - int_of_char '0') in
- let new_encoding = (String.make file_size id) ^ (String.make empty_space '.') in
- aux (i+2) (acc ^ new_encoding))
- in
- aux 0 String.empty
- ;;
- let calculate_checksum dm=
- let rec aux id accum =
- if (dm.[id] == '.') then accum
- else
- let block = (int_of_char dm.[id] - int_of_char '0') in
- (aux (id+1) ((id * block) + accum))
- in
- aux 0 0;;
-
- let solve = calculate_checksum "0099811188827773336446555566.............."
- ;;
- let () =
- printf "%s\n" (expand "2333133121414131402");
- printf "Total: %d\n" solve;;
|