Bu çok basit bir algoritma, eminim ki birçok farklı dilde çözülebilir. İspanya'da kimlik kartları ( DNI olarak bilinir ) 8 sayı ve bir kontrol karakterinden oluşur. Kontrol karakteri aşağıdaki algoritma ile hesaplanır: sayıyı 23'e bölün, işlemin geri kalanını alın ve bu tabloya göre bir karakterle değiştirin:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
T R W A G M Y F P D X B N J Z S Q V H L C K E
DNI İspanya'da yaşayan bir yabancı kişiye aitse, ilk basamak olarak değiştirilir X
, Y
ya Z
ve bir denir NIE . Bu durumda, kontrol karakteri hesaplanmadan önce aşağıdaki ikameler yapılır:
X Y Z
0 1 2
Kontrol karakterini almanıza yardımcı olan çok sayıda çevrimiçi hesap makinesi var, ancak bu kodu ne kadar kısa yazabilirsiniz? string
DNI numarasıyla (her zaman 8 alfasayısal karakterden oluşacaktır) alan ve yalnızca hesaplanan tek kontrol karakterini döndüren ve daha fazla bir şey olmayan (sondaki yeni satır kabul edilir) bir algoritma (program veya işlev) yazın .
Notlar:
- DNI her zaman büyük harfle yazılır, ancak algoritmanızda giriş ve çıkışı büyük veya küçük harf olarak seçebilirsiniz, tutarlı olun.
- Gerçek hayatta, 2008'den önce yayınlanan bazı NIE'lerin
X
,Y
ya daZ
oyundan sonra 8 hane vardır , ancak bu oyunun amaçları için, günümüzde olduğu gibi 7 hane olduğunu düşünebilirsiniz. - Giriş dizesinin her zaman 8 karakter olacağını düşünebilirsiniz, ancak "8 basamak" biçiminde veya "[XYZ] artı 7 basamak" biçiminde değilse, bir hata döndürmeniz (seçtiğiniz) veya sadece atmanız gerekir. bir istisna.
Test senaryoları:
00000010 -> X (HRM Juan Carlos I's DNI number)
01234567 -> L
98765432 -> M
69696969 -> T
42424242 -> Y
Z5555555 -> W (Z=2)
Y0000369 -> S (Y=1)
A1234567 -> <Error code or exception>
1231XX12 -> <Error code or exception>
Bu kod golf , bu yüzden her dil için en kısa kod kazanabilir!