erlang实现简单麻将胡牌算法

%%%-------------------------------------------------------------------
%%% @author li
%%% @copyright (C) 2018, <COMPANY>
%%% @doc
%%%
%%% @end
%%% Created : 13. 四月 2018 13:37
%%%-------------------------------------------------------------------
-module(majiang).
-author("li").

-include("server.hrl").
-include("common.hrl").
-include("majiang.hrl").
-define(MAJIANG_INIT_LIST, [1,2,3,4,5,6,7,8,9,1,2,3,4,5,6,7,8,9,1,2,3,4,5,6,7,8,9,1,2,3,4,5,6,7,8,9,11,12,13,14,15,16,17,18,19,11,12,13,14,15,16,17,18,19,11,12,13,14,15,16,17,18,19,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,21,22,23,24,25,26,27,28,29,21,22,23,24,25,26,27,28,29,21,22,23,24,25,26,27,28,29,31,32,33,34,35,36,37,38,39,31,32,33,34,35,36,37,38,39,31,32,33,34,35,36,37,38,39,31,32,33,34,35,36,37,38,39,41,42,43,44,45,46,47,41,42,43,44,45,46,47,41,42,43,44,45,46,47,41,42,43,44,45,46,47]).
%% API
-export([check_he/1]).

%% 满足算法n*AAA+m*ABC+DD=14
check_he(List) ->
    List1 = lists:sort(List),
    d2(List1, []).

d2([], _L1) -> false;
d2([_A], _L1) -> false;
d2([A, A | L], L1) ->
    case d3(lists:reverse(L1) ++ L) of
        true -> true;
        false -> d2([A | L], [A | L1])
    end;
d2([A, B | L], L1) -> d2([B | L], [A | L1]).

d3([]) -> true;
d3([_A]) -> false;
d3([_A, _B]) -> false;
d3([A, A, A]) -> true;
d3([A, B, C]) when A < 40 ->
    if
        B - A == 1 andalso C - B == 1 -> true;
        true -> false
    end;
d3([_A, _B, _C]) -> false;
d3([A, A, A | L]) -> d3(L);
d3([A, B, B, C, C, D | L]) when A < 40 ->
    if
        B - A == 1 andalso C - B == 1 andalso D - C == 1 -> d3(L);
        true -> false
    end;
d3([A, A, B, B, C, C | L]) when A < 40 ->
    if
        B - A == 1 andalso C - B == 1 -> d3(L);
        true -> false
    end;
d3([A, B, C | L]) when A < 40 ->
    if
        B - A == 1 andalso C - B == 1 -> d3(L);
        true -> false
    end;
d3(_List) -> false.

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值