Page 1 sur 1

Procedure ROTx()

Publié : mer. 03/août/2016 11:48
par Zorro
une autre forme de codage de text, et je vais m'arreter la :)

celle ci est un dérivé du ROT13
le principe du rot13 est le suivant

on a un alphabet coupé en deux : (donc de 13 lettres )

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

et lorsqu'on veux ecrire une lettre on prends celle qui est en face
par exemple : Michel deviens ZVPUERY
si on regarde bien ça reviens a prendre la lettre 13 positions plus loin ...d'ou le terme de Rotation
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
pour le M on prends la lettre 13 positions plus loin, on tombe sur Z

et si nous avions pris la lettre N , et bien il aurai fallu une lettre apres le Z
dans ce cas, on prends la lettre du debut (on reviens a 1 ) donc la lettre A

ici j'ai étendu le truc en permettant un decalage de X position
ici j'utilise une rotation de 6 (un decalage en fait )

Code : Tout sélectionner


;***********************************************
;Titre  :*ROTx
;Auteur  : Zorro
;Date  :04/08/2016
;Heure  :10:26:12
;Version Purebasic :  PureBasic 5.50 (Windows - x86)
;Version de l'editeur :EPB V2.64
; Libairies necessaire : Aucune 
;***********************************************


Declare.s ROTx(nb,txt.s,mode)
debug " test : rotation de 6"
text$="si ma tante en avait, on l'appelerai tonton" ; texte a encoder
debug "text en clair :"+text$
text_encode$= ROTx(6,text$,1) ; on va effectuer une rotation de 6
debug "text encodé = "+ text_encode$
text_decode$=ROTx(6,text_encode$,0) ; on va effectuer une rotation de 6 inverse
debug "text décodé = "+text_decode$


Procedure.s ROTx(nb,txt.s,mode)
		;Zorro		
		Alphabet.s="abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
		sortie.s=""
		if nb>len(Alphabet.s):nb=nb-len(Alphabet.s):endif
		if nb<1:nb=len(Alphabet.s)-nb:endif
		select mode
		Case 1 ; encode
				For p=1 to Len(txt.s)
						car.s=mid(txt.s,p,1)
						pos=FindString(Alphabet.s,car.s)
						if pos>0			
								pos=(pos+nb)% Len(Alphabet.s)
								sortie.s=sortie.s+Mid(Alphabet.s,pos ,1)
						else ; le caractere est inconnu de l'alphabet, on ne le code pas
								sortie.s=sortie.s+car.s
						Endif
				Next p
		Case 0 ;Decode
				For p=1 to Len(txt.s)
						car.s=mid(txt.s,p,1)
						pos=FindString(Alphabet.s,car.s)
						if pos>0			
								pos=(pos-nb) % Len(Alphabet.s)
								sortie.s=sortie.s+Mid(Alphabet.s,pos,1)
						else ; le caractere est inconnu de l'alphabet, on ne le code pas
								sortie.s=sortie.s+car.s
						Endif
				Next p
		EndSelect
		ProcedureReturn   sortie.s
EndProcedure
; 

Re: Procedure ROTx()

Publié : mer. 03/août/2016 11:50
par JohnJohnsonSHERMAN
Simple variante du code César en fait, un décalage de lettres si j'ai bien suivi...

Re: Procedure ROTx()

Publié : jeu. 04/août/2016 9:29
par Zorro
j'ai refait ce code, pour qu'il soit borné
maintenant, il n'y a plus de risque de sortir des limites :)