Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env escript
- %%! -smp enable -sname van_eck -mnesia debug verbose
- -mode(compile).
- main([String]) ->
- try
- Number = list_to_integer(String),
- Result = upto(Number),
- io:format("~w~n",[Result])
- catch
- _:_ ->
- usage()
- end;
- main(_) ->
- usage().
- usage() ->
- io:setopts([{encoding, unicode}]),
- io:format("Usage:
- Prints Van Eck sequence up to ARG, starting from index 0.
- • ARG must be a positive integer.
- • Maximum 100000; 1000000 is pushing it.
- - ThinkPad X260: Intel(R) Core(TM) i5-6300U CPU @ 2.40GH, 4992.00 BogoMIPS, 7.6G RAM
- • Basic:
- $ escript van_eck 1000
- or:
- $ ./van_eck 1000
- • Formatted:
- $ ./van_eck (echo 1000 - 1 | bc) | sed 's/\\[\\|]//g;s/,/\\n/g' > filename
- • Graph results using R:
- > plot(as.numeric(unlist(scan(\"filename\", what=\"\", sep=\"\\n\"))), main=\"Van Eck Sequence\", ylab=\"x\", xlab=\"Index of x\", col=\"blue\", type=\"p\", pch=\".\")
- Try changing type to \"s\" or \"b\".
- "),
- halt(1).
- %% ╭─────────────╮
- %% │ START │
- %% ┝━━━━━━━━━━━━━┥
- %% │ FUNCTIONS │
- %% ╰─────────────╯
- upto(Number) ->
- upto(Number,[0]).
- upto(0, L) ->
- lists:reverse(L);
- upto(Number, [Head|Tail]) ->
- upto(Number - 1, [distance_to_prev(Head, Tail) | [Head|Tail]]).
- distance_to_prev(Number, List) ->
- distance_to_prev(Number, List, 0).
- distance_to_prev(_Number, [], _Count) ->
- 0;
- distance_to_prev(Number, [Number|_Tail], Count) ->
- Count + 1;
- distance_to_prev(Number, [_Head|Tail], Count) ->
- distance_to_prev(Number, Tail, Count + 1).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement