Advertisement
Guest User

Van Eck sequence escript

a guest
Jun 10th, 2019
148
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Erlang 1.66 KB | None | 0 0
  1. #!/usr/bin/env escript
  2. %%! -smp enable -sname van_eck -mnesia debug verbose
  3. -mode(compile).
  4.  
  5. main([String]) ->
  6.     try
  7.     Number = list_to_integer(String),
  8.     Result = upto(Number),
  9.     io:format("~w~n",[Result])
  10.     catch
  11.     _:_ ->
  12.         usage()
  13.     end;
  14. main(_) ->
  15.     usage().
  16.  
  17. usage() ->
  18.     io:setopts([{encoding, unicode}]),
  19.     io:format("Usage:
  20. Prints Van Eck sequence up to ARG, starting from index 0.
  21. • ARG must be a positive integer.
  22. • Maximum 100000; 1000000 is pushing it.
  23.    - ThinkPad X260: Intel(R) Core(TM) i5-6300U CPU @ 2.40GH, 4992.00 BogoMIPS, 7.6G RAM
  24.  
  25. • Basic:
  26.    $ escript van_eck 1000
  27.   or:
  28.    $ ./van_eck 1000
  29.  
  30. • Formatted:
  31.    $ ./van_eck (echo 1000 - 1 | bc) | sed 's/\\[\\|]//g;s/,/\\n/g' > filename
  32.  
  33. • Graph results using R:
  34.    > plot(as.numeric(unlist(scan(\"filename\", what=\"\", sep=\"\\n\"))), main=\"Van Eck Sequence\", ylab=\"x\", xlab=\"Index of x\", col=\"blue\", type=\"p\", pch=\".\")
  35.   Try changing type to \"s\" or \"b\".
  36. "),
  37.     halt(1).
  38.  
  39. %% ╭─────────────╮
  40. %% │    START    │
  41. %% ┝━━━━━━━━━━━━━┥
  42. %% │  FUNCTIONS  │
  43. %% ╰─────────────╯
  44.  
  45. upto(Number) ->
  46.     upto(Number,[0]).
  47. upto(0, L) ->
  48.     lists:reverse(L);
  49. upto(Number, [Head|Tail]) ->
  50.     upto(Number - 1, [distance_to_prev(Head, Tail) | [Head|Tail]]).
  51.  
  52. distance_to_prev(Number, List) ->
  53.     distance_to_prev(Number, List, 0).
  54. distance_to_prev(_Number, [], _Count) ->
  55.     0;
  56. distance_to_prev(Number, [Number|_Tail], Count) ->
  57.     Count + 1;
  58. distance_to_prev(Number, [_Head|Tail], Count) ->
  59.     distance_to_prev(Number, Tail, Count + 1).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement