Gyakorlati alapok

A magyar autórendszám izgalmas rejtélyei

 

Rendkívül érdekes témakör következik: kilistázzuk a magyar autórendszámokat! (Majd később látjuk, hogy csak megpróbáljuk…) Engem legalábbis érdekelt a megoldás, hiszen vele szinte klasszikusnak mondható kombinatorikai kérdéskörrel szembesülhetünk.


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:
 

www.informatika-programozas.hu - Kombinatorika - Autórendszámok

 

www.informatika-programozas.hu - További információk!

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 (kódja a fejezet végén található). 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
 

Az elméleti matematikai kiindulópontok tehát a fentiek voltak. Ha évente 500.000 autórendszámot osztanak ki Magyarországon, akkor a fenti variációs mennyiség elég lesz a kezdéstől számított 35 évre. Ha ezt 1990-ben kezdte a hatóság, akkor a rendszámvariációk ezen fajtája ki fog futni 2025-re.

 

www.informatika-programozas.hu - További információk!

 

Új információ 2022-ben: ebben az évben 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.

Ám a ténylegesen felhasznált rendszámvariációk ennél nyilvánvalóan kevesebben vannak. Egyrészt garantáltan nem megengedettek a valamilyen módon etikátlan vagy kellemetlen értelmet adó betűkombinációk, például SEX, FBI, stb., másrészről láthatóan a nyilvántartás tiltja az olyan kiemelt rendszámvariációs fordulópontokat is, mint például AAA-000, BBB-000. Mindezt csupán tapasztalatból állítom, a tiltási lista teljes spektrumáról nincs tudomásom, de egyértelműen létezik. A kieső variációk azonban nem alkotnak számottevő tömeget, ezért és az említett információhiány miatt a teljes listázáskor nem fogjuk azokat figyelembevenni.


www.informatika-programozas.hu - További információk!

További személyes megjegyzéseim: egyszer láttam egy SEX-… rendszámú Mercedest. A rendszám tehát – bár etikai tartalma igen kétséges-, valószínűleg jó pénzért mégis a hatóság által kiosztásra került. Másrészről szintígy kérdőjelezhető meg a JEW rendszám etikai tartalma, amelyből viszont nagyon sokat osztottak ki és amelyen a világ összes olyan országában röhögnek, ahol beszélnek angolul és ismerik a zsidó népet.


Összességében kijelenthetjük, hogy ha rendszámhoz bármilyen tartalom köthető, azaz nem véletlenszerű betűkombinációból áll, akkor annak felhasználása alapértelmezésben kérdéses.

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]). Ha ezután a futtatásra kattintunk, akkor a JVM derekasan elkezdi listázni a variációkat és akár néhány óra alatt végezhet is.

 

www.informatika-programozas.hu - További információk!

Gyors számítás: ha a kódba 1 másodperces késleltetést iktatnánk, akkor nyilvánvalóan 17 576 000 másodpercig tartana a listázás. Ez a 17 576 000 / 60 / 60 /24 képlet alapján több mint 203 napot jelentene.

A listázást a konzol feletti piros gombra való kattintással tudjuk megállítani. Arra se számítsunk, hogy a gyorsaság miatt a konzol pontosan fogja megjeleníteni, emiatt a végeredménynél is csak 1 rövid részletet tudtam megmutatni, de igyekeztem éppen 1 fordulópontot elkapni:

AJN-999 → AJO-000

Nézzük meg a futtatható Java-kódot:

 

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 

 

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"};
    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++){
                            System.out.print(tomb[i] + tomb[j] + tomb[k] + "-" + l + m + n);
                            System.out.println();
                            }
                        }
                    }
                }
            }
        }
    }
}


Végeredmény:
...
AJN-990
AJN-991
AJN-992
AJN-993
AJN-994
AJN-995
AJN-996
AJN-997
AJN-998
AJN-999
AJO-000
AJO-001
AJO-002
AJO-003
AJO-004
AJO-005


További érdekességként említhető meg, hogy a kódot egy karakter típusú tömbbel kezdtem (char[] tomb) megoldani, ám felhasználásakor egy meglepő anomáliával szembesültem. Bár látszólag minden rendben volt, ám a végeredmény a betűoldalon mégsem betű-, hanem számvariációk lettek:

 

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 



public class Main {
public static void main(String[] args) {
    char[] 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'};
    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++){
                            System.out.print(tomb[i] + tomb[j] + tomb[k] + "-" + l + m + n);
                            System.out.println();
                            }
                        }
                    }
                }
            }
        }
    }
}


Végeredmény:

...
215-599
215-600
215-601
215-602
215-603
215-604
215-605
215-606
215-607
215-608
215-609
215-610
215-611
215-612
215-613


A karaktertömb elemeire a for ciklusokban többféle trükk bevetésével sem tudtam megfelelően hivatkozni, bár a tömböt közvetlenül kilistázva a kívánt tartalmat kaptam meg:

 

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 


public class Main {
public static void main(String[] args) {
    char[] 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'};
    for(int i = 0; i < tomb.length; i++){
        System.out.print(tomb[i] + " ");
        }
    }
}
 

Végeredmény:
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

Az anomália rejtélyes, de szavatoltan összefüggésben áll a Karakter című fejezetben leírtakkal: a karaktertípus és az integer számtípus között átjárhatóság, konvertálhatóság van éppúgy a Unicode-tábla, mint a Java-rendszeren belül, ez pedig bizonyos esetekben a fenti anomáliát fogja produkálni. Ha volna valakinek erre egy elegáns megoldása, azt szívesen publikálnám.

További érdeklődők alább tanulmányozhatják a szimpla betűvariációs kódot, amelybe 1 kis számláló is be lett építve, hogy a listázás, valamint a kombinatorikai részeredmény le legyen ellenőrizve:
 

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 


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;
    for(int i = 0; i < tomb.length; i++){
        for(int j = 0; j < tomb.length; j++){
            for(int k = 0; k < tomb.length; k++){
                System.out.print(count + ". - " + tomb[i] + tomb[j] + tomb[k]);
                System.out.println();
                count++;
                }
            }
        }
    }
}

 

Végeredmény:
...
17472. - ZVZ
17473. - ZWA
17474. - ZWB
17475. - ZWC
17476. - ZWD
17477. - ZWE
17478. - ZWF
17479. - ZWG
17480. - ZWH
17481. - ZWI
17482. - ZWJ
17483. - ZWK
17484. - ZWL
17485. - ZWM
17486. - ZWN
17487. - ZWO
17488. - ZWP
17489. - ZWQ
17490. - ZWR
17491. - ZWS
17492. - ZWT
17493. - ZWU
17494. - ZWV
17495. - ZWW
17496. - ZWX
17497. - ZWY
17498. - ZWZ
17499. - ZXA
17500. - ZXB
17501. - ZXC
17502. - ZXD
17503. - ZXE
17504. - ZXF
17505. - ZXG
17506. - ZXH
17507. - ZXI
17508. - ZXJ
17509. - ZXK
17510. - ZXL
17511. - ZXM
17512. - ZXN
17513. - ZXO
17514. - ZXP
17515. - ZXQ
17516. - ZXR
17517. - ZXS
17518. - ZXT
17519. - ZXU
17520. - ZXV
17521. - ZXW
17522. - ZXX
17523. - ZXY
17524. - ZXZ
17525. - ZYA
17526. - ZYB
17527. - ZYC
17528. - ZYD
17529. - ZYE
17530. - ZYF
17531. - ZYG
17532. - ZYH
17533. - ZYI
17534. - ZYJ
17535. - ZYK
17536. - ZYL
17537. - ZYM
17538. - ZYN
17539. - ZYO
17540. - ZYP
17541. - ZYQ
17542. - ZYR
17543. - ZYS
17544. - ZYT
17545. - ZYU
17546. - ZYV
17547. - ZYW
17548. - ZYX
17549. - ZYY
17550. - ZYZ
17551. - ZZA
17552. - ZZB
17553. - ZZC
17554. - ZZD
17555. - ZZE
17556. - ZZF
17557. - ZZG
17558. - ZZH
17559. - ZZI
17560. - ZZJ
17561. - ZZK
17562. - ZZL
17563. - ZZM
17564. - ZZN
17565. - ZZO
17566. - ZZP
17567. - ZZQ
17568. - ZZR
17569. - ZZS
17570. - ZZT
17571. - ZZU
17572. - ZZV
17573. - ZZW
17574. - ZZX
17575. - ZZY
17576. - ZZZ

 

Ha már itt tartunk, gyorsan illesszük ide Pálinkó Tímea házi feladatát, amely a jelen fejezet témája volt. Egyetlen és fontos különbség azonban, hogy Tímeának külön függvényes megoldásban kellett megoldania a feladatot...

 

www.informatika-programozas.hu - Ez a programozási feladat nehéz lesz!

 

...amely tehát még nem része az aktuális fejezetcsomagnak (az csak a Gyakorlati alapok II. című csomagtól tananyag). Az ok, amiért a kódot mégis ide szerkesztettem, hogy a külön függvényes megoldás viszonylag egyszerű és ezért nem kívántam hozzá új fejezetet nyitni. Nézzük meg a futtatható Java kódot:

 

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 


public class Rendszam {
public static String rendszam(String betu){
String tombBetu[] = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "P", "R", "S", "T", "V", "Z"};
String rendszam = new String();
    for(int i = 0; i < tombBetu.length; i++){
        for( int j = 0; j < tombBetu.length; j++){
            for(int k = 0; k < tombBetu.length; k++){
                for(int l = 0; l <= 9; l++){
                    for (int m = 0; m <= 9; m++){
                        for (int n = 0; n <= 9; n++){
                            rendszam = tombBetu[i] + tombBetu[j] + tombBetu[k] + "-" + l + m + n;
                            System.out.println(rendszam);
                            }
                        }
                    }
                }
            }
        }
    return rendszam;
}

public static void main(String[] args) {
    rendszam("");
    }
}

 

Végeredmény:

...

ZZZ-990
ZZZ-991
ZZZ-992
ZZZ-993
ZZZ-994
ZZZ-995
ZZZ-996
ZZZ-997
ZZZ-998
ZZZ-999