
Прошёл обучалку на hackerrank.com - 30 Days of Code. В течение 30 дней мне ежедневно нужно было решать какую-нибудь простую задачу. На самом деле простую, ничего сложного делать не приходилось. Моей целью было знакомство с платформой, точнее, насколько хорошо там работает OCaml. Оказалось, что очень хорошо. Там подключена Core и Str, чего сильно не хватает на codingame. Но не все задачи можно было решить на OCaml, потому что часть задач заключалась в реализации небольшого куска кода, который должен работать внутри предоставленного шаблона (шаблон редактировать нельзя). В итоге статистика такая:
- 18 задач на OCaml.
- 2 задачи на Java (пришлось вспомнить).
- 10 задач решил на Python.
Из интересного запомнилось: регулярные выражения и реализация break через iter+raise (при решении задачи о 8 ферзях я использовал циклы).
Регулярные выражения
open Core.Std open Str let input () = let n = read_int () in List.init n (fun _ -> read_line ()) |> List.sort ~cmp:compare let () = let pattern = Str.regexp "\\([a-z]+\\) [a-z.]+@gmail.com$" in input () |> List.iter ~f:(fun line -> if Str.string_match pattern line 0 then print_endline (Str.matched_group 1 line) )
List.iter + raise == break
open Core.Std exception Not_prime let is_prime num = try if num > 1 then ( List.range 2 ((Int.of_float(sqrt (float num))) + 1) |> List.iter ~f:(fun i -> if num mod i = 0 then raise Not_prime); true ) else raise Not_prime with Not_prime -> false
Заключение
Мне понравилось заниматься на hackerrank, но целиком уходить на эту площадку не буду. Пока буду заниматься и тут, и на codingame. Большой плюс hackerrank - наличие огромного количества простых задач, не только в рамках 30 days of code. По Python и функциональному программированию задач хватит на полгода вперёд. Мне этого достаточно, чтобы поддерживать себя в форме.