Kezdőoldal » Tudományok » Egyéb kérdések » Ezt a kódfejtős feladatot...

Ezt a kódfejtős feladatot hogyan kéne megoldani?

Figyelt kérdés

Pénteken adta a matektanár és három ötöst adna annak aki megoldja. Én már két napja próbálom megoldani mert érdekel de sehogy sem sikerül. Csináltam hozzá egy kis képletet, amivel meg lehetne oldani de szerintem pár számnál nem működik (pl páros számoknál)


Feladat


Az ellenség a következő titkosítást használja: 31 betűs abc:

("_" a szóköz jele), a betűk értékei / kódjai:


1 2 3

0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0

_ 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



-Első lépésben az eredeti szöveg első betű értékeivel ciklusosan

eltolja az összes betűt (értékeinek megfelelően). Tehát pl. ha az

első betű g(=9), akkor minden betű értékéhez 9-et adunk és az így

kapott kódnak megfelelő betűt írjuk le az illető betű helyett. Ha

az összeadáskor 30-nál nagyobb számot kapunk, akkor az összegből

levonunk 31-et. (ún. ciklikus vagy "mod 31" hozzáadás).


-A második lépésben az előzőleg kapott betűsorozat második

betűjének értékeivel toljuk el, de csak azokat a betűket, amelynek a

második betűtől jobbra állnak és magát a második betűt is, az előző

bekezdásben említett módon.


-Az i-edik lépésben a legutoljára kapott betűsorozat i-edik betűjének

értékével toljuk el, de csak azokat a betűket, amelyek az i-edik betűtől

jobbra állnak és magát az i-edik betűt is.


-Az utolsó lépésben csak a legutolsó betűt toljuk el önmagával.



Példáúl: a málna (5-betűs) szó kódolása:



1. lépés: m = 15 miatt 1-5. betűket 15-tel eltoljuk (mod 31): zoy_n


2. lépés: o = 17 miatt 2-5. betűket 17-tel eltoljuk (mod 31): zbmoá


3. lépés: m = 15 miatt 3-5. betűket 15-tel eltoljuk (mod 31): zbzao


4. lépés: a = 1 miatt 4-5. betűket 1-el eltoljuk (mod 31): zbzáö


5. lépés: ö = 18 miatt 5. betűt 18-al eltoljuk (mod 31): zbzád



Feladat: dekódolja az alábbi üzenetet, amelyet a fenti módon titkosítottak:


znnseppdgqekfmz


2018. jan. 14. 01:04
 1/5 A kérdező kommentje:
kicsit eltolódtak az értékek de _ = 0 ... i = 10, j = 11 ... r = 20 ... z = 30
2018. jan. 14. 01:09
 2/5 anonim ***** válasza:

Annak hogy megoldjuk helyetted a feladatot nincs semmi értelme. A feladat semmi olyat nem tartalmaz amit nehéz megérteni. A feladat arra van hogy te gyakoroljad az összeadást kivonást.

Javaslom hogy elsőnek a málna dekódolását csináld mert minden lépést le lehet ellenőrizni.

A betűket írd át a hozzávaló számokká és csak a végén alakítsd vissza. (kivéve ha ellenőrizni akarod a málna dekódolásánál.)

Az utolsó betűvel kezd.

Ha páratlan számmal találkozol akkor hozzá kell adni 31-et és annak kell venni a felét.


z b z á d

30 3 30 2 5


Az utolsótól. Az 5 páratlan ezért 5+31=36/2=18

30 3 30 2 18

A 2 sima ügy 2/2=1, a 18-ból is el kell venni egyet.

30 3 30 1 17

30 3 15 17 2

A 30/2=15 ,1-15 -> 1+31-15=17,17-15=2,

30 17 29 0 16

ugyanígy a 30/2=15,17-15=2,0+31-15=16, 16-15=1

15 2 14 16 1

m á l n a


Na a "znnseppdgqekfmz" is ugyanígy kell csinálni.

2018. jan. 14. 12:01
Hasznos számodra ez a válasz?
 3/5 2*Sü ***** válasza:

Elsőként az a szerencsénk, hogy páratlan számú elemből áll a kódtábla. Mivel minden karakter esetén az utolsó lépésben önmagával toljuk el a kódot, azaz gyakorlatilag megduplázzuk, így esetenként lehet következtetni arra, hogy történt-e túlfutás, vagy sem. Ha a kapott kód páros, akkor nem lehetett túlfutás. Ha viszont páratlan, akkor biztos, hogy túlfutás történt.


Pl. ha az ezzel a kódduplázással 18-at kaptunk, az lehet a 9 duplája, viszont nem lehet a (18+31)/2 = 49/2, mert az nem lenne egész szám. Viszont ha páratlan számú a kódunk, mondjuk 17, akkor az eredeti kód nem lehetett 17/2, mert az nem egész, így csak (17+31)/2 = 48/2 = 24 lehetett.



Az első karakter a legegyszerűbb, hiszen azt csak egyetlen egyszer toltuk el. Mivel önmaga kódjával toltuk el, így tulajdonképpen megdupláztuk a kódját. „z” = 30, így az eredeti karakter kódja 30/2=15 volt, ami „m” karakternek felel meg.

(Jegyezzük meg: első betű = „m”, első eltolás = 15)


A második karaktert az első lépésben 15-el toltuk el, a második lépésben ezt a kódot dupláztuk meg. Ha az eredeti kódja x volt, akkor az első lépésben ((x+15) mod 31) lett, a második lépésben (2*((x+15) mod 31)) mod 31 lett. A második karakter „n”, aminek a kódja 16. Az eredeti kód tehát vagy 16/2=8, vagy (16+31)/2=47/2 volt. Ez utóbbi nem adna egészet, így tudjuk, hogy a második lépés előtt a második karakter kódja 8 volt. Az első lépésben 15-el való eltolás volt, így az eredeti kódja vagy 8-15, ami ugye negatív szám, így az nem lehetett, vagy (8+31)-15 = 24 volt, ami „u” betű.

(Jegyezzük meg: második betű = „u”, második eltolás = 8)


A harmadik karaktert az harmadik lépésben dupláztuk. A harmadik karakterünk „n”, aminek a kódja 16, így a harmadik lépés előtt csak és kizárólag 8 lehetett a kód, ebből kell levonni az eddigi eltolásokat: 8-(8+15)=-15. Itt tehát volt túlfutás, az eredeti kódot megkapjuk, ha addig adunk hozzá 31-et, amíg nem esik [0,30] intervallumba. Ezek alapján a harmadik karakter kódja 16 volt eredetileg, azaz egy „n” betű.

(Jegyezzük meg: harmadik betű = „n”, harmadik eltolás = 8)


És így tovább…


Röviden:

1. Állíts be egy ofszet értéket nullára!

2. Vedd sorba a karaktereket és végezd el az alábbi – 2-től 8-ig számozott –

műveleteket vele:

3. Vedd az kapott karakter kódját!

4. Ha a 3. lépésben kapott kód páros, oszd el kettővel, ha páratlan, akkor adj hozzá 31-et, és utána oszd el kettővel!

5. A 4. lépésben kapott kódból vond ki az ofszet értékét.

6. Ha szükséges, növeld az 5. lépésben kapott értéket 31-el addig, amíg nem kapsz nullánál nagyobb számot.

7. Keresd ki ér írd ki a 6. lépésben kapott kódhoz tartozó karaktert.

8. Add hozzá az ofszet értékéhez a 4. lépésben kapott értéket.


Ha lőszert látsz, ne ijedj meg! ;-)

2018. jan. 14. 12:32
Hasznos számodra ez a válasz?
 4/5 A kérdező kommentje:
Köszönöm szépen a válaszokat :) megcsináltam az első válaszoló módszerével és az enyémmel, így ki tudtam szűrni hogy melyik betűket számoltam el. 2. válaszolónak: Már tudom, hogy hol van a lőszer :D
2018. jan. 14. 16:47
 5/5 anonim ***** válasza:

nekem az jött ki, hogy ha


x_1, ..., x_n


az eredeti szöveg betűinek megfelelő számok ebben a sorrendben és


y_1, ..., y_n


a kapott kód betűinek megfelelő számok ebben a sorrendben, akkor


x_i = [y_i - (y_1 + y_2 + ... + y_{i-1})]/2

2018. jan. 17. 17:15
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!