CCF Python题解(超时80分)201909-3 字符画

# _*_ coding=utf-8 _*_
__author__ = 'SRF'
__date__ = '2019/11/23 10:33'
'''
\033 转义序列的开始
输出一行字符重置终端
程序结束恢复默认前景 背景
空格\x20
换行\x0A
'''
defaback = [0, 0, 0]
reset = "[0m"
last = []
s = ""
prefix = "\\x1B"


def solveCol(c):
    if len(c) == 2:
        c += c[-1] * 6
    elif len(c) == 4:
        c = "#" + c[1] * 2 + c[2] * 2 + c[3] * 2
    l = [int(c[i:i + 2], 16) for i in range(1, 7, 2)]
    return l


m, n = map(int, input().split())
p, q = map(int, input().split())
colormatrix = [[] for i in range(n)]
for row in range(n):
    for col in range(m):
        colormatrix[row].append(solveCol(input()))
        if (col + 1) % p == 0 and (row + 1) % q == 0:
            srow = row // q
            scol = col // p
            suit = list(
                zip(*[colormatrix[k][l] for l in range(col - p + 1, col + 1) for k in range(row - q + 1, row + 1)]))

            current = [sum(s) // len(s) for s in suit]

            if srow == 0 and scol == 0:
                if current != defaback:
                    d = "[48;2;" + ";".join(map(str, current)) + "m"
                    t = ["\\x" + hex(ord(i))[2:].upper().zfill(2) for i in d]
                    s += prefix + "".join(t)
            else:
                if current == last:
                    pass
                else:
                    if current == defaback:
                        s += "\\x1B\\x5B\\x30\\x6D"
                    else:
                        d = "[48;2;" + ";".join(map(str, current)) + "m"

                        t = ["\\x" + hex(ord(i))[2:].upper().zfill(2) for i in d]
                        s += prefix + "".join(t)
            last = current
            # 空格
            s += "\\x20"
            # 换行
            if scol == m // p - 1:
                # 输出每行后判断是否重置
                if last != defaback:
                    s += "\\x1B\\x5B\\x30\\x6D"
                    last = defaback

                s += '''\\x0A'''

print(s)

#测试用例来csdn一大佬的博客
'''
1 1
1 1
#010203
\x1B\x5B\x34\x38\x3B\x32\x3B\x31\x3B\x32\x3B\x33\x6D\x20\x1B\x5B\x30\x6D\x0A

2 2
1 2
#111111
#0
#000000
#111
\x1B\x5B\x34\x38\x3B\x32\x3B\x38\x3B\x38\x3B\x38\x6D\x20\x20\x1B\x5B\x30\x6D\x0A

1 1
1 1
#0
\x20\x0A

2 2
2 1
#111111
#0
#000000
#111
\x1B\x5B\x34\x38\x3B\x32\x3B\x38\x3B\x38\x3B\x38\x6D\x20\x1B\x5B\x30\x6D\x0A\x1B\x5B\x34\x38\x3B\x32\x3B\x38\x3B\x38\x3B\x38\x6D\x20\x1B\x5B\x30\x6D\x0A
\x1B\x5B\x34\x38\x3B\x32\x3B\x38\x3B\x38\x3B\x38\x6D\x20\x1B\x5B\x30\x6D\x0A\x1B\x5B\x34\x38\x3B\x32\x3B\x38\x3B\x38\x3B\x38\x6D\x20\x1B\x5B\x30\x6D\x0A
2 2
2 1
#111111
#0
#000000
#000
\x1B\x5B\x34\x38\x3B\x32\x3B\x38\x3B\x38\x3B\x38\x6D\x20\x1B\x5B\x30\x6D\x0A\x20\x0A
\x1B\x5B\x34\x38\x3B\x32\x3B\x38\x3B\x38\x3B\x38\x6D\x20\x1B\x5B\x30\x6D\x0A \x20\x0A
3 2
1 2
#0
#0
#010101
#010102
#0
#0
\x1B\x5B\x34\x38\x3B\x32\x3B\x30\x3B\x30\x3B\x31\x6D\x20\x1B\x5B\x30\x6D\x20\x20\x0A
\x1B\x5B\x34\x38\x3B\x32\x3B\x30\x3B\x30\x3B\x31\x6D\x20\x1B\x5B\x30\x6D\x0A\x20\x20

1 2
1 2
#123456
#abcdef
\x1B\x5B\x34\x38\x3B\x32\x3B\x39\x34\x3B\x31\x32\x38\x3B\x31\x36\x32\x6D\x20\x1B\x5B\x30\x6D\x0A

2 1
2 1
#654321
#fedcba
\x1B\x5B\x34\x38\x3B\x32\x3B\x31\x37\x37\x3B\x31\x34\x33\x3B\x31\x30\x39\x6D\x20\x1B\x5B\x30\x6D\x0A
'''

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值