Skip to content

Instantly share code, notes, and snippets.

@a-sitnikov
Created September 15, 2017 13:16
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save a-sitnikov/aed4a8360622e80890e6750756b785bf to your computer and use it in GitHub Desktop.
Save a-sitnikov/aed4a8360622e80890e6750756b785bf to your computer and use it in GitHub Desktop.
Перебор паролей на 1С
&НаКлиенте
Процедура КомандаПеребор(Команда)
Значения = Новый Массив;
Значения.Добавить("а");
Значения.Добавить("б");
Значения.Добавить("в");
МаксЗначение = Значения.Количество() - 1;
МаксДлина = 3;
СчетчикМассив = Новый Массив;
СчетчикМассив.Добавить(0);
ПоследнийЭлемент = Ложь;
Пока НЕ ПоследнийЭлемент Цикл
Стр = СобратьСтроку(Значения, СчетчикМассив);
Сообщить(Стр);
ПоследнийЭлемент = Следующий(СчетчикМассив, МаксЗначение, МаксДлина);
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Функция СобратьСтроку(Значения, СчетчикМассив)
Стр = "";
// Собираем в обратную сторону
Для каждого Элемент из СчетчикМассив Цикл
Стр = Значения[Элемент] + Стр;
КонецЦикла;
Возврат Стр;
КонецФункции
&НаКлиенте
Функция Следующий(СчетчикМассив, МаксЗначение, МаксДлина)
ДлинаСчетчика = СчетчикМассив.Количество();
Счетчик = 0;
Пока Истина Цикл
СчетчикМассив[Счетчик] = СчетчикМассив[Счетчик] + 1;
Если СчетчикМассив[Счетчик] > МаксЗначение Тогда
СчетчикМассив[Счетчик] = 0;
Счетчик = Счетчик + 1;
Если Счетчик = ДлинаСчетчика
И Счетчик < МаксДлина Тогда
СчетчикМассив.Добавить(0);
Возврат Ложь;
ИначеЕсли Счетчик = МаксДлина Тогда
Возврат Истина;
КонецЕсли;
Иначе
Возврат Ложь;
КонецЕсли;
КонецЦикла;
КонецФункции
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment