打麻将 - 基于R语言

新年第一更

for (k in 1:1000){

 #万字,筒子,条子
  pai=c(1:9,11:19,21:29)
  mj=c(pai,pai,pai,pai)

  jiepai=sample(mj,13*4,replace=FALSE)

  a=sort(jiepai[1:13])
  b=sort(jiepai[14:(13*2)])
  c=sort(jiepai[27:(13*3)])
  d=sort(jiepai[40:(13*4)])

  leftpai=function(mj,x){
    for (i in 1:length(x))
    {
    mj=mj[-match(x[i],mj)]
    }
    return(mj)
  }
  mjleft=leftpai(mj,jiepai)

  #打掉跟其他字差异最大的字
  droppai=function(x){
    sumdif=c()
    for (i in 1:length(x)){
      sumdif[i]=sum((x[i]-x[-i])**2)+i/100
    }
    tablepai=data.frame(x,sumdif)
    tablepai[sumdif==max(sumdif),]=NA
    x=as.numeric(na.omit(tablepai$x))
    return(x)
  }

  #一个对子,四个句子或者刻子即胡牌
  hupai=function(x){
    tmp=c()
    hupai=0

    for (i in seq(1,13,3)){
      if (((i!=13) & (x[i]==x[i+1]) & (x[i+1] !=x[i+2])) || ((i==13) & (x[i]==x[i+1]))) {
        tmp=x[c(-i,-(i+1))]
        hupai=hupai++1
        if (hupai>0) {break}
      }
    }

    if (hupai==1) {
      for (i in seq(2,11,3)){
        if (
             ((tmp[i]-tmp[i-1]==1) & (tmp[i+1]-tmp[i]==1)) ||
             ((tmp[i]-tmp[i-1]==0) & (tmp[i+1]-tmp[i]==0))
           )
           {hupai=hupai++1}
      }
    }

    return(hupai)
  }

  #开始打牌
  for (i in 0:ceiling(length(mjleft)/4-1)){
    a=sort(c(a,mjleft[1+4*i]))
    b=sort(c(b,mjleft[2+4*i]))
    c=sort(c(c,mjleft[3+4*i]))
    d=sort(c(d,mjleft[4+4*i]))
    sumA=sum(a)
    sumB=sum(b)
    sumC=sum(c)
    sumD=sum(d)
         if ((hupai(a)==5) & (sumA%%3==2)) {print("player a win");print(sort(a));print(i);break}
    else if ((hupai(b)==5) & (sumB%%3==2)) {print("player b win");print(sort(b));print(i);break}
    else if ((hupai(c)==5) & (sumC%%3==2)) {print("player c win");print(sort(c));print(i);break}
    else if ((hupai(d)==5) & (sumD%%3==2)) {print("player d win");print(sort(d));print(i);break}

    a=droppai(a)
    b=droppai(b)
    c=droppai(c)
    d=droppai(d)

    if (i==ceiling(length(mjleft)/4-1)) {print("No one wins")}
  }

}

不能吃,不能碰,只能自摸,打了1000盘只有不到20盘胡牌。。。看来打牌还是需要多吃多碰(另外代码肯定需要改进……)

[1] "No one wins"
[1] "No one wins"
[1] "player b win"
 [1] 12 12 12 16 17 18 19 19 21 22 23 26 27 28
[1] 5

[1] "No one wins"
[1] "player a win"
 [1] 13 13 16 17 18 21 22 23 24 25 26 27 27 27
[1] 7
[1] "No one wins"
[1] "No one wins"

[1] "No one wins"
[1] "No one wins"
[1] "player b win"
 [1] 16 17 18 21 22 23 24 24 24 25 25 26 27 28
[1] 11
[1] "No one wins"
[1] "No one wins"

[1] "No one wins"
[1] "player a win"
 [1] 15 15 15 16 17 18 19 19 22 22 22 23 24 25
[1] 12
[1] "No one wins"

...

祝大家新年行大运

by yant07

时间: 2025-01-31 06:44:49

打麻将 - 基于R语言的相关文章

中文分词实践(基于R语言)

背景:分析用户在世界杯期间讨论最多的话题. 思路:把用户关于世界杯的帖子拉下来,然后做中文分词+词频统计,最后将统计结果简单做个标签云,效果如下: 后续:中文分词是中文信息处理的基础,分词之后,其实还有特别多有趣的文本挖掘工作可以做,也是个知识发现的过程,以后有机会再学习下. ================================================== * 中文分词常用实现: 单机:R语言+Rwordseg分词包 (建议数据量<1G) 分布式:Hadoop+Smallse

分享《深度学习精要(基于R语言)》+PDF+源码+Joshua F.Wiley+高蓉

下载:https://pan.baidu.com/s/14UlxD5VJRY92UpP7Wr6Taw 更多最新的资料:http://blog.51cto.com/14087171 <深度学习精要(基于R语言)>高清中文版PDF+高清英文版PDF+源代码 高清中文版PDF,带目录和书签,能够复制粘贴:高清英文版PDF,带目录和书签,能够复制粘贴:中英文两版可以对比学习. 配套源代码: 经典书籍,讲解详细: 其中高清中文版如图 原文地址:http://blog.51cto.com/14087171

逻辑回归算法实现_基于R语言

逻辑回归(Logistic Regression)模型和线性回归非常相似,可以说就是在逻辑回归的基础上加上了一步逻辑转换,也就是因为这个转换,使逻辑回归模型非常适用于二分类问题的概率预测.本文主要详述逻辑回归模型的基础以及逻辑回归模型的R语言实现. 一.逻辑回归模型原理 首先要讲一下线性回归在预测分类事件中的缺点:线性回归模型的泛化能力很差,如果训练集存在噪点,会导致模型的结果特别差,不同样本建立起来的模型分割点不同:下图中根据年龄预测是否成年的分类问题,斜线就是根据训练集拟合出来的线性回归模型

机器学习-线性回归(基于R语言)

基本概念 利用线性的方法,模拟因变量与一个或多个自变量之间的关系.自变量是模型输入值,因变量是模型基于自变量的输出值. 因变量是自变量线性叠加和的结果. 线性回归模型背后的逻辑——最小二乘法计算线性系数 最小二乘法怎么理解? 它的主要思想就是求解未知参数,使得理论值与观测值之差(即误差,或者说残差)的平方和达到最小.在这里模型就是理论值,点为观测值.使得拟合对象无限接近目标对象. 一元线性回归与多元线性回归 自变量只有一个的时候叫一元线性回归,自变量有多个时候叫多元线性回归. R语言实现 bik

基于R语言的数据分析和挖掘方法总结——均值检验

2.1 单组样本均值t检验(One-sample t-test) 2.1.1 方法简介 t检验,又称学生t(student t)检验,是由英国统计学家戈斯特(William Sealy Gosset, 1876-1937)所提出,student则是他的笔名.t检验是一种检验总体均值的统计方法,当数据中仅含单组样本且样本数较大时(通常样本个数≧30的样本可视为样本数较大),可用这种方法来检验总体均值是否大于.小于或等于某一特定数值.当数据中仅含单组样本但样本数较小时(通常样本个数<30的样本可视为

基于R语言的数据分析和挖掘方法总结——描述性统计

1.1 方法简介 描述性统计包含多种基本描述统计量,让用户对于数据结构可以有一个初步的认识.在此所提供之统计量包含: 基本信息:样本数.总和 集中趋势:均值.中位数.众数 离散趋势:方差(标准差).变异系数.全距(最小值.最大值).内四分位距(25%分位数.75%分位数) 分布描述:峰度系数.偏度系数 用户可选择多个变量同时进行计算,亦可选择分组变量进行多组别的统计量计算. 1.2 详细介绍 1.2.1 样本数和总和 1. R语言涉及的方法:length(x) 1.2.2 均值(Mean) 1.

基于R语言的梯度推进算法介绍

通常来说,我们可以从两个方面来提高一个预测模型的准确性:完善特征工程(feature engineering)或是直接使用Boosting算法.通过大量数据科学竞赛的试炼,我们可以发现人们更钟爱于Boosting算法,这是因为和其他方法相比,它在产生类似的结果时往往更加节约时间. Boosting算法有很多种,比如梯度推进(Gradient Boosting).XGBoost.AdaBoost.Gentle Boost等等.每一种算法都有自己不同的理论基础,通过对它们进行运用,算法之间细微的差别

机器学习-K-means聚类及算法实现(基于R语言)

K-means聚类 将n个观测点,按一定标准(数据点的相似度),划归到k个聚类(用户划分.产品类别划分等)中. 重要概念:质心 K-means聚类要求的变量是数值变量,方便计算距离. 算法实现 R语言实现 k-means算法是将数值转换为距离,然后测量距离远近进行聚类的.不归一化的会使得距离非常远. 补充:scale归一化处理的意义 两个变量之间数值差别太大,比如年龄与收入的数值差别就很大. 步骤 第一步,确定聚类数量,即k的值 方法:肘部法则+实际业务需求 第二步,运行K-means模型 第三

基于R语言的用户分析

1. 基本分析理论 C5.0是决策树模型中的算法,79年由J R Quinlan发展,并提出了ID3算法,主要针对离散型属性数据,其后又不断的改进,形成C4.5,它在ID3基础上增加了队连续属性的离散化.C5.0是C4.5应用于大数据集上的分类算法,主要在执行效率和内存使用方面进行了改进.C4.5算法是ID3算法的修订版,采用GainRatio来加以改进方法,选取有最大GainRatio的分割变量作为准则,避免ID3算法过度配适的问题.C5.0算法则是C4.5算法的修订版,适用于处理大数据集,采