Існують популярні алгоритми контрольних цифр, такі як Лун, а потім є хороші , наприклад алгоритм Damm. Єдиною можливою причиною популярності таких алгоритмів, як Лун, є те, що існують кодові реалізовані їх реалізації. Це означає, що ми, як громада, маємо змогу змінювати світ, надаючи гольф-реалізація кращих алгоритмів.
Отже, ця задача полягає в тому, щоб змінити світ, написавши функцію або повну програму на обраній вами мові, яка обчислює контрольну цифру за допомогою алгоритму Damm . Відповідь з найменшою кількістю символів (не байтів) буде обрано переможцем через кілька тижнів. Зауважте, що всі допоміжні функції та декларація операційної таблиці повинні бути включені до числа символів. У разі вирівнювання буде обрана найпопулярніша відповідь.
Цей алгоритм обертається навколо операційної таблиці, яка повинна бути слабко цілком антисиметричною квазігрупою порядку 10. Операційна таблиця, яку можна знайти у статті Вікіпедії про алгоритм Damm, є тією, яку потрібно використовувати в цьому виклику. Для повноти я його відтворять нижче:
| 0 1 2 3 4 5 6 7 8 9
----+----------------------------------------
0 | 0 3 1 7 5 9 8 6 4 2
1 | 7 0 9 2 1 5 4 8 6 3
2 | 4 2 0 6 8 7 1 3 5 9
3 | 1 7 5 0 9 8 3 4 2 6
4 | 6 1 2 3 0 4 5 9 7 8
5 | 3 6 7 4 2 0 9 5 8 1
6 | 5 8 6 9 7 2 0 1 3 4
7 | 8 9 4 5 3 6 2 0 1 7
8 | 9 4 3 8 6 1 7 2 0 5
9 | 2 5 8 1 4 3 6 7 9 0
Якщо коротко (детальніше див. Статтю у Вікіпедії ) алгоритм працює наступним чином:
- Ви починаєте зі списку цифр, які підлягають обробці, і проміжної цифри, яка встановлюється на 0.
- Для кожної цифри у списку ви обчислюєте нову проміжну цифру, використовуючи цифру як індекс стовпця, а попередню проміжну цифру - як індекс рядка.
- Кінцева проміжна цифра - контрольна цифра. Якщо ви перевіряєте число, на якому вже є додана контрольна цифра, остаточна проміжна цифра дорівнює 0, якщо число дійсне.
Ваша програма або функція повинна приймати рядок, який може містити будь-які символи, крім нуля, але він повинен стосуватися лише цифр у рядку. Він повинен або надрукувати (якщо програма), або повернути (якщо функція) початковий рядок із доданим розрахунковим контрольним розрядом. Якщо ви вирішили написати програму, програма може прийняти введення як аргумент або як стандартне введення. Якщо рядок введення порожній або не містить цифр, ви повинні повернути або додати нуль.
Деякі приклади:
Input | Output
------------+-------------
42 | 427
427 | 4270
2 to 2 | 2 to 29
23 42 76- | 23 42 76-5
- | -0