SMFloris
Hackerrank optimizing euler problem #1
Hello everyone,
I spent my weekend optimising the first problem and learned allot in the process about Elixir. I got to 80 points, but still the third hidden test is timing out. Can anyone take a look at the code bellow and give me some pointers on how to improve the performance of the algorithm?
You can find the solution bellow; notice that I tried to parallelise as much as I could where it made sense (i.e. the solution is being computed as you input the numbers, in parallel). I don’t have allot of experience with Elixir so I would appreciate a helping hand.
defmodule Solution do
def calculateFinalSum([{:ok, a}, {:ok, b}, {:ok, c}]) do
a+b-c
end
def dividedSum(n, dividend) do
p = div(n-1, dividend)
div(dividend * p * (p+1), 2)
end
def solveOne(n) do
{number, _} = Integer.parse(n)
Task.async_stream([3,5,15], &(Solution.dividedSum(number, &1)))
|> Enum.to_list
|> Solution.calculateFinalSum
end
def solve() do
IO.gets("")
IO.stream(:stdio, :line)
|> Task.async_stream(&(Solution.solveOne(&1)))
|> Enum.each(fn {:ok, n} -> IO.puts(n) end)
end
end
Solution.solve
Most Liked
idi527
![]()
Tasks seem unnecessary here. They probably cost more than the value they add over sequentially calling dividedSum/2.
AlchemistCamp
Most Project Euler questions revolve around mathematical insight. This particular question has an O(1) solution!
A hint to point you in the right direction is to consider “triangle numbers”, or the 3rd line of Pascal’s triangle. The sum of all the numbers between 0 and 100 can be thought of as (0 + 100) + (1 + 99) + (2 + 98) + (3 + 97) … + (49 + 51) + 50. Using this sort of procedure, you can find the sum of any sequence of whole numbers from 0 to n by this equation:
(n^2)/2 + n/2, which is the same as n(n + 1) / 2
Can you think of a way to find the sum of all the numbers from 0 to n that are divisible by 3? Or the numbers divisible by 5? Or 15?
SMFloris
Popular in Challenges
Other popular topics
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #deployment
- #library
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #channels
- #elixirconf
- #exunit
- #discussion
- #code-sync
- #javascript
- #podcasts
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #elixir-ls
- #phoenix_html
- #iex
- #blog-post
- #graphql
- #genstage
- #ai
- #websockets
- #supervisor
- #elixirconf-us
- #advent-of-code
- #distillery
- #processes
- #api
- #forms
- #metaprogramming
- #security
- #hex










