C_far

[Outil] print

7 messages dans ce sujet

Y a 2 ans, j'avais découvert un truc sympatoche en Pawn et je l'ai exploité pour m'amuser.

Certains l'ont surement remarqué, mais sur mon profil dans "A propos" (j'ai mis le forum en anglais, donc j'pense que c'est ça), on peut y voir une ligne de code avec l'appel de print et un contenu bizarre à l'intérieur :

print({1214849097, 661463108, 1970563173, 1768697344});

Si on teste le code, on voit dans la console que ça affiche "Hi I'm Dutheil.", j'avais fait ça de manière brute avec une méthode rapide quand y a pas trop de caractères.

J'avais compris la logique de pourquoi cette valeur vaut tel(s) caractère(s), mais sans plus.

 

Et cet après-midi @vitespirite est venu me demander comment j'avais réalisé ça, je lui ai donc montré cette méthode et j'ai eu l'idée de concevoir cet outil en version web qui converti directement votre chaîne de caractères :

http://c-far.fr/samp/print/

 

Donc voilà, vous en faites ce que vous voulez.

Y a le lien de la doc que j'ai conçue et dont je m'étais servi à l'époque pour comprendre la logique.

Y a pas de design, car ça en vaut pas la peine.

Modifié par C_far
1 personne aime ça

Partager ce message


Lien à poster
Partager sur d’autres sites

J'ai réussi chef ^_^


ConvertToUnknown(string[])
{
	new position,
		actual_word,
		nb_word,
		puissance,
		result[10] = {0, 0, ...};

	for(new i; string[i] != EOS; i++)
	{
		puissance = 2;
		if(++position > 4)
		{
			position = 1;
			result[nb_word++] = actual_word;
			actual_word = 0;
		}
		for(new j = 1, h = 8 * (4 - position); j < h; j++)
			puissance *= 2;
		if(puissance == 2)
			puissance--;
		actual_word += puissance * string[i];
	}
	result[nb_word++] = actual_word;

	for(new i; i < nb_word; i++)
		printf("print({%i});", result[i]);

	return result;
}

Le seul soucis est que l'utilisateur doit lui même assembler les résultats sous la forme d'un seul print. :P 

Modifié par Dayrion

Partager ce message


Lien à poster
Partager sur d’autres sites
18 minutes ago, Dayrion said:

J'ai réussi chef ^_^

Le seul soucis est que l'utilisateur doit lui même assembler les résultats sous la forme d'un seul print. :P 

Tu peux mieux faire et sans que l'utilisateur doive assembleur les résultats ;)

 

Edit : J'vois que tu comprends un peu la logique des strings packed, mais tu peux optimiser les calculs :D

 

Salut ! = (Salu), (t !)
Salut !	= [Diff<B-A>] * Ascii<S> + [Diff<AB-AA>] * Ascii<a> + [Diff<AAB-AAA>] * Ascii<l> + [Diff<AAAB-AAAA>] * Ascii<u>, [Diff<B-A>] * Ascii<t> + [Diff<AB-AA>] * Ascii<Space> + [Diff<AAB-AAA>] * Ascii<!>
Salut !	= 16777216 * 83 + 65536 * 97 + 256 * 108 + 1 * 117, 16777216 * 116 + 65536 * 32 + 256 * 33
Salut !	= 1398893685, 1948262656

 

Modifié par C_far

Partager ce message


Lien à poster
Partager sur d’autres sites
Il y a 2 heures, C_far a dit :

Tu peux mieux faire et sans que l'utilisateur doive assembleur les résultats ;)

 

Edit : J'vois que tu comprends un peu la logique des strings packed, mais tu peux optimiser les calculs :D

 

Salut ! = (Salu), (t !)
Salut !	= [Diff<B-A>] * Ascii<S> + [Diff<AB-AA>] * Ascii<a> + [Diff<AAB-AAA>] * Ascii<l> + [Diff<AAAB-AAAA>] * Ascii<u>, [Diff<B-A>] * Ascii<t> + [Diff<AB-AA>] * Ascii<Space> + [Diff<AAB-AAA>] * Ascii<!>
Salut !	= 16777216 * 83 + 65536 * 97 + 256 * 108 + 1 * 117, 16777216 * 116 + 65536 * 32 + 256 * 33
Salut !	= 1398893685, 1948262656

 

Si tu as des petites indications ou des petits conseils mh. :/

Modifié par Dayrion

Partager ce message


Lien à poster
Partager sur d’autres sites

@Dayrion

 

#include "a_samp"

main()
{
	new 
		string[] = "Lorem ipsum abla op",
		result[512];

	result = convert(string);

	printf("print({%s});", result);
}

convert(const string[])
{
	new
		result[512],
		array_words[128][5];

	for(new size = str_split(array_words, string), i = 0; i < size; i++)
	{
		new 
			value = 0;

		for(new j = 0; j < 4; j++)
			value += lettertovalue(array_words[i][j], j);

		format(result, sizeof(result), "%s%d", result, value); // valstr bugs with some large numbers.

		if((i + 1) < size)
			strcat(result, ", ");
	}

	return result;
}

lettertovalue(letter, order)
{
	static const
		ord[] = {16777216, 65536, 256, 1};

	return letter * ord[order];
}

str_split(output[][], const string[], split_length = sizeof(output[]))
{
	new 
		size = 0;

	for(new spl_l = split_length - 1, i = 0, j = 0; string[i] != EOS; i++)
	{
		output[size][j++] = string[i];

		if(j == spl_l)
			j = 0, size++;
	}

	return ++size;
}

 

Modifié par C_far

Partager ce message


Lien à poster
Partager sur d’autres sites

@C_far C'est la version finale là ?

Partager ce message


Lien à poster
Partager sur d’autres sites
38 minutes ago, Dayrion said:

@C_far C'est la version finale là ?

J'avais oublié de t'identifier pour te le montrer :')

Partager ce message


Lien à poster
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !


Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.


Connectez-vous maintenant