-module(cogging).
-export([koalakoskie/1]).

%% Returns a koalakosksokigei sequence with length at least N.
koalakoskie(0) -> [];
koalakoskie(1) -> [1];
koalakoskie(2) -> [1,2];
koalakoskie(N) -> expand_until_length(N, [1,2]).

expand_until_length(N,L)
	when is_integer(N), length(L) >= N
		-> L;
expand_until_length(N,L)
	when is_integer(N), N >= 0
		-> expand_until_length(N,expand(L)).

flip(1) -> 2; flip(2) -> 1.

expand(L) -> expand_with(1,L).
expand_with(X,[1|T]) -> [X|expand_with(flip(X),T)];
expand_with(X,[2|T]) -> [X,X|expand_with(flip(X),T)];
expand_with(_,[]) -> [].

main(_) ->
	{L,_}=lists:split(100,koalakoskie(100)),
	io:format("one hundered values of it:~n~p~n",[L]).
