PASSW - Mật khẩu an toàn

Xem dạng PDF

Gửi bài giải

Điểm: 1,00 (OI)
Giới hạn thời gian: 1.0s
Giới hạn bộ nhớ: 256M

Tác giả:
Dạng bài
Ngôn ngữ cho phép
C, C#, C++, Go, Java, Pascal, Perl, PHP, Python, Ruby, Rust, Scratch, Swift

Hiện nay, với sự bùng nổ của công nghệ thông tin, mỗi cá nhân đều có cho mình một số tài khoản (tài khoản facebook, tài khoản e-mail, tài khoản twitter…). Các tài khoản này đều cần được bảo vệ bằng các mật khẩu. Một vấn đề quan trọng là cần chọn được các mật khẩu “an toàn” để tránh bị đánh cắp tài khoản.

Giả sử mỗi mật khẩu là một chuỗi ký tự khác rỗng chỉ gồm các chữ cái la-tinh in hoa ( AZ ), in thường ( az ) và chữ số ( 0.. 9 ). Ta đánh giá độ “an toàn” của mật khẩu bởi hai tiêu chí:

  • Độ dài (số ký tự): là một số nguyên trong phạm vi từ ~0..5~: Nếu mật khẩu có độ dài là m thì độ an toàn là: ~\min(5, \max(m – 5, 0))~
  • Loại ký tự (hoa, thường, số):
  • Nếu chỉ có một loại ký tự: ~1~
  • Có đúng hai loại ký tự: ~2~
  • Có đủ ~3~ loại ký tự: ~5~

Độ an toàn của mật khẩu là tổng của hai tiêu chí trên.

Ví dụ: mật khẩu là Abcd123456 có độ an toàn là: ~5~ (độ dài) + ~5~ (loại ký tự) = ~10~.

Bạn được cho một danh sách các mật khẩu, hãy viết chương trình để đánh giá “độ an toàn” của các mật khẩu đó.

Input

  • Dòng đầu chứa số nguyên dương ~n~ là số mật khẩu cần đánh giá.
  • ~n~ dòng tiếp theo, mỗi dòng chứa một mật khẩu là xâu ký tự khác rỗng, chỉ chứa các ký tự la-tinh in hoa ( AZ ), in thường ( az ) và chữ số ( 0.. 9 ), độ dài không quá ~15~ ký tự.

Giới hạn:

  • ~1 ≤ n ≤ 100~.

Output

Ghi trên một dòng ~n~ số nguyên là độ an toàn của ~n~ mật khẩu (theo đúng thứ tự), hai số liên tiếp ghi cách nhau một dấu cách.

Sample

Input #1
4
Password
security
A1234
Abcd123456
Output #1
5 4 2 10

Problem source: Chuyên Sơn La Online Judge


Bình luận

Hãy đọc nội quy trước khi bình luận.



  • 0
    haoblung  đã bình luận lúc 4, Tháng 5, 2024, 16:11

    Trong Scratch kiểm tra chuỗi ký tự a = A thì làm thế nào để giải bài này?


  • 0
    gtmailong  đã bình luận lúc 23, Tháng 4, 2024, 21:47

    c++

    #include <iostream>
    #include <algorithm>
    
    using namespace std;
    
    void mkat(string s){
        int m = s.size();
        int doAnToan = min(5,max(m-5,0));
        bool hoa = 0,thuong = 0,so = 0;
        for (int i = 0; i < m; i++){
            if (s[i] >= 'A' && s[i] <= 'Z') hoa = 1;
            if (s[i] >= 'a' && s[i] <= 'z') thuong = 1;
            if (s[i] >= '0' && s[i] <= '9') so = 1;
        }
        if (hoa + thuong + so == 3) doAnToan += 5;
        else doAnToan += hoa+thuong+so;
        cout << doAnToan << " ";
    }
    
    int main () {
        int n;
        cin >> n;
        while (n--){
            string s;
            cin >> s;
            mkat(s);
        }
        return 0;
    }
    

  • 1
    ______  đã bình luận lúc 28, Tháng 1, 2024, 8:09

    include <iostream>

    include <string>

    include <cctype>

    using namespace std;

    int calculateSafety(const string& password) { int length = password.length(); int typeCount = 0;

    bool hasUpperCase = false, hasLowerCase = false, hasDigit = false;
    for (char ch : password) {
        if (isupper(ch)) {
            hasUpperCase = true;
        } else if (islower(ch)) {
            hasLowerCase = true;
        } else if (isdigit(ch)) {
            hasDigit = true;
        }
    

    }

    typeCount = hasUpperCase + hasLowerCase + hasDigit;
    
    int lengthSafety = min(5, max(length - 5, 0));
    int typeSafety = (typeCount == 1) ? 1 : ((typeCount == 2) ? 2 : 5);
    
    // Total safety score
    int totalSafety = lengthSafety + typeSafety;
    
    return totalSafety;
    

    }

    int main() { int n; cin >> n;

    for (int i = 0; i < n; ++i) {
        string password;
        cin >> password;
    
        int safety = calculateSafety(password);
    
        cout << safety;
    
        if (i < n - 1) {
            cout << " ";
        }
    }
    
    return 0;
    

    } full ac xin upvote :D


  • 2
    lqDung  đã bình luận lúc 18, Tháng 12, 2023, 9:54

    có bộ test dài hơn 15 kí tự nhé.