加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何在Ruby中检查数组中的范围?

发布时间:2020-12-17 04:02:15 所属栏目:百科 来源:网络整理
导读:我正在写一个扑克计划,我无法弄清楚如何处理直道. 直接:5张牌中的所有牌都是连续值. 恩. 2..6,3..7,4..8,5..9,6..T,7..J,8..Q,9..K,T..A cards = [2,3,4,5,6,7,8,9,"T","J","Q","K","A"] 如何检查这些组合的手,这是一个数组?我最好能检查它是否在卡阵列中
我正在写一个扑克计划,我无法弄清楚如何处理直道.

直接:5张牌中的所有牌都是连续值.
恩. 2..6,3..7,4..8,5..9,6..T,7..J,8..Q,9..K,T..A

cards = [2,3,4,5,6,7,8,9,"T","J","Q","K","A"]

如何检查这些组合的手,这是一个数组?我最好能检查它是否在卡阵列中连续5行.

解决方法

编辑2:这是我绝对的最终解决方案:

require 'set'
STRAIGHTS = ['A',*2..9,'T','J','Q','K','A'].each_cons(5).map(&:to_set)
  #=> [#<Set: {"A",2,5}>,#<Set: {2,6}>,#   ...#<Set: {9,"K"}>,#<Set: {"T","A"}>]

def straight?(hand)
  STRAIGHTS.include?(hand.to_set)
end

STRAIGHTS.include?([6,2].to_set)
  # STRAIGHTS.include?(#<Set: {6,2}>)
  #=> true 

straight?([6,2])            #=> true 
straight?(["T","A"])  #=> true 
straight?(["A","T"])  #=> true
straight?([2,"A"])          #=> true 

straight?([6,"J"])          #=> false 
straight?(["J","T"])        #=> false

编辑1:@mudasobwa通过指出’A’,5是有效的直线来扰乱苹果车.我相信我已经解决了问题. (我相信他不会告诉我’K’,’A’,4也是有效的.)

我建议如下:

CARDS     = [2,"A"]
STRAIGHTS = CARDS.each_cons(5).to_a
  #=>[[2,6],[3,7],[4,8],#   [5,9],[6,"T"],[7,"J"],#   [8,"Q"],[9,"K"],#   ["T","A"]] 

def straight?(hand)
  (hand.map {|c| CARDS.index(c)}.sort == [0,1,12]) ||
  STRAIGHTS.include?(hand.sort {|a,b| CARDS.index(a) <=> CARDS.index(b)})
end

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读