sumim #5174(2008/01/04 15:30 GMT) [ Smalltalk ] Rating1/1=1.00
Squeak Smalltalk で。
バッグ(a Bag)はマルチセットとも呼ばれる特殊なコレクションのひとつで、要素を、その種類と出現数との組として管理しています。情報は内包される辞書に保持され、#valuesAndCounts をコールすることでアクセスできます。なお、Smalltalk で辞書(a Dictionary)とは、連想配列のことを指します。
辞書は #values で、自らが要素として持つ「キー -> 値」の組の「値」(この場合、出現数)のみを抽出した配列を返します。本スクリプトでは、この出現数のみを抽出した配列(ソート済み)のパターンを見て(#caseOf:otherwise:)、手の役(ストレートやフラッシュ以外の…)を判定しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| 入力 ランク順 ランク スート | 入力 := 'SQSJSASKST'. ランク順 := 'A', ($2 to: $9), 'TJQK'. ランク := Bag new. スート := Bag new. 入力 pairsDo: [:a :b | スート add: a. ランク add: (ランク順 indexOf: b)]. スート asSet size = 1 ifTrue: [ ランク asSortedArray = #(1 10 11 12 13) ifTrue: [^'Royal flush']. ランク asSortedArray = (ランク min to: ランク min + 4) ifTrue: [^'Straight flush']. ^'Flush']. ランク asSortedArray = (ランク min to: ランク min + 4) ifTrue: [^'Straight']. ^ランク valuesAndCounts values sort caseOf: { [#(1 4)] -> ['Four of a kind']. [#(2 3)] -> ['Full house']. [#(1 1 3)] -> ['Three of a kind']. [#(1 2 2)] -> ['Two pair']. [#(1 1 1 2)] -> ['One pair']} otherwise: ['No pair']
Rating1/1=1.00-0+
[ reply ]
sumim
#5174()
[
Smalltalk
]
Rating1/1=1.00
Squeak Smalltalk で。
バッグ(a Bag)はマルチセットとも呼ばれる特殊なコレクションのひとつで、要素を、その種類と出現数との組として管理しています。情報は内包される辞書に保持され、#valuesAndCounts をコールすることでアクセスできます。なお、Smalltalk で辞書(a Dictionary)とは、連想配列のことを指します。
辞書は #values で、自らが要素として持つ「キー -> 値」の組の「値」(この場合、出現数)のみを抽出した配列を返します。本スクリプトでは、この出現数のみを抽出した配列(ソート済み)のパターンを見て(#caseOf:otherwise:)、手の役(ストレートやフラッシュ以外の…)を判定しています。
| 入力 ランク順 ランク スート | 入力 := 'SQSJSASKST'. ランク順 := 'A', ($2 to: $9), 'TJQK'. ランク := Bag new. スート := Bag new. 入力 pairsDo: [:a :b | スート add: a. ランク add: (ランク順 indexOf: b)]. スート asSet size = 1 ifTrue: [ ランク asSortedArray = #(1 10 11 12 13) ifTrue: [^'Royal flush']. ランク asSortedArray = (ランク min to: ランク min + 4) ifTrue: [^'Straight flush']. ^'Flush']. ランク asSortedArray = (ランク min to: ランク min + 4) ifTrue: [^'Straight']. ^ランク valuesAndCounts values sort caseOf: { [#(1 4)] -> ['Four of a kind']. [#(2 3)] -> ['Full house']. [#(1 1 3)] -> ['Three of a kind']. [#(1 2 2)] -> ['Two pair']. [#(1 1 1 2)] -> ['One pair']} otherwise: ['No pair']Rating1/1=1.00-0+
[ reply ]