From c1455f980c4a93786edb77bd44c818a420086bba Mon Sep 17 00:00:00 2001 From: han Date: Wed, 22 May 2024 02:02:39 +0900 Subject: [PATCH] Week 4 solutions --- counting-bits/han.exs | 8 ++++++++ group-anagrams/han.exs | 31 +++++++++++++++++++++++++++++++ missing-number/han.exs | 6 ++++++ number-of-1-bits/han.exs | 6 ++++++ reverse-bits/han.rb | 6 ++++++ 5 files changed, 57 insertions(+) create mode 100644 counting-bits/han.exs create mode 100644 group-anagrams/han.exs create mode 100644 missing-number/han.exs create mode 100644 number-of-1-bits/han.exs create mode 100644 reverse-bits/han.rb diff --git a/counting-bits/han.exs b/counting-bits/han.exs new file mode 100644 index 000000000..9d40a77e3 --- /dev/null +++ b/counting-bits/han.exs @@ -0,0 +1,8 @@ +defmodule Solution do + @spec count_bits(n :: integer) :: [integer] + def count_bits(n) do + Enum.map(0..n, fn i -> + Integer.digits(i, 2) |> Enum.count(&(&1 != 0)) + end) + end +end diff --git a/group-anagrams/han.exs b/group-anagrams/han.exs new file mode 100644 index 000000000..5cab1649d --- /dev/null +++ b/group-anagrams/han.exs @@ -0,0 +1,31 @@ +defmodule Solution do + @spec group_anagrams(strs :: [String.t]) :: [[String.t]] + def group_anagrams(strs) do + Enum.group_by(strs, &(String.codepoints(&1) |> Enum.sort)) |> Map.values + end +end + +# 최초엔 아래 코드로 시도했으나 strs.length가 커지면 시간초과... +# +# defmodule Solution do +# @spec group_anagrams(strs :: [String.t]) :: [[String.t]] +# def group_anagrams(strs) when length(strs) < 2, do: [strs] +# def group_anagrams([], res), do: res + +# def group_anagrams([head|tail], res \\ []) do +# split_sort_head = split_sort(head) +# anagrams = Enum.reduce(tail, [head], fn x, acc -> +# if split_sort(x) == split_sort_head do +# acc ++ [x] +# else +# acc +# end +# end) + +# group_anagrams(tail -- anagrams, [anagrams|res]) +# end + +# defp split_sort(str) do +# String.graphemes(str) |> Enum.sort_by(&(&1), :asc) +# end +# end diff --git a/missing-number/han.exs b/missing-number/han.exs new file mode 100644 index 000000000..ac15b4781 --- /dev/null +++ b/missing-number/han.exs @@ -0,0 +1,6 @@ +defmodule Solution do + @spec missing_number(nums :: [integer]) :: integer + def missing_number(nums) do + (0..length(nums) |> Enum.to_list) -- nums |> Enum.at(0) + end +end diff --git a/number-of-1-bits/han.exs b/number-of-1-bits/han.exs new file mode 100644 index 000000000..1a0ffbe03 --- /dev/null +++ b/number-of-1-bits/han.exs @@ -0,0 +1,6 @@ +defmodule Solution do + @spec hamming_weight(n :: integer) :: integer + def hamming_weight(n) do + Integer.to_string(n, 2) |> String.graphemes |> Enum.count(& &1 != "0") + end +end diff --git a/reverse-bits/han.rb b/reverse-bits/han.rb new file mode 100644 index 000000000..2468309b3 --- /dev/null +++ b/reverse-bits/han.rb @@ -0,0 +1,6 @@ +# @param {Integer} n, a positive integer +# @return {Integer} +def reverse_bits(n) + # 이유는 모르겠으나 문제 설명과는 달리 leetcode 루비 테스트코드에선 n이 10진수 Integer로 들어오네요. + n.to_s(2).rjust(32,'0').reverse.to_i(2) +end