Skip to content

Instantly share code, notes, and snippets.

@lilactown
Created December 4, 2017 18:38
Show Gist options
  • Save lilactown/99a0cd00ad36d447f30c6833d33bdf8e to your computer and use it in GitHub Desktop.
Save lilactown/99a0cd00ad36d447f30c6833d33bdf8e to your computer and use it in GitHub Desktop.
Advent of Code, 2017: Day 4
module StringSet = Set.Make(String);
let arrayToStringSet = (arr) => StringSet.of_list(Array.to_list(arr));
let noDuplicates = (cardinal, pass) => {
let phrases = Js.String.split(" ", pass);
cardinal(arrayToStringSet(phrases)) == Array.length(phrases)
};
let part1 = (input) =>
Array.length(
Js.String.split("\n", input)
|> Array.map(noDuplicates(StringSet.cardinal))
|> Js.Array.filter((v) => v)
);
module Anagram = {
type t = string;
let compare = (s1, s2) => {
let sa1 = Js.Array.join(Js.Array.sortInPlace(Js.String.split("", s1)));
let sa2 = Js.Array.join(Js.Array.sortInPlace(Js.String.split("", s2)));
let result = sa1 == sa2 ? 0 : 1;
result
};
};
module AnagramSet = Set.Make(Anagram);
let arrayToAnnagramSet = (arr) => AnagramSet.of_list(Array.to_list(arr));
let noAnagrams = (pass) => {
let phrases = Js.String.split(" ", pass);
AnagramSet.cardinal(arrayToAnnagramSet(phrases)) == Array.length(phrases)
};
let part2 = (input) =>
Array.length(Js.String.split("\n", input) |> Array.map(noAnagrams) |> Js.Array.filter((v) => v));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment