Procedure ROTx()

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

Procedure ROTx()

Message 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
; 
Dernière modification par Zorro le jeu. 04/août/2016 9:29, modifié 2 fois.
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Avatar de l’utilisateur
JohnJohnsonSHERMAN
Messages : 648
Inscription : dim. 13/déc./2015 11:05
Localisation : Allez, cherche...
Contact :

Re: Procedure ROTx()

Message par JohnJohnsonSHERMAN »

Simple variante du code César en fait, un décalage de lettres si j'ai bien suivi...
"Le bug se situe entre la chaise et le clavier"
Votre expert national en bogage et segfaults.

CPU : AMD A8 Quad core - RAM 8Gb - HDD 2To
  • Windows 10 x64 - PB 5.61 x64
  • Linux Ubuntu 16.04 LTS x64 (dual boot) - PB pas encore réinstallé
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

Re: Procedure ROTx()

Message par Zorro »

j'ai refait ce code, pour qu'il soit borné
maintenant, il n'y a plus de risque de sortir des limites :)
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Répondre