- 论坛徽章:
- 60
|
笨的不能再笨的方法了, 打印所有方案....- #!/usr/bin/python
- #coding:utf-8
- import itertools
- import re
- from copy import deepcopy
- from collections import Counter
- moneys = {
- 3: 4,
- 4: 6,
- 5: 8,
- 6: 10
- }
- class parsefile(object):
- def __init__(self, file):
- self.n = {}
- self.k = {}
- with open(file) as fd:
- for line in fd:
- l = re.split(r"[:\s]+\s*", line.rstrip())
- d = re.sub(r"^.", "", l[0])
- self.n.setdefault(int(d), []).append(l[0])
- self.k[l[0]] = l[1:]
- def get_tcs(self):
- return self.n.values()
- def get_kms(self):
- return self.k
- def get_tcs_groups(self, seqs):
- return [ item for item in itertools.product(*seqs)]
- def moneyfrom(self, seqs):
- maps = self.get_kms()
- temp = []
- for it in seqs: temp.extend(maps[it])
- d = Counter(temp)
- t = []
- for i, v in d.items():
- if v >= 3:
- t.append('%d%s' %(v,i))
- return '+'.join(t)
- def getmoneys(self, seqs):
- maps = self.get_kms()
- temp = []
- for it in seqs: temp.extend(maps[it])
- d = Counter(temp)
- money = 0
- for i, v in d.items():
- if v >= 3:
- money += moneys[v]
- return money
-
- def getmaxmoneys(self, seqs):
- alls = {}
- max = 0
- for it in seqs:
- rmb = self.getmoneys(it)
- if rmb > max:
- alls = {}
- max = rmb
- alls.setdefault(rmb, []).append(it)
- elif rmb == max:
- alls.setdefault(rmb, []).append(it)
- return alls
- def rmtcs(self, s, *d):
- t = [ j for i in d for j in i ]
- for k, v in enumerate(s):
- for i in v:
- if i in t:
- s[k].remove(i)
- return s
- def printfmt(self, seq):
- k = self.get_kms()
- t = []
- for i in seq:
- t.append("%s: %s" %(i, ' '.join(k[i])))
- return ' '.join(t)
- pp = parsefile('file')
- yy = pp.get_tcs()
- t1 = deepcopy(yy)
- g1 = pp.get_tcs_groups(t1)
- h1 = pp.getmaxmoneys(g1)
- nm = 0
- for m1, v1 in h1.iteritems():
- for s1 in v1:
- t1 = deepcopy(yy)
- t2 = pp.rmtcs(t1, s1)
- g2 = pp.get_tcs_groups(t2)
- h2 = pp.getmaxmoneys(g2)
- for m2, v2 in h2.iteritems():
- for s2 in v2:
- t1 = deepcopy(yy)
- t2 = deepcopy(pp.rmtcs(t1, s1))
- t3 = pp.rmtcs(t2, s1, s2)
- g3 = pp.get_tcs_groups(t3)
- h3 = pp.getmaxmoneys(g3)
- for m3, v3 in h3.iteritems():
- for s3 in v3:
- t1 = deepcopy(yy)
- t2 = deepcopy(pp.rmtcs(t1, s1))
- t3 = deepcopy(pp.rmtcs(t2, s1, s2))
- t4 = pp.rmtcs(t3, s1, s2, s3)
- g4 = pp.get_tcs_groups(t4)
- h4 = pp.getmaxmoneys(g4)
- for m4, v4 in h4.iteritems():
- for s4 in v4:
- t1 = deepcopy(yy)
- t2 = deepcopy(pp.rmtcs(t1, s1))
- t3 = deepcopy(pp.rmtcs(t2, s1, s2))
- t4 = deepcopy(pp.rmtcs(t3, s1, s2, s3))
- t5 = pp.rmtcs(t3, s1, s2, s3, s4)
- g5 = pp.get_tcs_groups(t5)
- h5 = pp.getmaxmoneys(g5)
- for m5, v5 in h5.iteritems():
- for s5 in v5:
- t1 = deepcopy(yy)
- t2 = deepcopy(pp.rmtcs(t1, s1))
- t3 = deepcopy(pp.rmtcs(t2, s1, s2))
- t4 = deepcopy(pp.rmtcs(t3, s1, s2, s3))
- t5 = deepcopy(pp.rmtcs(t3, s1, s2, s3, s4))
- t6 = pp.rmtcs(t3, s1, s2, s3, s4, s5)
- g6 = pp.get_tcs_groups(t6)
- h6 = pp.getmaxmoneys(g6)
- for m6, v6 in h6.iteritems():
- for s6 in v6:
- nm += 1
- print ' %6s ================' % nm
- print "%s %d=(%s)" %( pp.printfmt(s1), m1, pp.moneyfrom(s1) )
- print "%s %d=(%s)" %( pp.printfmt(s2), m2, pp.moneyfrom(s2) )
- print "%s %d=(%s)" %( pp.printfmt(s3), m3, pp.moneyfrom(s3) )
- print "%s %d=(%s)" %( pp.printfmt(s4), m4, pp.moneyfrom(s4) )
- print "%s %d=(%s)" %( pp.printfmt(s5), m5, pp.moneyfrom(s5) )
- print "%s %d=(%s)" %( pp.printfmt(s6), m6, pp.moneyfrom(s6) )
- print ''
- print ''
复制代码- 1 ================
- A1: BJ FF PG A2: FG BJ RX F3: BS FG PJ B4: PJ BS BJ F5: FG BJ BS C6: FG SM PJ 20=(4FG+4BJ+3BS+3PJ)
- B1: JG PF PG B2: PF RX SB A3: JG FG SM A4: PF JG SM B5: PG SM FF B6: JG SM PG 20=(3PF+3PG+4SM+4JG)
- C1: JG FG GD C2: BJ JG SB D3: FG JG BS D4: SB BS FG D5: BJ BS SB D6: BJ PF FF 20=(3FG+3BJ+3BS+3SB+3JG)
- D1: PG FG GD E2: SB PF GD E3: JF GD JG C4: JG SB PF E5: MZ SB PF E6: SB FF GD 16=(4GD+3PF+4SB)
- E1: PG PF PJ D2: RX PG JG C3: PG BS FG F4: MZ FG RX A5: PF MZ BS F6: RX SM FG 12=(3FG+3RX+3PG)
- F1: BJ SM PF F2: SB PJ RX B3: BJ BS PG E4: BJ FF PF C5: BS FF BJ A6: SB MZ JF 6=(4BJ)
- 2 ================
- A1: BJ FF PG A2: FG BJ RX F3: BS FG PJ B4: PJ BS BJ F5: FG BJ BS C6: FG SM PJ 20=(4FG+4BJ+3BS+3PJ)
- B1: JG PF PG B2: PF RX SB A3: JG FG SM A4: PF JG SM B5: PG SM FF B6: JG SM PG 20=(3PF+3PG+4SM+4JG)
- C1: JG FG GD C2: BJ JG SB D3: FG JG BS D4: SB BS FG D5: BJ BS SB D6: BJ PF FF 20=(3FG+3BJ+3BS+3SB+3JG)
- D1: PG FG GD E2: SB PF GD E3: JF GD JG C4: JG SB PF E5: MZ SB PF E6: SB FF GD 16=(4GD+3PF+4SB)
- E1: PG PF PJ D2: RX PG JG C3: PG BS FG F4: MZ FG RX C5: BS FF BJ F6: RX SM FG 12=(3FG+3RX+3PG)
- F1: BJ SM PF F2: SB PJ RX B3: BJ BS PG E4: BJ FF PF A5: PF MZ BS A6: SB MZ JF 8=(3BJ+3PF)
- 3 ================
- A1: BJ FF PG A2: FG BJ RX F3: BS FG PJ B4: PJ BS BJ F5: FG BJ BS C6: FG SM PJ 20=(4FG+4BJ+3BS+3PJ)
- B1: JG PF PG B2: PF RX SB A3: JG FG SM A4: PF JG SM B5: PG SM FF B6: JG SM PG 20=(3PF+3PG+4SM+4JG)
- C1: JG FG GD C2: BJ JG SB D3: FG JG BS D4: SB BS FG D5: BJ BS SB D6: BJ PF FF 20=(3FG+3BJ+3BS+3SB+3JG)
- E1: PG PF PJ E2: SB PF GD E3: JF GD JG C4: JG SB PF E5: MZ SB PF E6: SB FF GD 16=(3GD+4PF+4SB)
- D1: PG FG GD D2: RX PG JG C3: PG BS FG F4: MZ FG RX A5: PF MZ BS F6: RX SM FG 14=(4FG+3RX+3PG)
- F1: BJ SM PF F2: SB PJ RX B3: BJ BS PG E4: BJ FF PF C5: BS FF BJ A6: SB MZ JF 6=(4BJ)
- .
- .
- .
- .
- 9214 ================
- F1: BJ SM PF A2: FG BJ RX F3: BS FG PJ B4: PJ BS BJ F5: FG BJ BS C6: FG SM PJ 20=(4FG+4BJ+3BS+3PJ)
- C1: JG FG GD E2: SB PF GD E3: JF GD JG C4: JG SB PF E5: MZ SB PF E6: SB FF GD 20=(4GD+3PF+4SB+3JG)
- B1: JG PF PG D2: RX PG JG A3: JG FG SM F4: MZ FG RX B5: PG SM FF F6: RX SM FG 20=(3RX+3PG+3SM+3FG+3JG)
- A1: BJ FF PG B2: PF RX SB B3: BJ BS PG E4: BJ FF PF C5: BS FF BJ D6: BJ PF FF 18=(5BJ+3PF+4FF)
- D1: PG FG GD F2: SB PJ RX C3: PG BS FG D4: SB BS FG D5: BJ BS SB B6: JG SM PG 16=(3BS+3PG+3FG+3SB)
- E1: PG PF PJ C2: BJ JG SB D3: FG JG BS A4: PF JG SM A5: PF MZ BS A6: SB MZ JF 8=(3PF+3JG)
- 9215 ================
- F1: BJ SM PF A2: FG BJ RX F3: BS FG PJ B4: PJ BS BJ F5: FG BJ BS C6: FG SM PJ 20=(4FG+4BJ+3BS+3PJ)
- C1: JG FG GD E2: SB PF GD E3: JF GD JG C4: JG SB PF E5: MZ SB PF E6: SB FF GD 20=(4GD+3PF+4SB+3JG)
- B1: JG PF PG D2: RX PG JG A3: JG FG SM F4: MZ FG RX B5: PG SM FF F6: RX SM FG 20=(3RX+3PG+3SM+3FG+3JG)
- A1: BJ FF PG C2: BJ JG SB B3: BJ BS PG D4: SB BS FG D5: BJ BS SB B6: JG SM PG 18=(4BJ+3PG+3BS+3SB)
- E1: PG PF PJ B2: PF RX SB C3: PG BS FG E4: BJ FF PF C5: BS FF BJ D6: BJ PF FF 14=(3BJ+4PF+3FF)
- D1: PG FG GD F2: SB PJ RX D3: FG JG BS A4: PF JG SM A5: PF MZ BS A6: SB MZ JF 0=()
- 9216 ================
- F1: BJ SM PF A2: FG BJ RX F3: BS FG PJ B4: PJ BS BJ F5: FG BJ BS C6: FG SM PJ 20=(4FG+4BJ+3BS+3PJ)
- C1: JG FG GD E2: SB PF GD E3: JF GD JG C4: JG SB PF E5: MZ SB PF E6: SB FF GD 20=(4GD+3PF+4SB+3JG)
- B1: JG PF PG D2: RX PG JG A3: JG FG SM F4: MZ FG RX B5: PG SM FF F6: RX SM FG 20=(3RX+3PG+3SM+3FG+3JG)
- A1: BJ FF PG C2: BJ JG SB B3: BJ BS PG D4: SB BS FG D5: BJ BS SB B6: JG SM PG 18=(4BJ+3PG+3BS+3SB)
- E1: PG PF PJ B2: PF RX SB D3: FG JG BS E4: BJ FF PF C5: BS FF BJ D6: BJ PF FF 14=(3BJ+4PF+3FF)
- D1: PG FG GD F2: SB PJ RX C3: PG BS FG A4: PF JG SM A5: PF MZ BS A6: SB MZ JF 0=()
复制代码 |
|