Норвежский номер рождения состоит из 11 цифр, составленных следующим образом:
DDMMYYiiikk
DD
это день (с 01-31)MM
это месяц (с 01-12)YY
это год (с 00-99). Это не дифференцируется между 1900 и 2000iii
это "индивидуальный номер"kk
две контрольные цифры
iii
определяется по году рождения и полу следующим образом
- 0000-1900: не обращайте внимания, есть некоторые несоответствия и особые случаи
- 1900-1999: диапазон = 000-499
- 2000-2039: диапазон = 500-999
- Женский: четные числа (и 000)
- Мужчина: Нечетные числа
Контрольные числа определяются следующим образом:
Давайте назовем 11 цифр:
d1 d2 m1 m2 y1 y2 i1 i2 i3 k1 k2
Тогда контрольные цифры можно рассчитать по уравнениям:
k1 = 11 - ((3 * d1 + 7 * d2 + 6 * m1 + 1 * m2 + 8 * y1 + 9 * y2 + 4 * i1 + 5 * i2 + 2 * i3) mod 11)
k2 = 11 - ((5 * d1 + 4 * d2 + 3 * m1 + 2 * m2 + 7 * y1 + 6 * y2 + 5 * i1 + 4 * i2 + 3 * i3 + 2 * k1) mod 11).
Для некоторых комбинаций контрольные номера k1
или k2
могут стать 10
. Если это так, номер будет недействительным.
Если модуль суммирования 11 для k1
или k2
равен 11, т.е. k1 = 11 - (11 mod 11)
тогда контрольная цифра будет 0, а не 11.
Вызов
Возьмите букву M
или F
(мужской или женский) и одиннадцатизначное число в качестве входных данных и проверьте, является ли номер рождения действительным в соответствии с приведенными выше правилами.
- Формат ввода и порядок не являются обязательными
- 11 чисел должны быть одним числом или последовательной строкой (вы не можете принять ввод как
DD, MM, YY, iii, kk
). - Можно предположить, что дата действительна (310699xxxxx не будет введено в качестве ввода)
- Вывод является истинным / ложным значением (1/0, истина / ложь и т. Д.)
- Программа или функция
- Все стандартные правила применяются
Вы можете найти все действительные числа на этой странице (на норвежском языке), выбрав дату.
Примеры:
M, 01010099931
True
F, 01029042620
True
M, 0101009841
False
F, 01010051866
True
F, 08021690849
True
M, 01029040105
True
M, 01029037473
False
Самый короткий код в байтах побеждает.
источник
["Q", "01010099931"]
вернетсяtrue
?)Ответы:
Python 3,
227221 байтФункция, которая принимает два аргумента: пол 'm' и номер рождения 'n', оба в виде строк. Возможно, придется еще поиграть в гольф, особенно на последней линии. Я буду продолжать работать над этим.
источник
JavaScript (ES2016),
275259255254252 байтГольф :
Тесты :
Ungolfed :
источник
JS, 343 байта
источник