스타2의 종족별 랭커를 구하는 프로그램을 짜봤습니다.

4 views
Skip to first unread message

영감님

unread,
May 11, 2011, 10:00:01 PM5/11/11
to 한국 Groovy & Grails 사용자 그룹

스타2의 마스터리그 종족별 분포를 구하는 프로그램을 짜봤습니다.

그루비로 하니 너무 간단하고 재밌네요~ ㅋ


현업의 SM하시는분에게도 유용할듯 합니다.
간단한거 구해줄때 적어도 PL/SQL보다는 좋을듯 하네요.

class SC2Rank {

@Test
void test(){
HashMap.metaClass."plus" = { key,value ->
def org = delegate.get(key)
if(org==null) org = 0;
delegate.put key, org+value
}
HashMap.metaClass."plus" = { delegate.plus it , 1 }
eachData '한국','kr', 1
eachData '북미','us', 1
eachData '남미','us', 2
eachData '유럽','eu', 1
eachData '러시아','eu', 2
eachData '대만','tw', 2
eachData '동남아시아','sea', 1
eachData '중국',null,null
}

private eachData(name,nation,no) {
println "==== $name ===="
def url = "http://${nation}.battle.net/sc2/ko/ladder/${no}/
grandmaster"
if(no==null) url = 'http://www.battlenet.com.cn/sc2/zh/ladder/1/
grandmaster'
def text = new URL(url).openStream().getText('UTF-8')
def html = new XmlSlurper(new SAXParser()).parseText(text)
def list = html.BODY.DIV.DIV[1].DIV.DIV.DIV.DIV[2].TABLE.TBODY.TR;

def countMap = new HashMap()
list.collect {
boolean isBlank = it.TD[7]==''
isBlank ? it.TD[6] : it.TD[7]
}.each { countMap.plus it.toString() }
println "종족수 : $countMap"

def valueMap = new HashMap()
list.collect {
boolean isBlank = it.TD[7]==''
isBlank ? [race:it.TD[6],value: it.TD[3]] : [race:it.TD[7],value:
it.TD[4]]
}.each { valueMap.plus it.race.toString() ,
it.value.toString().toInteger() }
println "점수합계 : $valueMap"
}
}

결과는 아래와 같습니다~~

한국은 테란이 역시나 강세군요. 테란사기야

==== 한국 ====
종족수 : [프로토스:65, 저그:58, 테란:72, 무작위:2]
점수합계 : [프로토스:41905, 저그:36779, 테란:49647, 무작위:1401]
==== 북미 ====
종족수 : [Terran:57, Zerg:61, Random:7, Protoss:74]
점수합계 : [Terran:43897, Zerg:45675, Random:5225, Protoss:53680]
==== 남미 ====
종족수 : [Terran:55, Zerg:53, Random:10, Protoss:76]
점수합계 : [Terran:27967, Zerg:26320, Random:4389, Protoss:38262]
==== 유럽 ====
종족수 : [Terran:68, Zerg:57, Random:2, Protoss:69]
점수합계 : [Terran:52292, Zerg:41190, Random:977, Protoss:50210]
==== 러시아 ====
종족수 : [Terran:38, Zerg:44, Random:9, Protoss:61]
점수합계 : [Terran:16994, Zerg:19042, Random:4260, Protoss:27422]
==== 대만 ====
종족수 : [人類:40, 隨機:9, 蟲族:73, 神族:60]
점수합계 : [人類:17379, 隨機:3708, 蟲族:30149, 神族:27287]
==== 동남아시아 ====
종족수 : [Terran:66, Zerg:62, Random:5, Protoss:63]
점수합계 : [Terran:37081, Zerg:34758, Random:1976, Protoss:34492]
==== 중국 ====
종족수 : [人类:52, 异虫:57, 星灵:81, 随机:7]
점수합계 : [人类:35643, 异虫:37189, 星灵:48941, 随机:3371]

Reply all
Reply to author
Forward
0 new messages