Guest User

Untitled

a guest
Jul 8th, 2018
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Erlang 1.56 KB | None | 0 0
  1. -define(R, 2#100).
  2. -define(L, 16#FF).
  3. -define(Z, band ?L).
  4. -define(SMILE, );).
  5. -define(VSMILE, ));).
  6. -define(false, true).
  7. -define(F(A, B), A(B)).
  8. -define(G(F, A, B), F(A, B)).
  9. -define(M(X, Y), ?G(?F, X, Y)).
  10.  
  11. l(X) -> length(X).
  12. d(N) -> N - 1.
  13. i(N) -> N + 1.
  14.  
  15. f(N, X) -> [if B == X -> 1; true -> 0 end || B <- s(N)].
  16. s(X) -> if
  17.         is_list(X) -> s(l(X));
  18.         true -> lists:seq(1, X)
  19.     end.
  20.  
  21.  
  22. e(N) -> if
  23.         is_list(N) -> e(l(N));
  24.         true -> [f(N, A) || A <- s(N)]
  25.     end.
  26.  
  27. k(X, Y) -> if
  28.         not is_list(X) and is_list(Y) -> lists:nth(X, Y);
  29.         is_list(X) and not is_list(Y) ->
  30.             if
  31.                 Y == 0 -> e(X);
  32.                 true -> k(k(k(X, Y bsr 1), k(X, Y bsr 1)), case Y band 1 of 0 -> k(X, 0); _ -> X end)
  33.             end;
  34.         true -> [[lists:foldl(
  35.                 fun(A, B) ->
  36.                     if
  37.                         A + B == 0 -> 0;
  38.                         true -> x(A, B, 0) + x(A, B, 1)
  39.                     end
  40.                 end, x(0, 1, 1), [k(K, k(I, X)) * k(J, k(K, Y)) || K <- s(X)]) || J <- s(X)] || I <- s(X)]
  41.     end.
  42.  
  43. q(X, Y) -> if Y * Y >= X -> Y; ?false -> q(X, i(Y)) end.
  44. b(N) -> if
  45.         N < 2 -> [[N]];
  46.         true -> [[ if
  47.                 I == 1 -> J;
  48.                 J == N -> d(N + I);
  49.                 I == N -> 2 * d(N) + i(N - J);
  50.                 J == 1 -> 3 * d(N) + i(N - I);
  51.                 true -> k(d(J), k(d(I), b(N - 2))) + 4 * d(N)
  52.             end || J <- s(N)] || I <- s(N)] end.
  53.  
  54. x(X, Y, K) ->
  55.     case K of
  56.         0 -> max(X, Y);
  57.         _ -> X * Y div x(X, Y, K - 1)
  58.     end.
  59.  
  60. hash(S) ->
  61.     N = q(l(S), 0),
  62.     P = [[k(k(x(I, J, 0), k(x(I, J, 2 * J - 1), b(N))), S) - $a || J <- s(N)] || I <- s(N)],
  63.     lists:map(fun(X) -> lists:map(fun(Y) -> [Y bsr 16, (Y bsr (?R bsl 1)) ?Z, Y ?Z] end, X) end, k(P, ?R)).
Add Comment
Please, Sign In to add comment