Простое тестовое задание 1Предлагаю простое тестовое задание для новичков. В процессе его выполнения можно подучиться писать скрипты на Clickermann и повысить свой скилл.
Задание НЕ игровое. НЕ на поиск изображений или работе с экраном. Просто вычисления, циклы, работа со строками и вводом информации.
Алгоритм Луна — алгоритм вычисления контрольной цифры номера пластиковой карты в соответствии со стандартом ISO/IEC 7812
[spoiler]Не является криптографическим средством, а предназначен в первую очередь для выявления ошибок, вызванных непреднамеренным искажением данных (например, при ручном вводе номера карты, при приёме данных о номере социального страхования по телефону). Позволяет лишь с некоторой степенью достоверности судить об отсутствии ошибок в блоке цифр, но не даёт возможности нахождения и исправления обнаруженной неточности.
Наиболее распространённые применения для подсчёта контрольной цифры:
• Номера всех банковских карт
• Номера некоторых дисконтных карт
• Коды социального страхования
• IMEI-коды.
• Расчёт контрольного знака единого 8-значного номера железнодорожного вагона на РЖД.
• Расчёт ICCID (от англ. Integrated Circuit Card Id) — уникальный серийный номер SIM-карты.[/spoiler]
Оригинальный алгоритм, описанный разработчиком[spoiler]1. Цифры проверяемой последовательности нумеруются справа налево.
2. Цифры, оказавшиеся на нечётных местах, остаются без изменений.
3. Цифры, стоящие на чётных местах, умножаются на 2.
4. Если в результате такого умножения возникает число больше 9, оно заменяется суммой цифр получившегося произведения — однозначным числом, то есть цифрой.
5. Все полученные в результате преобразования цифры складываются. Если сумма кратна 10, то исходные данные верны.
В примере: последняя цифра — контрольная. Для того, чтобы номер был верен в соответствии с алгоритмом Луна, контрольная цифра должна быть равна 7.
4 5 6 1 2 6 1 2 1 2 3 4 5 4 6 7
8 12 4 2 2 6 10 12
8 3 4 2 2 6 1 3
8+5+3+1 + 4+6+2+2 + 2+2+6+4 + 1+4+3+7 = 60
Сумма кратна 10 – значит номер верный.[/spoiler]
Ссылка на описание в википедии. Там же и описан алгоритм.
Алгоритм очень простой.
Нужно сделать два скрипта. Или один общий.
1. Скрипт проверки верности существующей контрольной цифры. Т.е. вводим номер с контрольной цифрой на конце. Результат должен быть в сообщении есть в номере ошибки или нет.
2. Скрипт вычисления контрольной цифры и вывод номера уже с контрольной цифрой.
Скрипты должны быть не наброском «примерно так», а в уже законченном рабочем виде, чтобы ими можно было пользоваться. Вариант реализации – произвольный. Можно использовать массивы, можно не использовать. Для красоты и визуальной разбивки кода можно использовать деление на подпрограммы.
Понятно, что совсем новичкам достаточно будет сделать базовые функции. Массивы, подпрограммы, и остальное, можно оставить на будущее – на «вырост».
Какие команды Clickermann-а вероятно могут понадобиться (из справки):
[spoiler]
Основные конструкции:IF (expression) ... END_IF - проверяет истинность выражения и выполняет блоки инструкций в зависимости от результата
FOR ($var, expression, [step]) ... END_CYC - организует цикл с параметром
WHILE (expression) ... END_CYC - организует цикл с предусловием
SUB (sub_name, [$par1, ...]) ... END_SUB - описывает подпрограмму
WAITMS (delay) - приостанавливает выполнение сценария на несколько миллисекунд
HALT([close]) - полностью останавливает выполнение сценария
Работа с числами:INT (num) - числовая функция; возвращает целую часть числа без округления. Так же используется для перевода строки в целое число
INC ($var, [value]) - увеличивает значение переменной
Диалоговые окна ввода/вывода:INPUTBOX("message", "default", [delay]) - строковая функция; выводит диалоговое окно для ввода строки
DIALOGBOX("message", buttons, icon) - числовая функция; выводит диалоговое окно с текстом и кнопками
RADIOBOX("message", radio1, ...) - числовая функция; выводит диалоговое окно с переключателями
Функции работы со строками:STRLEN ("str") - числовая функция; возвращает длину строки в символах
STRFILTER ("str", "set", mode) - строковая функция; возвращает отфильтрованную строку
STRCUT ("str", begin, size) - строковая функция; возвращает кусок строки
STRCONCAT ("str1", "str2", ...) - строковая функция; возвращает объединенную строку
Для отладки кода использовать вывод в лог и трей:LOGSHOW (show, [x, y]) - скрывает/отображает окно лога программы
HINTPOPUP ("message", ["title"]) - выводит всплывающее сообщение в системный трей [/spoiler]
Полное описание команд и функций с примерами можно посмотреть в справке.Для примера берём номер из вики
4561 2612 1234 5467 - проверить, нет ли в номере ошибок
4561 2612 1234 546 - найти контрольную цифру, в данном случае «7»
Во вложении мой пример реализации Luhn_algorithm.cms. Код пока скрыт, но полностью рабочий.
Для Clickermann версии 4.12 build 001
При вводе удаляются все символы, кроме цифр. Если в буфере обмена есть цифры, при вводе они предлагаются как значение по умолчанию.
Если определяли контрольную цифру, по окончании число+кэта цифра помещены в буфер обмена.
Делайте свои варианты и выкладывайте. Можете и не выкладывать .