Nguyen Anh Tien

I'm a monkey coder who trying to be more creative.

[TIL] Elixir with triangle-numbers

14 Oct 2016 » elixir, til

(Đúng ra phải là YIL - yesterday I learn, nhưng thôi kệ vậy)

Yêu cầu: cho một số x, viết function in ra mảng sau:

[[0], [1, 2], [3, 4, 5], ...]

Mảng con cuối cùng sẽ có chiều dài là x. Và đây là code python ban đầu của mình. Khá cùi bắp:

result = []
length = 0
for i in range(1, x + 1):
  result.append(range(i + length - i, i + length))
  length += i

ok, nếu xếp lại như sau:

   0
  1 2
 3 4 5
6 7 8 9

Nó sẽ thành tam giác, google thử dãy 0, 1, 3, 6 ra ngay cả triangular numberA000217. Vậy bọn này sẽ có công thức tổng quát là:

\(a(n) = n*(n+1)/2\) với \(n \geq 1\)

Tương tự phần tử cuối sẽ là:

\(b(n) = n*(n+1)/2 + n = n*(n+3)/2\) với \(n \geq 1\)

Giờ chuyển qua code:

def triangle_array(n) do
  Enum.map(0..n, fn(x) -> Enum.to_list round(x*(x+1)/2)..round(x*(x+3)/2) end)
end

Duy nhất 1 dòng, không cần biến tạm, so sexy !