Skip to content

Instantly share code, notes, and snippets.

@ninjapanzer
Last active August 29, 2015 14:19
Show Gist options
  • Save ninjapanzer/b610852ebc86def4ee0f to your computer and use it in GitHub Desktop.
Save ninjapanzer/b610852ebc86def4ee0f to your computer and use it in GitHub Desktop.
Hacker Rank Maximize XOR Erlang
-module(maximize_xor).
-export([main/0, test/0]).
-import(lists, [map/2, seq/2]).
main() ->
I = {inputs, [2,4]},
{inputs, [START|[STOP|_]]} = I,
EXPANDED_GROUP = lists:seq(START,STOP),
GROUPS = organize(EXPANDED_GROUP),
MAX = maximize_bxor(GROUPS, 0),
log(MAX).
organize(COUNTS) ->
process(COUNTS, []).
log(MSG) -> io:format("~w~n",[MSG]).
%For HackerRank
inputs() ->
{ok, [L, R]} = io:fread("", "~d~d"),
{inputs, [L, R]}.
process([H|T], THUSFAR) ->
THUSFAR1 = THUSFAR ++ lists:map(
fun(X)-> {group,[H,X]} end, [H]++T
),
process(T,THUSFAR1);
process([], THUSFAR) -> THUSFAR.
maximize_bxor([H|T], MAX) ->
{group,[A,B]} = H,
MAX1 = A bxor B,
if
MAX1 > MAX ->
MAX2 = MAX1;
true ->
MAX2 = MAX
end,
maximize_bxor(T, MAX2);
maximize_bxor([], MAX) -> MAX.
test() ->
[
{group, {result, group_test()} },
{maximize_2_4, {result, maximize_xor_test1()} },
{maximize_1_10, {result, maximize_xor_test2()} }
].
group_test() ->
Y = [2,3,4],
[{group,[2,2]},{group,[2,3]},{group,[2,4]},{group,[3,3]},{group,[3,4]},{group,[4,4]}] = organize(Y),
success.
maximize_xor_test1() ->
GROUPS = [{group,[2,2]},{group,[2,3]},{group,[2,4]},{group,[3,3]},{group,[3,4]},{group,[4,4]}],
7 = maximize_bxor(GROUPS, 0),
success.
maximize_xor_test2() ->
GROUPS = [
{group,[1,1]},{group,[1,2]},{group,[1,3]},{group,[1,4]},{group,[1,5]},{group,[1,6]},{group,[1,7]},{group,[1,8]},{group,[1,9]},{group,[1,10]},
{group,[2,2]},{group,[2,3]},{group,[2,4]},{group,[2,5]},{group,[2,6]},{group,[2,7]},{group,[2,8]},{group,[2,9]},{group,[2,10]},
{group,[3,3]},{group,[3,4]},{group,[3,5]},{group,[3,6]},{group,[3,7]},{group,[3,8]},{group,[3,9]},{group,[3,10]},
{group,[4,4]},{group,[4,5]},{group,[4,6]},{group,[4,7]},{group,[4,8]},{group,[4,9]},{group,[4,10]},
{group,[5,5]},{group,[5,6]},{group,[5,7]},{group,[5,8]},{group,[5,9]},{group,[5,10]},
{group,[6,6]},{group,[6,7]},{group,[6,8]},{group,[6,9]},{group,[6,10]},
{group,[7,7]},{group,[7,8]},{group,[7,9]},{group,[7,10]},
{group,[8,8]},{group,[8,9]},{group,[8,10]},
{group,[9,9]},{group,[9,10]},
{group,[10,10]}
],
15 = maximize_bxor(GROUPS, 0),
success.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment