e-olymp 8382. Пароль

Задача

Назовем пароль криптостойким*, если выполнены $5$ критериев

  1. Пароль содержит строчные латинские буквы
  2. Пароль содержит заглавные латинские буквы
  3. Пароль содержит цифры
  4. Символы: ! » # $ % & ‘ ( ) * +
  5. Длина пароля не менее $8$ символов

Требуется по данному паролю определить, сколько критериев криптостойкости выполнено.

Входные данные

Вводится одна строка, состоящая только из латинских букв и цифр. Количество символов в строке не превышает $100$.

Выходные данные

Выведите количество критериев криптостойкости, которым удовлетворяет пароль.

Тесты

Входные данные Выходные данные
1 1aA 3
2 AaBbCc12 4
3 AAAaaaAAA 3
4 #Abc23$$$ 5

Код программы (string)

Код программы (c-string)

 

Решение

Для подсчёта удовлетворённых критериев криптостойкости будем использовать 5 булевских флагов, соответствующих каждому из критериев. Длину пароля определим сразу, а наличие символов определенного типа будем проверять в цикле. Для проверки наличия цифр и латинских букв нижнего и верхнего регистров используем встроенные функции isdigit() , islower()  и isupper() , а для специальных символов напишем функцию isspecial() .

Ссылки

Для string:

Для c-string:

* В условии задачи — «крипто стойким».

Related Images:

6 thoughts on “e-olymp 8382. Пароль

  1. О, вот и цикл Дострлена. Если повысить ограничения на данную задачу до $10^6$, то станет заметно, что первый Ваш код гораздо быстрее второго. Причина этого кроется в том, что strlen не бесплатная (мягко говоря) функция и цикл до длины строки будет вызывать эту функцию аж n раз. Убедитесь в этом, пожалуйста, самостоятельно — знание очень полезное.

    • Спасибо это правильно. А исправить забыли.
      Нельзя вычислять длину строки внутри цикла много раз. Нужно вычислить перед циклом и запомнить в переменной.
      Конечно, для данных тестов Вы едва заметите прирост скорости, но не будем привыкать к плохому.

      И, пожалуйста, пробел ставят перед открывающей скобкой, а не после нее.

Добавить комментарий