Quick actions

cmd+k|ctrl+k

Navigation

Languages

aoc2017-day17-2-elx

Snippet info

Language

Elixir

Visibility

public

Author

christophe.guillon.perso

Created

2017-12-17T15:31:00Z

Updated

2017-12-17T15:31:00Z

defmodule Main do
    def next_position(pos, offset, current) do
        rem(pos + offset, current) + 1
    end
    
    def next_all(current, pos, new, offset) do
        i = current + 1
        next = next_position(pos, offset, i)
        if next == 1, do: new = i
        { i, next, new }
    end

    def stream_generate(offset) do
        first = { 1, next_position(0, offset, 1), 1 }
        Stream.iterate(first,
            fn {i, p, new} -> next_all(i,p,new,offset) end)
    end
end

input = 348
num = 50000000
Main.stream_generate(input)
|> Stream.drop(num-1)
|> Stream.take(1)
|> Enum.to_list
|> IO.inspect
INFO