Um número de nascimento norueguês consiste em 11 dígitos, compostos da seguinte maneira:
DDMMYYiiikk
DD
é o dia (de 01 a 31)MM
é o mês (de 01 a 12)YY
é o ano (de 00 a 99). Não é diferenciado entre 1900 e 2000iii
é o "número individual"kk
são dois dígitos de controle
iii
é determinado por ano de nascimento e sexo da seguinte maneira
- 0000-1900: Desconsidere, há alguma inconsistência e casos especiais
- 1900-1999: Intervalo = 000-499
- 2000-2039: Intervalo = 500-999
- Fêmea: números pares (e 000)
- Macho: números ímpares
Os números de controle são determinados da seguinte maneira:
Vamos chamar os 11 dígitos:
d1 d2 m1 m2 y1 y2 i1 i2 i3 k1 k2
Em seguida, os dígitos do controle podem ser calculados usando as equações:
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).
Para algumas combinações, os números de controle k1
ou k2
podem se tornar 10
. Se for esse o caso, o número será inválido.
Se o módulo de soma 11 para k1
ou k2
for 11, ou seja k1 = 11 - (11 mod 11)
, o dígito de controle será 0, não 11.
Desafio
Pegue uma letra M
ou F
(masculino ou feminino) e um número de onze dígitos como entrada e verifique se o Número de Nascimento é válido de acordo com as regras acima.
- O formato e a ordem de entrada são opcionais
- Os 11 números devem ser um número único ou uma sequência consecutiva (você não pode usar a entrada como
DD, MM, YY, iii, kk
). - Você pode assumir que a data é válida (310699xxxxx não será fornecida como entrada)
- A saída é um valor verdadeiro / falso (1/0, verdadeiro / falso etc.)
- Programa ou função
- Todas as regras padrão se aplicam
Você pode encontrar todos os números válidos nesta página (em norueguês) escolhendo uma data.
Exemplos:
M, 01010099931
True
F, 01029042620
True
M, 0101009841
False
F, 01010051866
True
F, 08021690849
True
M, 01029040105
True
M, 01029037473
False
O código mais curto em bytes vence.
fonte
["Q", "01010099931"]
os retornostrue
?)Respostas:
Python 3,
227221 bytesFunção que aceita dois argumentos, o gênero 'm' e o número de nascimento 'n', ambos como cadeias. Pode haver mais golfe a ser feito, especialmente na última linha. Vou continuar trabalhando nisso.
fonte
JavaScript (ES2016),
275259255254252 BytesGolfe :
Testes :
Ungolfed :
fonte
JS, 343 bytes
fonte