diff options
-rw-r--r-- | erlang/double.erl | 5 | ||||
-rw-r--r-- | erlang/keywords.erl | 6 | ||||
-rw-r--r-- | erlang/shopping.erl | 4 | ||||
-rw-r--r-- | erlang/ttt.erl | 39 |
4 files changed, 54 insertions, 0 deletions
diff --git a/erlang/double.erl b/erlang/double.erl new file mode 100644 index 0000000..55d1f47 --- /dev/null +++ b/erlang/double.erl @@ -0,0 +1,5 @@ +-module(double). +-export([double_all/1]). + +double_all([]) -> []; +double_all([H|T]) -> [H+H | double_all(T)]. diff --git a/erlang/keywords.erl b/erlang/keywords.erl new file mode 100644 index 0000000..ec0648f --- /dev/null +++ b/erlang/keywords.erl @@ -0,0 +1,6 @@ +-module(keywords). +-export([keywords/2]). + +keywords(_, []) -> nil; +keywords(Key, [{Key,Value}|_]) -> Value; +keywords(Key, [_|T]) -> keywords(Key, T). diff --git a/erlang/shopping.erl b/erlang/shopping.erl new file mode 100644 index 0000000..e1cc4f4 --- /dev/null +++ b/erlang/shopping.erl @@ -0,0 +1,4 @@ +-module(shopping). +-export([shopping/1]). + +shopping(List) -> [{Item, Quant*Price} || {Item, Quant, Price} <- List]. diff --git a/erlang/ttt.erl b/erlang/ttt.erl new file mode 100644 index 0000000..0be7890 --- /dev/null +++ b/erlang/ttt.erl @@ -0,0 +1,39 @@ +-module(ttt). +-export([ttt/1]). + +isPlayer(x) -> true; +isPlayer(o) -> true; +isPlayer(_) -> false. + +winner(Board) -> + IsSamePlayer = fun(L) -> + case L of + [P,P,P] -> isPlayer(P); + _ -> false + end + end, + + Scheme = lists:zip3([1,1,1,2,2,2,3,3,3], [1,2,3,1,2,3,1,2,3], Board), + Rows = lists:map( + fun(Idx) -> [Val || {Row,_,Val} <- Scheme, Row == Idx] end, + [1,2,3]), + Cols = lists:map( + fun(Idx) -> [Val || {_,Col,Val} <- Scheme, Col == Idx] end, + [1,2,3]), + Diags = [[Val || {Row,Col,Val} <- Scheme, Row == Col], + [Val || {Row,Col,Val} <- Scheme, Row+Col == 4]], + Winner = lists:filter(IsSamePlayer, lists:concat([Rows, Cols, Diags])), + case Winner of + [] -> no; + [[W,W,W]] -> W; + _ -> error + end. + +ttt(Board) -> + Winner = winner(Board), + SpacesLeft = lists:any(fun(C) -> C == sp end, Board), + if + Winner /= no -> Winner; + SpacesLeft -> no_winner; + true -> cat + end. |