Покинул форум
Сообщений всего: 681
Дата рег-ции: Окт. 2010 Откуда: Екатеринбург
Помог: 4 раз(а)
Когда устраивался на работу программистом, на одном из собеседований мне дали тестовое задание. Суть такова сделать регистрацию пользователя (структуру бд дали, но это не суть важно), главное это валидация пароля была:
1) Проверка длину
2) Проверка на разрешенные символы в пароле (пропускаем)
3) что-то еще было, уже не помню
и самый главный пункт это
n) проверка на буквы и цифры введенные подряд (повторение ), то есть не пропускать такие пароли в которых содержится 123, или qwe, или 1qa или wsx в общем суть думаю ясна, что бы не было повторов как по горизонтали, так и по вертикали
С этим заданием я не справился, но решение найти все таки охота.
Пришла в голову такая мысль, полученную от пользователя строку (пароль) разбить на массив в котором символы пароля будут значениями элементов, один символ = один элемент. Так же создаем массив-матрицу по подобию клавиатуры, но в этом массиве будут символы ключами получится примерно так
но на этом у меня какт-то все заглохло, в ступоре я, как теперь сравнивать массив с полученными значениями из пароля??
Может у меня не правильно направление в поиске такого решения
philimon
Отправлено: 15 Февраля, 2013 - 09:43:00
Новичок
Покинул форум
Сообщений всего: 61
Дата рег-ции: Окт. 2007 Откуда: Моск. обл.
Помог: 2 раз(а)
У меня верхний ряд состоит из 13 значений, далее 2 радя из 12 и последний из 10. Как здесь считать символы, идущие по порядку сверху-вниз?
Покинул форум
Сообщений всего: 681
Дата рег-ции: Окт. 2010 Откуда: Екатеринбург
Помог: 4 раз(а)
philimon пишет:
не достаточно, будет ли считаться повтором 0p
хм, думаю что да.
Stierus
Отправлено: 15 Февраля, 2013 - 10:22:11
Рекордсмен по количеству сообщений за 7 дней
Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008 Откуда: Москваль
Помог: 52 раз(а)
В строке не должно быть таких последовательностей или строка не должна состоять только из последовательности?
пример
подходит ли строка "eqaz" ?
подходит ли строка "t1234y" ?
OrmaJever
Отправлено: 15 Февраля, 2013 - 10:22:53
Активный участник
Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010 Откуда: Чернигов
Помог: 299 раз(а)
vlom помоему везьде где я встречал такую систему "по порядку" считается только четыре ряда клавиатуры (qwertyuiop, asdfghjkl, zxcvbnm), учитывать диагонали и прочее не стоит, т.к это уже не простой пароль.
----- Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
vlom
Отправлено: 15 Февраля, 2013 - 10:24:13
Частый посетитель
Покинул форум
Сообщений всего: 681
Дата рег-ции: Окт. 2010 Откуда: Екатеринбург
Помог: 4 раз(а)
Stierus пишет:
В строке не должно быть таких последовательностей или строка не должна состоять только из последовательности?
не должно быть последовательностей
asr123d - не корректно
pf2mt7hOr - правильно
EuGen
Отправлено: 15 Февраля, 2013 - 10:25:23
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
На самом деле все достаточно просто, если выбрать правильную структуру. Я взял стандартные декартовы координаты с осью ординат, направленной вниз и "нулем в кнопке 1". То есть кнопка 1 получила координаты 0,0. Исходя из этого я определил qwery-раскладку примерно так (обращаю внимание на то, что заглавные буквы или спец. символы тоже нужно вносить в полный вариант массива-раскладки):
- соответственно, задача сводится к определению, есть ли идущие по порядку убывания/возрастания подпоследовательности в соответствующих линиях по X или по Y:
- функция принимает, собственно, строку данных, раскладку, в которой надо протестировать строку и минимальное число идущих подряд клавиш для того, чтобы забраковать строку.
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
vlom
Отправлено: 15 Февраля, 2013 - 10:25:51
Частый посетитель
Покинул форум
Сообщений всего: 681
Дата рег-ции: Окт. 2010 Откуда: Екатеринбург
Помог: 4 раз(а)
OrmaJever пишет:
учитывать диагонали и прочее не стоит, т.к это уже не простой пароль.
тут уже дело не в том что стоит учитывать или не стоит, дело в интересности для меня задачи, вот уже год как она из головы у меня не уходит
Stierus
Отправлено: 15 Февраля, 2013 - 10:28:33
Рекордсмен по количеству сообщений за 7 дней
Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008 Откуда: Москваль
Помог: 52 раз(а)
У вас есть 3 массива - вертикальный и горизонтальный + вертикальный без цифр:
Далее вы идете побуквенно по строке пароля и для каждого массива храние 2 значения: текущее положение и количество совпадений подряд идущих
НУ а дальше зависит от предыдущего вопроса:
если строка целиком должна состоять из последовательностей - ты должен идти подрят по строке и массиву и при несовпадении всех трех массивов выходить, говоря, что пароль тест прошел.
Если же ты в строке ищешь последовательности - нужно при несовпадениях сбрасывать счетчики в ноль, а возвращать непрохождение теста при условии, что встретилась последовательность критической длинны хотя бы в одном из массивов (Добавление)
Вариант Евгена более прост
vlom
Отправлено: 15 Февраля, 2013 - 10:34:23
Частый посетитель
Покинул форум
Сообщений всего: 681
Дата рег-ции: Окт. 2010 Откуда: Екатеринбург
Помог: 4 раз(а)
Stierus пишет:
Вариант Евгена более прост
но суть программистов такова что (Добавление)
спасибо всем за советы, а EuGen и Stierus +1 в репу Прикреплено изображение (Нажмите для увеличения)
Prizma
Отправлено: 15 Февраля, 2013 - 14:08:37
Посетитель
Покинул форум
Сообщений всего: 463
Дата рег-ции: Июнь 2012 Откуда: Санкт-Петербург
Помог: 5 раз(а)
интересненько =)
вот мой вариант, у меня это вышло легко и просто вот таким образом:
1. составить массив строк составляющих все возможные простые последовательности
Например
2. определить какое минимальное кол-во символов должно повторяться тоесть:
если пароль udpek67 - проходит,
а udpek678 - не должен проходить тогда в этом случае повторятся не должны 3 символа(это можно взять как один из аргументов функции)
3. запустить полученную от пользователя строку пароля в цикл где мы на каждый шаг цикла будем выбирать по 3 символа от начала к концу пример:
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.