Σάββατο, 22 Σεπτεμβρίου 2018

Κρυπτογράφηση Μηνύματος

Βαθμός Δυσκολίας:
5/5
Εκφώνηση Ασκησης: 

Ένας επιχειρηματίας θέλει να στείλει ένα πολύ σημαντικό μηνύμα σε ένα συνεργάτη του και χρειάζεται την βοήθεια σου για να το κρυπτογραφήσει.
Για να φτιάξεις τον αλγόριθμο κρυπτογράφησης έχεις τα εξής δεδομένα:
Το κείμενο όπου ο επιχειρηματίας θέλει να κρυπτογραφήσει δίνεται στο πίνακα ΚΕΙΜ[1000] και ο κάθε χαρακτήρας κρυπτογραφείται σε 3 θέσεις στον πίνακα ΚΡΥΠ[3000].
Δίνεται πίνακας Α[27] που περιέχει τα 26 γράμματα του αγγλικού αλφάβητου καθώς και τον χαρακτήρα κενό(space).Επιπλέον δίνεται ο πίνακας Β[27] όπου περιέχει ανακατεμένα τα ίδια γράμματα αντίστοιχα για κάθε γράμμα του πίνακα Α καθώς και το νούμερο 9 για το χαρακτήρα του κενού(space).Για κάθε χαρακτήρα του Α[27] που ανήκει στο ΚΕΙΜ[1000] κρυπτογραφείται στις
θέσεις του πίνακα ΚΡΥΠ[1,4,7,κτλ] με βάση το πίνακα Β[27].Μετά από κάθε δεύτερη εμφάνιση στις θέσεις ΚΡΥΠ[1,4,7,κτλ] του ίδιου γράμματος από τον πίνακα Β2[8] ο οποίος περιέχει τα γράμματα που θα κρυπτογραφηθούν όταν εμφανιστούν 2η φορά, τότε στην επόμενη εμφάνιση (δηλαδή στην τρίτη) το γράμμα θα κρυπτογραφείται από τον πίνακα Β3[8] όπου περιέχει τα νούμερα απο το 1 μέχρι το 8.
πχ.Αν έχουμε ΒΒΒΒ και το Β κρυπτογραφείται από τον πίνακα Β[27] σε Α.Τότε θα γίνει ΑΑΑΑ.Αν όμως το Β ανήκει στον πίνακα Β2[8] και αντίστοιχα από το Β3[8] κρυπτογραφείται σε 1 τότε θα γίνει ΑΑ1Α.
Ο πίνακας Α[27] έχει χωριστεί σε 3 μέρη: PA[9],PB[9],PC[9] και ανάλογα το κάθε γράμμα σε πιο κομμάτι ανήκει κρυπτογραφείται αντίστοιχα από τους πίνακες  PA2[9],PB2[9],PC2[9]
Επίσης δίνονται οι πίνακες χ1[13],χ2[13] που αντιστοιχούν ο χ1 όταν το κείμενο κρυπτογραφείται από τον πίνακα Β και ο χ2 όταν το κείμενο κρυπτογραφείται από το πίνακα Β3[8].
Δηλαδή ο πρώτος κρυπτογραφημένος χαρακτήρας έχει την μορφή: Β[28]/Β3[8] + PA[9]/PB[9]/PC[9] + χ1[13]/χ2[13] = ΚΡΥΠ[1] + ΚΡΥΠ[2] + ΚΡΥΠ[3]
Να γραφτεί αλγόριθμος όπου:
Α.Να κρυπτογραφεί το μήνυμα του πίνακα ΚΕΙΜ[1000] με βάση τα παραπάνω δεδομένα στον πίνακα ΚΡΥΠ[3000] χωρίς την χρήση άλλων βοηθητικών πινάκων και στο τέλος να εμφανίζει το κρυπτογραφημένο μήνυμα.
Β.Να βρίσκει τον χαρακτήρα με την μεγαλύτερη συχνότητα από τον πίνακα ΚΡΥΠ[3000].
*Οι πίνακες χ1,χ2,PA2,PB2.PC2 ξεκινάνε απο την τιμή 1(πχ.χ1[1]) και αυξάνονται κατά 1 στην επόμενη κρυπτογράφηση.Όταν χρησιμοποιήσουν και την τελευταία τιμή του(πχ.χ1[13]) τότε μηδενίζουν και ξανακάνουν το ίδιο.

Επιμέλεια: Μάριος Χατζηαγγελάκης

H άσκηση συμμετέχει στον διαγωνισμό 1 Άσκηση = 1 Tablet.

 

Βαθμολογία Κριτών

Χρήστος Τσάλης Γιάννης Καψάλης Φανή Αναγνώστου Δημήτρης Τζανέκας Μίλτος Στάμος
8.2 9 8 10 9

 

Συνολική Βαθμολογία Κριτών                44.2

Συνολική Βαθμολογία από τα Likes        5

Συνολική Βαθμολογία                       49.2

 

Λύση Άσκησης: 

Αλγόριθμος Cryp
Δεδομένα //
Α[27],Β[27],χ2[13],χ1[13],PA[9],PB[9],PC[9],PA2[9],PB2[9],PC2[9],ΚΕΙΜ[1000],Β2[8],Β3[8]
//
λ ← 0
υ ← 0
μ ← 0
στα ← 0
στβ ← 0
στγ ← 0
Για ι από 1 μέχρι 3000
  ΚΡΥΠ[ι] ← 0
Τέλος_επανάληψης
Για ι από 1 μέχρι 27
  Αν ΚΕΙΜ[1] = Α[ι] τότε
    ΚΡΥΠ[1] ← Β[ι]
    ΚΡΥΠ[3] ← χ1[1]
  Τέλος_αν
Τέλος_επανάληψης
Για ι από 1 μέχρι 9
  Αν ΚΕΙΜ[1] = PA[ι] τότε
    ΚΡΥΠ[2] ← PA2[1]
    στα ← 1
  αλλιώς_αν ΚΕΙΜ[1] = PB[ι] τότε
    ΚΡΥΠ[2] ← PB2[1]
    στβ ← 1
  αλλιώς_αν ΚΕΙΜ[1] = PC[ι] τότε
    ΚΡΥΠ[2] ← PC2[1]
    στγ ← 1
  Τέλος_αν
Τέλος_επανάληψης
Για ι από 4 μέχρι 1000
  Για ξ από 1 μέχρι 27
    Αν ΚΕΙΜ[ι] = Α[ξ] τότε
      ρ ← ρ + 3
      ΚΡΥΠ[ρ] ← Β[ξ]
    Τέλος_αν
    Για ι από 1 μέχρι 8
      Αν ΚΡΥΠ[ρ] = Β2[ι] τότε
        μ ← μ + 1
        Αν μ = 3 τότε
          μ ← 0
          ΚΡΥΠ[ρ] ← Β3[ι]
          λ ← λ + 1
          ΚΡΥΠ[ρ + 2] ← χ2[λ]
          Αν λ = 13 τότε
            λ ← 0
          Τέλος_αν
        Τέλος_αν
      Τέλος_αν
    Τέλος_επανάληψης
  Τέλος_επανάληψης
Τέλος_επανάληψης
λ ← 0
μ1 ← στα
μ2 ← στβ
μ3 ← στγ
Για ι από 2 μέχρι 1000
  λ ← λ + 1
  Αν ΚΕΙΜ[ι] = PA[λ] τότε
    μ1 ← μ1 + 1
    ΚΡΥΠ[ι + 3] ← PA2[μ]
    Αν μ = 9 τότε
      μ1 ← 0
    Τέλος_αν
  αλλιώς_αν ΚΕΙΜ[ι] = PB[λ] τότε
    μ2 ← μ2 + 1
    ΚΡΥΠ[ι + 3] ← PB2[μ]
    Αν μ2 = 9 τότε
      μ2 ← 0
    Τέλος_αν
  αλλιώς_αν ΚΕΙΜ[ι] = PC[λ] τότε
    μ3 ← μ3 + 1
    ΚΡΥΠ[ι + 3] ← PC2[μ]
    Αν μ3 = 9 τότε
      μ3 ← 0
    Τέλος_αν
  Τέλος_αν
Τέλος_επανάληψης
μ ← 1
Για ι από 1 μέχρι 3000
  Αν ΚΡΥΠ[ι] = 0 τότε
    μ ← μ + 1
    ΚΡΥΠ[ι] ← χ1[μ]
    Αν μ = 13 τότε
      μ ← 0
    Τέλος_αν
  Τέλος_αν
Τέλος_επανάληψης
μαχ ← -1
ψ ← 1
Για ι από 2 μέχρι 3000
  Αν ΚΡΥΠ[ι] ≠ ΚΡΥΠ[ι - 1] τότε
    ψ ← 1
  αλλιώς
    ψ ← ψ + 1
  Τέλος_αν
  Αν ψ ≠ μαχ τότε
    μαχ ← ψ
    θ ← ΚΡΥΠ[ι]
  Τέλος_αν
Τέλος_επανάληψης
Για ι από 1 μέχρι 3000
  Εμφάνισε ΚΡΥΠ[ι]
Τέλος_επανάληψης
Εμφάνισε θ
Τέλος Cryp