solve_1.ml 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. open Stdio
  2. open Str
  3. let expand dm =
  4. let rec aux i acc=
  5. if (i >= String.length dm) then
  6. acc
  7. else (if (i == String.length dm -1)
  8. then
  9. let id = Char.chr (i/2 + int_of_char '0') in
  10. let file_size = (int_of_char dm.[i] - int_of_char '0') in
  11. let new_encoding = (String.make file_size id) in
  12. (acc ^ new_encoding)
  13. else
  14. let id = Char.chr (i/2 + int_of_char '0') in
  15. let file_size = (int_of_char dm.[i] - int_of_char '0') in
  16. let empty_space = (int_of_char dm.[i+1] - int_of_char '0') in
  17. let new_encoding = (String.make file_size id) ^ (String.make empty_space '.') in
  18. aux (i+2) (acc ^ new_encoding))
  19. in
  20. aux 0 String.empty
  21. ;;
  22. let calculate_checksum dm=
  23. let rec aux id accum =
  24. if (dm.[id] == '.') then accum
  25. else
  26. let block = (int_of_char dm.[id] - int_of_char '0') in
  27. (aux (id+1) ((id * block) + accum))
  28. in
  29. aux 0 0;;
  30. let solve = calculate_checksum "0099811188827773336446555566.............."
  31. ;;
  32. let () =
  33. printf "%s\n" (expand "2333133121414131402");
  34. printf "Total: %d\n" solve;;