Gyakorlati alapok
Mikori az autórendszám?
A fejezet elméleti megközelítései A magyar autórendszám izgalmas rejtélyei című fejezetben kerültek kidolgozásra.
Ennek legfontosabb következtetése, hogy az algoritmus kellő információk hiányában csak részben tudja megmutatni a valós autórendszámkiadás listáját, tehát a megközelítés tisztán matematikai.
Ennek előzménye a következő volt.
Amint a magyar járműveken láthatjuk, a magyar autórendszám kis kivételtől
eltekintve 3 db nagybetűs karakterből és 3 db számból áll:
A kivételek az ideiglenes-, és egyéb rendeltetésű rendszámok; ezek E-Z-P
nagybetűk valamelyikével kezdődnek és további 5 számkaraktert tartalmaznak,
velük nem foglalkozunk.
Az alap karakterkészlet angol nyelv gyökerű, mert láthatóan nincsenek
megengedve a nemzeti betűkarakterek, például Ű, ebből következően 26
nagybetűből áll...
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
...így értékkészlete AAA és ZZZ között váltakozik.
A számok értékkészletét sem nehéz kitalálnunk, hiszen 000 és 999 között mozog.
Ha a 2 csoportot egyesítjük, akkor a teljes értékkészlet AAA-000 és ZZZ-999
között lesz. Ez veti fel a legfontosabb kérdést, miszerint mekkora lesz a
teljes variációs lehetőség, azaz AAA-000 és ZZZ-999 közötti tartomány?
A 3 db nagybetű variálgatása tisztán kombinatorikai kérdés, annak ismétléses
variációs változata és a végeredmény nem is olyan lesújtó, hiszen a 263 képlet
alapján az 17576 lesz. Ehhez jön
sorozatonként az 1000-szeres szorzó, hiszen 1 betűsorozathoz 1000 db további
számvariáció illeszthető. Például:
1. - AAA-000
...
1000. - AAA-999
Tehát a fenti részeredményt még meg kell szorozni 1000-rel:
17576 x 1000 = 17 576 000
A különbség A magyar autórendszám izgalmas rejtélyei című fejezethez képest, hogy ebben az évben (2022) a Belügyminisztérium lezárta ezen típusú rendszámok kiadását és újra tért. Erről részletesen írok Az új magyar autórendszám még izgalmasabb rejtélyei című fejezetben.
Az 17 576 000 db rendszámkiadás, mint elméleti összvariációs lehetőség tehát a 2022. évvel lezártnak tekinthető, ez egyúttal azt is jelzi, hogy ezt a mennyiséget (vagy számomra nem megállapítható hányadát) 2022 - 1990 = 32 év alatt "fogyasztották el". Ez évente a 17 576 000 / 32 képlet alapján 549250 db rendszámkiadást jelent (ez eddig csak becsült érték volt).
A rendszámtömeg teljes matematikai listázásához kvázinukleáris kombinatorikai
szuperfegyverünket töltjük csőre, ami az
egybeágyazott for ciklusok
használata. Kombinációs mélysége mindig annyi lesz, amennyi a variálandó
karakterek száma, jelen esetünkben 6 (mert 3 karakter + 3 számról van szó). Az
1., 2., 3. ciklus a betűket, a 4., 5., 6. ciklus a számokat variálja. Az angol
nagybetűs karakterkészletet érdemes letennünk egy állandó,
String típusú
tömbbe...
String[] tomb = {"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"}
...mert így elemeire könnyű lesz hivatkozni (tomb[x]).
A további különbség az eddigi listázó kódokhoz képest: most csakis arra vagyunk kíváncsiak, hogy mely rendszámoknál voltak az évfordulók. Ehhez kapcsolatot kell teremtenünk a rendszámkiadás konkrét számlálója (alább int count) és az évente kiadott rendszámmennyiség közt (549250). A trükk egyszerűen megvalósítható: ha count számláló 549250-tel osztott maradéka 0 (if(count % 549250 == 0)), akkor az éppen az évforduló váltáspontja és pontosan ott kell elkapnunk a rendszámot.
Nézzük meg a futtatható Java-kódot:
public class Main {
public static void main(String[] args) {
String[] tomb =
{"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"};
int count = 1;
int year = 1990;
for(int i = 0; i < tomb.length; i++){
for(int j = 0; j < tomb.length; j++){
for(int k = 0; k < tomb.length; k++){
for(int l = 0; l <= 9; l++){
for(int m = 0; m <= 9; m++){
for(int n = 0; n <= 9; n++){
if(count == 1) {
System.out.println(year + ".ev: " + tomb[i] + tomb[j] + tomb[k] + "-" + l + m
+ n
+ " (Sorszam: " + count + ".)");
}
if(count % 549250 == 0) {
year++;
System.out.println(year + ".ev: " + tomb[i] + tomb[j] + tomb[k] + "-" + l + m
+ n
+ " (Sorszam: " + count + ".)");
}
count++;
}
}
}
}
}
}
}
}
Végeredmény:
1990.ev: AAA-000 (Sorszam: 1.)
1991.ev: AVD-249 (Sorszam: 549250.)
1992.ev: BQG-499 (Sorszam: 1098500.)
1993.ev: CLJ-749 (Sorszam: 1647750.)
1994.ev: DGM-999 (Sorszam: 2197000.)
1995.ev: EBQ-249 (Sorszam: 2746250.)
1996.ev: EWT-499 (Sorszam: 3295500.)
1997.ev: FRW-749 (Sorszam: 3844750.)
1998.ev: GMZ-999 (Sorszam: 4394000.)
1999.ev: HID-249 (Sorszam: 4943250.)
2000.ev: IDG-499 (Sorszam: 5492500.)
2001.ev: IYJ-749 (Sorszam: 6041750.)
2002.ev: JTM-999 (Sorszam: 6591000.)
2003.ev: KOQ-249 (Sorszam: 7140250.)
2004.ev: LJT-499 (Sorszam: 7689500.)
2005.ev: MEW-749 (Sorszam: 8238750.)
2006.ev: MZZ-999 (Sorszam: 8788000.)
2007.ev: NVD-249 (Sorszam: 9337250.)
2008.ev: OQG-499 (Sorszam: 9886500.)
2009.ev: PLJ-749 (Sorszam: 10435750.)
2010.ev: QGM-999 (Sorszam: 10985000.)
2011.ev: RBQ-249 (Sorszam: 11534250.)
2012.ev: RWT-499 (Sorszam: 12083500.)
2013.ev: SRW-749 (Sorszam: 12632750.)
2014.ev: TMZ-999 (Sorszam: 13182000.)
2015.ev: UID-249 (Sorszam: 13731250.)
2016.ev: VDG-499 (Sorszam: 14280500.)
2017.ev: VYJ-749 (Sorszam: 14829750.)
2018.ev: WTM-999 (Sorszam: 15379000.)
2019.ev: XOQ-249 (Sorszam: 15928250.)
2020.ev: YJT-499 (Sorszam: 16477500.)
2021.ev: ZEW-749 (Sorszam: 17026750.)
2022.ev: ZZZ-999 (Sorszam: 17576000.)
Fent említettük, hogy a fenti levezetés pusztán matematikai, azonban a
valósághoz azért kis tapasztalattal közelíthetünk. Leginkább úgy, hogyha
felfedezzük, hogy konkrét rendszámkiadáskor bizonyos betűket garantáltan
kihagytak, ezek a Q, W, X és Y voltak. A betűhalmazt reprezentáló tömbünk
tehát a 4 betű kivételével így fog módosulni:
String[] tomb = {"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","R","S","T","U","V","Z"}
Ez már csak 22 db betű, tehát a végeredmény a 223 * 1000 képlet alapján 10 648 000 teljes rendszámkiadási mennyiséget jelez. Ez 10 648 000 / 32 képlet alapján évente 332750 db rendszámkiadást jelent. Módosítsuk ezen adatokkal a kódot:
public class Main {
public static void main(String[] args) {
String[] tomb =
{"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","R","S","T","U","V","Z"};
int count = 1;
int year = 1990;
for(int i = 0; i < tomb.length; i++){
for(int j = 0; j < tomb.length; j++){
for(int k = 0; k < tomb.length; k++){
for(int l = 0; l <= 9; l++){
for(int m = 0; m <= 9; m++){
for(int n = 0; n <= 9; n++){
if(count == 1) {
System.out.println(year + ".ev: " + tomb[i] + tomb[j] + tomb[k] + "-" + l + m
+ n
+ " (Sorszam: " + count + ".)");
}
if(count % 332750 == 0) {
year++;
System.out.println(year + ".ev: " + tomb[i] + tomb[j] + tomb[k] + "-" + l + m
+ n
+ " (Sorszam: " + count + ".)");
}
count++;
}
}
}
}
}
}
}
}
Végeredmény:
1990.ev: AAA-000 (Sorszam: 1.)
1991.ev: APC-749 (Sorszam: 332750.)
1992.ev: BIF-499 (Sorszam: 665500.)
1993.ev: CBI-249 (Sorszam: 998250.)
1994.ev: CRK-999 (Sorszam: 1331000.)
1995.ev: DJN-749 (Sorszam: 1663750.)
1996.ev: ECR-499 (Sorszam: 1996500.)
1997.ev: ESU-249 (Sorszam: 2329250.)
1998.ev: FKZ-999 (Sorszam: 2662000.)
1999.ev: GEC-749 (Sorszam: 2994750.)
2000.ev: GUF-499 (Sorszam: 3327500.)
2001.ev: HMI-249 (Sorszam: 3660250.)
2002.ev: IFK-999 (Sorszam: 3993000.)
2003.ev: IVN-749 (Sorszam: 4325750.)
2004.ev: JNR-499 (Sorszam: 4658500.)
2005.ev: KGU-249 (Sorszam: 4991250.)
2006.ev: KZZ-999 (Sorszam: 5324000.)
2007.ev: LPC-749 (Sorszam: 5656750.)
2008.ev: MIF-499 (Sorszam: 5989500.)
2009.ev: NBI-249 (Sorszam: 6322250.)
2010.ev: NRK-999 (Sorszam: 6655000.)
2011.ev: OJN-749 (Sorszam: 6987750.)
2012.ev: PCR-499 (Sorszam: 7320500.)
2013.ev: PSU-249 (Sorszam: 7653250.)
2014.ev: RKZ-999 (Sorszam: 7986000.)
2015.ev: SEC-749 (Sorszam: 8318750.)
2016.ev: SUF-499 (Sorszam: 8651500.)
2017.ev: TMI-249 (Sorszam: 8984250.)
2018.ev: UFK-999 (Sorszam: 9317000.)
2019.ev: UVN-749 (Sorszam: 9649750.)
2020.ev: VNR-499 (Sorszam: 9982500.)
2021.ev: ZGU-249 (Sorszam: 10315250.)
2022.ev: ZZZ-999 (Sorszam: 10648000.)