如何在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张牌中的所有牌都是连续值. 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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |