鱼C论坛

 找回密码
 立即注册
查看: 3342|回复: 2

[已解决]啦啦啦啦德玛西亚

[复制链接]
发表于 2021-4-29 10:28:57 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 qq1151985918 于 2021-10-17 22:00 编辑

def isLengthEnough(s):
    if 6 <= len(s) <= 20:
        return True
    else:
        return False

def isNumIn(s):
    for i in s:
        if i.isdigit():
            return True
    else:
        return False
    
def isLowIn(s):
    for i in s:
        if i.islower():
            return True
    else:
        return False

def isCapIn(s):
    for i in s:
        if i.isupper():
            return True
    else:
        return False

def isNotRepeat3(s):
    for i in set(s):
        if i * 3 in s:
            return False
    else:
        return True

def allRepeat3(s):
    r = []
    while not isNotRepeat3(s):
        for i in s:
            for j in range(len(s), 2, -1):
                if i * j in s:
                    for k in range(s.count(i * j)):
                        r.append(i * j)
                    s = s.replace(i * j, "")
                    break
    return sorted(r, key=lambda x:len(x), reverse=True)

def chooseChar(s):
    for x in allRepeat3(s[:]):
        s = s.replace(x, x[:2])
    return s
    
def run(s):
    r = sum([isLengthEnough(s), isNumIn(s), isLowIn(s), isCapIn(s), isNotRepeat3(s)])
    if r == 5:
        result = 0
    elif sum([isLengthEnough(s), isNotRepeat3(s)]) == 0:
        cs = chooseChar(s)
        if len(cs) >= 20:
            return (len(s) - 20 + (3 - r))
        if len(cs) + (3 - r) >= 20:
            return (len(s) - 20 + (3 - r))
        
        allR = allRepeat3(s)
        t, flg = 0, False
        
        res1 = max([6-len(s), len(s)-20])

        n = 20 - len(cs)
        for x in allR:
            i = x[:-2]
            if flg:
                t += len(s) - len(cs) - len(allR[0][:-2])
                break
            elif not flg and len(i) > n:
                flg = True
                t += len(i) - n + (n // 3)
            else:
                t += len(i) // 3
        res2 = max([t, 3-r])
        result = max([res1, res2])
    elif not isLengthEnough(s):
        t = max([6-len(s), len(s)-20])
        result = max([t, 4-r])
    elif not isNotRepeat3(s):
        t = 0
        for i in allRepeat3(s):
            t += len(i) // 3
        result = max([t, 4-r])
    else:
        result = 5 - r
    return result

if __name__ == "__main__":
    password = input("输入密码:")
    print("密码变强所需的最少步骤:", run(password))
最佳答案
2021-4-29 21:12:07
3 5块钱。你买瓶水喝够了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-4-29 21:12:07 | 显示全部楼层    本楼为最佳答案   
3 5块钱。你买瓶水喝够了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-4-29 21:40:23 From FishC Mobile | 显示全部楼层
ba21 发表于 2021-4-29 21:12
3 5块钱。你买瓶水喝够了。

网上不管什么代码都有卖的,三五块钱一大把,python我也买过,只是JavaScript我根本不懂,看不明白,想学又总感觉时间没那么充分就一直拖着。我要是也会JavaScript我就自己弄一个小程序,还省的花钱。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-9 02:04

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表