🟡 Գաղտնագրում փոխարինմամբ

Նախորդ խնդիրներում մենք համուզվեցինք, որ Կեսարի գաղտնագրումը այդքան էլ հուսալի չէ, այն հնարավոր է կոտրել👺 և՛ կիրառելով հատարկման եղանակը և՛ օգտվելով տառերի հաճախության վիճակագրությունից։
Եկեք դիտարկենք գաղտնագրման ևս մեկ, ավելի հուսալի👌 ալգորիթմ։ Այս ալգորիթմում գաղտնագրման բանալին արդեն իրենից ներկայացնում է 26 երկարությամբ տող, որը օգտագործվում է մուտքային տողի ամեն տառը մեկ այլ տառով փոխարինելու համար։ Օրինակ, եթե օգտագործենք NQXPOMAFTRHLZGECYJIUWSKDVB բանալին, ապա գաղտնագրման ժամանակ A (այբուբենի առաջին տառը) տառը կփոխարինվի N տառով (բանալու առաջին տառով), B (այբուբենի երկրորդ տառը) տառը Q -ով (բանալու երկրորդ տառով), CX-ով և այսպես շարունակ (նույն տրամաբանությամբ փոքրատառ a - ն պետք է փոխարինվի փոքրատառ n-ով )։
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
N
Q
X
P
O
M
A
F
T
R
H
L
Z
G
E
C
Y
J
I
U
W
S
K
D
V
B
Օգտագործելով NQXPOMAFTRHLZGECYJIUWSKDVB բանալին, փորձեք ինքնուրույն կոդավորել, օրինակ, Hello բառը։

Գաղտնագրման արդյունք

HELLO բառը այս բանալիով գաղտնագրելուց հետո կստանանք Folle - տողը՝
H տառը  կփոխարիվի F -ով, e տառը՝ o -ով, l տառը՝ l -ով, o տառը e -ով։
 
Գաղտնագրված տվյալը վերականգնելու համար, դրա հասցեատերը պետք է նաև իմանա գաղտնագրման բանալու արժեքը։

Դե ինչ, եկե՛ք նախագծենք և իրականացնենք ծրագիր, որը օգտագործողից պահանջում է մուտքագրել տող և գաղտնագրման բանալին և էկրանին տպում է գաղտնագրված տողը։

  1. Ծրագրի օգտագործումը պարզ դարձնելու համար, տեքստի և բանալու արժեքի մուտքագրումից հետո անհրաժեշտ է դրանք տպել էկրանին հետևյալ ֆորմատով՝
    1. “plaintext: ”այնուհետև օգտագործողի մուտքագրած տողը
    2. “key: ” այնուհետև մուտքագրած բանալու արժեքը
  1. Գաղտնագրված տողը պետք է տպել էկրանին հետևյալ ֆորմատով՝
    1. ciphertext: ” այնուհետև գաղտնագրված տողը։ 
  1. Մեծատառ տառերը հարկավոր է փոխարինել համապատասխան մեծատառով, փոքրատառերը՝ փոքրատառերով (HELLOFOLLE, hellofolle)
  1. Թվերը և հատուկ սիմվոլները չեն փոխարինվում (”HE LLO1!" → “FO LLE1!"
  1. Եթե բանալու արժեքը վավեր չէ, ապա էկրանին հարկավոր է տպել “Invalid Key!” տողը։ Բանալին պետք է՝
    1. պարունակի այբուբենի բոլոր 26 տառերը, որպեսզի ալգորիթմը կարողանա ճիշտ փոխարինել ցանկացած մուտքային տող։
      1. տողի երկարություն պետք է հավասար լինի 26
      2. Տողի մեջ պետք է լինեն միայն տառեր
      3. Տողը չպետք է պարունակի տառերի կրկնություններ
    2. բանալին կարող է պարունակել և՛ մեծատառ և՛ փոքրատառ տառեր։

Ծրագրավորման ոճ

Խնդիրը գրելուց առաջ, ևս մեկ անգամ կարդացեք “Ծրագրավորման ոճ” դասը։ Մի գրե՛ք ամբողջ ծրագիրը մեկ main ֆունկցիայի մեջ։ Մտածեք, թե ի՞նչ տրամաբանական հատվածների (ֆունկցիաների) է կարելի բաժանել ծրագիրը, որպեսզի կոդը լինի հնարավորինս ընթեռնելի։ Ֆունկցիաներ գրելիս, փորձեք պահպանել «եզակի պատասխանատվության» (single responsobility) սկզբունքը։ Օգտագործե՛ք մտածված և իմաստային անուններ և՛ փոփոխականների և՛ ֆունկցիաների համար։
 

Constraints

Time limit: 0.2 seconds

Memory limit: 512 MB

Output limit: 1 MB

To check your solution you need to sign in
Sign in to continue