Packages
krug
1.0.9
2.0.36
2.0.35
2.0.34
2.0.33
2.0.32
2.0.31
2.0.30
2.0.29
2.0.27
2.0.26
2.0.25
2.0.24
2.0.23
2.0.22
2.0.20
2.0.19
2.0.18
2.0.17
2.0.16
2.0.15
2.0.14
2.0.13
2.0.12
2.0.11
2.0.10
2.0.9
2.0.8
2.0.7
2.0.6
2.0.5
2.0.4
2.0.1
2.0.0
1.1.53
1.1.52
1.1.50
1.1.49
1.1.48
1.1.47
1.1.46
1.1.45
1.1.44
1.1.43
1.1.42
1.1.41
1.1.40
1.1.39
1.1.38
1.1.37
1.1.36
1.1.35
1.1.34
1.1.33
1.1.32
1.1.31
1.1.30
1.1.29
1.1.28
1.1.27
1.1.26
1.1.25
1.1.24
1.1.23
1.1.22
1.1.21
1.1.20
1.1.19
1.1.18
1.1.17
1.1.16
1.1.15
1.1.14
1.1.12
1.1.10
1.1.9
1.1.8
1.1.7
1.1.6
1.1.5
1.1.4
1.1.3
1.1.2
1.1.1
1.1.0
1.0.9
1.0.8
1.0.7
1.0.6
1.0.5
1.0.4
1.0.3
1.0.2
1.0.1
1.0.0
0.5.5
0.5.4
0.5.3
0.5.2
0.5.1
0.5.0
0.4.31
0.4.30
0.4.29
0.4.28
0.4.27
0.4.26
0.4.25
0.4.24
0.4.23
0.4.22
0.4.20
0.4.19
0.4.18
0.4.17
0.4.16
0.4.15
0.4.14
0.4.13
0.4.12
0.4.11
0.4.10
0.4.9
0.4.8
0.4.7
0.4.6
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.3.9
0.3.8
0.3.7
0.3.6
0.3.5
0.3.4
0.3.3
0.3.2
0.3.1
0.3.0
0.2.1
0.2.0
0.1.0
A Utilitary package functionalities modules for improve a secure performatic development.
Current section
Files
Jump to
Current section
Files
lib/krug/util/array.util.ex
defmodule Krug.ArrayUtil do
@moduledoc """
Utilitary module to handle array transformations.
"""
@doc """
Rotates an ```array``` X ```positions``` in direction from left to right.
A initial array [1,2,3,4] turn in [2,3,4,1] if rotate ```positions``` equal
to 1.
## Examples
```elixir
iex > Krug.ArrayUtil.rotate_right(nil,1)
nil
```
```elixir
iex > Krug.ArrayUtil.rotate_right([],1)
[]
```
```elixir
iex > Krug.ArrayUtil.rotate_right([1],2)
[1]
```
```elixir
iex > Krug.ArrayUtil.rotate_right([1,2,3,4],nil)
[1,2,3,4]
```
```elixir
iex > Krug.ArrayUtil.rotate_right([1,2,3,4],1)
[2,3,4,1]
```
```elixir
iex > Krug.ArrayUtil.rotate_right([1,2,3,4],3)
[4,1,2,3]
```
"""
@doc since: "0.4.3"
def rotate_right(array,positions) do
cond do
(nil == array or Enum.empty?(array)) -> array
(nil == positions or !(positions > 0)) -> array
true -> rotate_right2(array,positions)
end
end
@doc """
Rotates an ```array``` X ```positions``` in direction from right to left.
A initial array [1,2,3,4] turn in [4,1,2,3] if rotate ```positions``` equal
to 1.
## Examples
```elixir
iex > Krug.ArrayUtil.rotate_left(nil,1)
nil
```
```elixir
iex > Krug.ArrayUtil.rotate_left([],1)
[]
```
```elixir
iex > Krug.ArrayUtil.rotate_left([1],2)
[1]
```
```elixir
iex > Krug.ArrayUtil.rotate_left([1,2,3,4],1)
[4,1,2,3]
```
```elixir
iex > Krug.ArrayUtil.rotate_left([1,2,3,4],3)
[2,3,4,1]
```
"""
@doc since: "0.4.3"
def rotate_left(array,positions) do
cond do
(nil == array or Enum.empty?(array)) -> array
(nil == positions or !(positions > 0)) -> array
true -> rotate_left2(array,positions)
end
end
defp rotate_right2(array,positions) do
size = length(array)
remainder = rem(positions,size)
cond do
(remainder == 0 or size < 2) -> array
true -> rotate_right_positions(array,remainder,0)
end
end
defp rotate_left2(array,positions) do
size = length(array)
remainder = rem(positions,size)
cond do
(remainder == 0 or size < 2) -> array
true -> rotate_left_positions(array,remainder,0)
end
end
defp rotate_right_positions(array,positions,count) do
cond do
(count >= positions) -> array
true -> rotate_right_one_position(array) |> rotate_right_positions(positions,count + 1)
end
end
defp rotate_right_one_position(array) do
[(array |> hd()) | (array |> tl() |> Enum.reverse())] |> Enum.reverse()
end
defp rotate_left_positions(array,positions,count) do
cond do
(count >= positions) -> array
true -> rotate_left_one_position(array) |> rotate_left_positions(positions,count + 1)
end
end
defp rotate_left_one_position(array) do
array = array |> Enum.reverse()
[(array |> hd()) | (array |> tl() |> Enum.reverse())]
end
end