diff --git "a/\344\271\235\350\241\214\346\250\241\345\274\217\345\214\271\351\205\215\350\247\204\345\210\231\347\247\222\346\235\200ProjectEuler 54\351\242\230-ShowHand.md" "b/\344\271\235\350\241\214\346\250\241\345\274\217\345\214\271\351\205\215\350\247\204\345\210\231\347\247\222\346\235\200ProjectEuler 54\351\242\230-ShowHand.md" new file mode 100644 index 0000000000000000000000000000000000000000..8b422b6af2bab86ccf50b167787d4b572908df9b --- /dev/null +++ "b/\344\271\235\350\241\214\346\250\241\345\274\217\345\214\271\351\205\215\350\247\204\345\210\231\347\247\222\346\235\200ProjectEuler 54\351\242\230-ShowHand.md" @@ -0,0 +1,32 @@ +语言:Wolfram + +--- + +导入数据 +``` +data = Characters[ + Partition[#, 5] & /@ Import["p054_poker.txt", "Table"] +] /. Thread[Characters@"23456789TJQKA" -> Range@13]; +``` +给出规则 +``` +consecutiveQ = Differences@Sort@#[[;;, 1]] === {1,1,1,1} &; +pickMaxValue = Max@#[[;;, 1]] &; + +rules = { + straightFlush:{OrderlessPatternSequence[{_,sameSuit_} ..]} ? consecutiveQ :> {9, pickMaxValue@straightFlush}, + fourOfAKind:{OrderlessPatternSequence[{sameValue_,_} ..,_]} :> {8, sameValue}, + fullHouse:{OrderlessPatternSequence[{sameValueA_|sameValueB_,_} ..]} :> {7, pickMaxValue@fullHouse}, + flush:{OrderlessPatternSequence[{_,sameSuit_} ..]} :> {6, pickMaxValue@flush}, + straight_?consecutiveQ :> {5, pickMaxValue@straight}, + threeOfAKind:{OrderlessPatternSequence[{sameValue_,_} ..,_,_]} :> {4, sameValue}, + twoPairs:{OrderlessPatternSequence[{sameValueA_|sameValueB_,_} ..,_]} :> {3, Max[sameValueA, sameValueB]}, + onePair:{OrderlessPatternSequence[{sameValue_,_} ..,_,_,_]} :> {2, sameValue}, + highCard_ :> {1, pickMaxValue@highCard} +}; +``` +记数并计时 +``` +AbsoluteTiming@Count[Replace[data, rules, {2}], _?(Not@*OrderedQ)] +``` +> {0.133739, 376} \ No newline at end of file