[Mini-challenge] Normaliser la sortie d'une comparaison.
|
27-09-2014, 11h04
(Modification du message : 27-09-2014, 11h04 par b0fh.)
Message : #1
|
|
b0fh
Membre actif Messages : 210 Sujets : 17 Points: 309 Inscription : Jul 2012 |
[Mini-challenge] Normaliser la sortie d'une comparaison.
Dans la libc, la fonction strcmp(a,b) compare deux strings, et retourne une valeur négative, nulle ou positive suivant que a est plus petit, égal, ou plus grand que b.
Cette convention a été choisie parce qu'elle donne lieu a une implémentation très efficace, qui consiste a retourner la différence entre la première paire de caractères non-égaux: Code : int strcmp(char *a, char *b) { Dans certains cas, il peut être désirable de normaliser la sortie de cette fonction, c'est a dire de transformer toutes les valeurs positives en +1, et toutes les valeurs négatives en -1. Challenge: réalisez cette transformation sans utiliser de structures de contrôle, ni opérateurs impliquant des sauts (&&, ||, ?: ) ! Le code doit marcher quelle que soit la taille effective du type int. EDIT: corrigé une typo, c'était *a - *b et pas a - b évidemment, merci Kiwazaru Résolu par: (personne pour l'instant) |
|
27-09-2014, 14h51
Message : #2
|
|
wapiflapi
Newbie Messages : 4 Sujets : 0 Points: 8 Inscription : Nov 2012 |
RE: [Mini-challenge] Normaliser la sortie d'une comparaison.
Code : (s > 0) - (s < 0) Exemple de cas ou c'est utile ? |
|
27-09-2014, 15h59
Message : #3
|
|
Atlas
Membre actif Messages : 69 Sujets : 7 Points: 3 Inscription : Aug 2012 |
RE: [Mini-challenge] Normaliser la sortie d'une comparaison.
ça aurait été mieux que tu réponde la solution par mp , ça nous aurait permis de chercher par nous même .
|
|
27-09-2014, 17h45
Message : #4
|
|
Kiwazaru
Padawan d'un super escargot Messages : 284 Sujets : 26 Points: 139 Inscription : Mar 2012 |
RE: [Mini-challenge] Normaliser la sortie d'une comparaison.
En théorie, la solution de wapiflapi ne fonctionne pas dans le cadre autorisé (c-à-d aucun jumps).
En effet, la solution d'obtenir le retour d'une vérité dynamiquement pour obtenir le résulat voulu fait appel a une instruction x86 nommée SET+G (SETG), qui vérifie si c'est supérieur (pour la première vérité dans le cas donné). Ainsi, avec un peu de recherche on remarque que l'algorithme utilisé pour mener à bien cette instruction est le suivant: Code : SI condition ALORS Bien sûr, la solution reste très intelligente, mais ne respecte théoriquement pas les demandes. Tu peux donc continuer à chercher une solution, (MacYavel en a une autre), et moi je suis sur une piste. Il n'existe pas qu'une seule solution
Toucher au Kernel, c'est un peut comme se shooter au LSD, on pense pouvoir tout faire mais ça finit souvent mal.
|
|
29-09-2014, 07h30
Message : #5
|
|
gruik
gouteur de savon Messages : 757 Sujets : 44 Points: 482 Inscription : Oct 2012 |
RE: [Mini-challenge] Normaliser la sortie d'une comparaison.
(27-09-2014, 17h45)Kiwazaru a écrit : le résulat voulu fait appel a une instruction x86 nommée SET+G (SETG) ce serait pas JG (jump if greater) et son pendant JB (jump if below) plutôt ?
Avant donc que d'écrire, apprenez à penser.
Selon que notre idée est plus ou moins obscure, l'expression la suit, ou moins nette, ou plus pure. Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau, L'Art poétique) |
|
29-09-2014, 09h12
Message : #6
|
|
wapiflapi
Newbie Messages : 4 Sujets : 0 Points: 8 Inscription : Nov 2012 |
RE: [Mini-challenge] Normaliser la sortie d'une comparaison.
(29-09-2014, 07h30)gruik a écrit :(27-09-2014, 17h45)Kiwazaru a écrit : le résulat voulu fait appel a une instruction x86 nommée SET+G (SETG) Non ca fait bien appel a setg. Par contre ce n'est pas un branchement, c'est pas parce-que l'explication d'une instruction inclue un if que l'instruction fait un branchement. Sinon n'importe quelle instruction ferais des branchement, eg: XOR 1 si l'un ou l'autre mais pas les deux SINON 0. |
|
29-10-2014, 22h53
(Modification du message : 29-10-2014, 22h53 par b0fh.)
Message : #7
|
|
b0fh
Membre actif Messages : 210 Sujets : 17 Points: 309 Inscription : Jul 2012 |
RE: [Mini-challenge] Normaliser la sortie d'une comparaison.
|
|
« Sujet précédent | Sujet suivant »
|
Sujets apparemment similaires… | |||||
Sujet | Auteur | Réponses | Affichages | Dernier message | |
XSS challenge x4 | Shirobi | 10 | 607 |
09-04-2013, 20h25 Dernier message: InstinctHack |
|
[Challenge] [ +1 Byte[ | Shirobi | 3 | 274 |
15-03-2013, 00h30 Dernier message: Sh4dows |
|
Aide challenge | Shirobi | 8 | 500 |
28-01-2013, 16h04 Dernier message: Di0Sasm |
|
liste de site de challenge | badTasTe | 5 | 319 |
25-05-2012, 17h23 Dernier message: Di0Sasm |
Utilisateur(s) parcourant ce sujet : 3 visiteur(s)