Kryptogram je matematická rovnica, kde sú číslice zastúpené písmenami. Cieľom je nájsť všetky možné kombinácie číslic, ktoré rovnici vyhovujú. Rovnicia obsahuje rôzne číslice, ktoré nesmú byť rovnaké a nemôžu začínať nulou. V článku sú popísané metódy na riešenie kryptogramov, vrátane použitia rekurzívnych funkcií a hrubej sily na generovanie kombinácií.
- Kryptogram je rovnice s písmenami zastupujúcimi číslice.
- Rovnica musí obsahovať rôzne číslice, ktoré nesmú začínať nulou.
- Na riešenie kryptogramov sa používajú vnorené cykly alebo rekurzívne funkcie.
- Funkcia kryptogram kontroluje, či sú hodnoty premenných správne.
- Funkcia vypis zobrazuje platné kombinácie číslic.
Kryptogram je špeciálna rovníca, ktorá pozostáva pseudo-čísel, v ktorých sú číslice vyjadrené pomocou znakov. Takto sa každá číslica stáva neznámou. Našou úlohou je zistiť všetky možné kombinácie číslic, pre ktoré rovnica platí.
Kryptogramatickou rovnicou môže byť napríklad rovnica v tvare:
ABB + ABB + ABB + CBA = BDAE
V rovnici písmená A, B, C, D, E predstavujú päť rôznych číslic, z ktorých môže byť kryptogram zostavený. Hodnoty A, B, C, D, E musia byť teda tiež rôzne, pričom platí: A != B != C != D != E
Žiadne číslo nesmie začínať nulou. Z toho vyplýva skutočnosť, že v horeuvedenej rovnici číslice A, B, C nesmú byť nuly.
Ak má kryptogram x-roznych číslic (neznámych), voláme ho kryptogram x-tého rádu. Horeuvedená rovnica teda predstavuje kryptogram 5-teho rádu, kedže má 5 neznámych.
Napíšme si funkciu, ktorá bude zisťovať rovnosť kryptogramu pre konkrétne hodnoty neznámych. Neznáme budú rovnici odovzdávané prostredníctvom poľa. Pre číslice A, B vypočítame hodnotu pozičného výrazu ABB podľa vzťahu 100 * A + 10 * B + 1 * C a pod.
bool kryptogram (int* pole) { if ( 100 * A + 10 * B + C + 100 * A + 10 * B + C + 100 * C + 10 * B + A == 1000 * B + 100 * D + 10 * A + E ) return true; else return false; }
Funkcia preberie konkrétne hodnoty premenných A, B, C, D, E v poli "pole". Pomocou makra v c++ definujeme, že výraz A zastupuje vo funkcií výraz pole[0], výraz B je ekvivalentný výrazu pole[1], atď:
#define A pole[0] #define B pole[1] ... #define Z pole[25]
Po zavolaní funkcie kryptogram budú konkrétne hodnoty v poli pole[] konvertované na premenné A, B, C ... Ak rovnosť platí, kryptogram vracia hodnotu true.
Ako teda nájsť všetky riešenia kryptogramu ? Jediným riešením je použitie hrubej sily v zmysle dostadzovania všetkých možných kombinácií číslic do kryptogramatickej funkcie. Pre statický počet rôznych číslic môžeme navrhnúť veľmi jednoduchý systém vnorených cyklov. Toto riešenie však je značne primitívne a viazané iba na konkrétny kryptogram. Ak pridáme ďalšie neznáme do kryptogramu - zmeníme jeho rád, treba ručne pridať aj ďalšie vnorené cykly.
Pre kryptogram 5-teho stupňa (neznáme A, B, C, D, E) by sme museli použiť 5 návzájom vnorených cyklov:
for (int A=0; B
🤔 Najčastejšie otázky k téme
Čo je kryptogram?
Kryptogram je matematická rovnica, kde sú číslice vyjadrené pomocou písmen, pričom každé písmeno predstavuje inú číslicu.
Ako sa riešia kryptogramy?
Kryptogramy sa riešia pomocou hrubej sily, kde sa generujú všetky možné kombinácie číslic, alebo pomocou rekurzívnych funkcií.
Aké sú obmedzenia pri kryptogramoch?
Obmedzenia zahŕňajú, že všetky číslice musia byť rôzne a žiadna číslica nesmie začínať nulou.