1

Oui un jeu dans ce forum wink

Le principe est simple, quelqu'un poste un bout de code, et il faut deviner ce qu'il fait smile




Allez premier code à deviner :
tmp = (dI&0x0F) + (dJ&0x0F); if ((tmp & 0xFF) > 0x09) tmp = 0x10 | (tmp ^ ((0x2 | ~(tmp<<1)&0x4 | ((((tmp>>2)&1) | (((tmp>>1)&1)))<<3)) & 0x0F)); tmp += (dI&0xF0) + (dJ&0xF0); if ((tmp & 0xFF0) > 0x90) { tmp = tmp ^ (0x20 | ~(tmp<<1)&0x40 | (((tmp>>2)&0x10 | ((tmp>>1)&0x10))<<3)); }
Que fait ce code?
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

2

Addition de quartets BCD, dI et dJ étant vraisemblablement des octets (uint8_t ou équivalent) ?
Je n'ai pas testé ce code, mais je pense à l'addition BCD à cause des traitements spéciaux si la valeur du quartet actuellement considéré dépasse 9.
avatar
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
Co-admin de TI-Planet.

3

Prafo ! smile

edit:
Oui dI et dJ sont les octets d'entree (en BCD bien sur) et bien des uint8_t, ce code est malheureusement bugge sur le second quartet, certaines additions ne retournent pas le bon resultat)
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

4

J'aime bien ce jeu smile
#include <stdio.h> int i = 0; int main(int argc, char *argv[printf("%d\n", i++)]) { return (i <= 1000) && main(argc, argv); }

Que fait ce code ?
Peace Unity Love et Having Fun!!!

5

il compte jusqu'à 1000, c'est osé comme initialiseur grin

gcc -O0 -fomit-frame-pointer -S

        .file   "test.c"
.globl i

        .bss
        .align 4
        .type   i, @object
        .size   i, 4
i:
        .zero   4

        .section        .rodata
.LC0:
        .string "%d\n"

        .text
.globl main
        .type   main, @function
main:
        pushl   %ebp
        movl    %esp, %ebp
        andl    $-16, %esp
        subl    $16, %esp

        movl    i, %eax

        movl    %eax, %edx
        addl    $1, %eax

        movl    %eax, i
        movl    $.LC0, %eax
        movl    %edx, 4(%esp)
        movl    %eax, (%esp)
        call    printf

        movl    i, %eax
        cmpl    $1000, %eax
        jg      .L2

        movl    12(%ebp), %eax
        movl    %eax, 4(%esp)
        movl    8(%ebp), %eax
        movl    %eax, (%esp)
        call    main

        testl   %eax, %eax
        je      .L2

        movl    $1, %eax
        jmp     .L3

.L2:
        movl    $0, %eax

.L3:
        leave
        ret
        .size   main, .-main
        .ident  "GCC: (Debian 4.4.5-8) 4.4.5"
        .section        .note.GNU-stack,"",@progbits


smile

6

Surprenant qu'on puisse utiliser une fonction dans ces circonstances
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

7

très bon grin

8

./6 : pencil, faut un compilo très tolérant grin
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

9

ça marche même avec --std=c89 dans gcc. Comment on désactive les extensions gcc? grin

10

clang compile, mais le code genere segfault


Tiens:

root@sd-27878:~# clang -pedantic -std=c89 testouille.c -o pouic
testouille.c:9:30: warning: variable length arrays are a C99 feature, accepted as an extension [-pedantic,-Wvla]
int main(int argc, char *argv[printf("%d\n", i++)]) {
                             ^
1 warning generated.



Marrant avec -O3 il semble stipper le call a printf
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

11

Pas de problème avec mon clang moi :elbarto@atlantis> clang -v FreeBSD clang version 3.4.1 (tags/RELEASE_34/dot1-final 208032) 20140512 Target: x86_64-unknown-freebsd10.0 Thread model: posix Selected GCC installation:
Zerosquare (./8) :
./6 : pencil, faut un compilo très tolérant


Pas vraiment, c'est un abus difficile a repérer du C99.
Un appel de fonction reste une expression, les variables lenght arrays prennent une expression donc bon ...

Pour l'histoire de ce code, un mec sur stackoverflow cherchais des moyen en C/C++ pour afficher tout les nombre de 0 a 1000 sans boucle et un pote a pondu ca, j'ai du relire plusieurs fois avant de comprendre ce que le code fesais smile
Peace Unity Love et Having Fun!!!

12

Godzil (./1) :
Oui un jeu dans ce forum wink

Le principe est simple, quelqu'un poste un bout de code, et il faut deviner ce qu'il fait smile




Allez premier code à deviner :
tmp = (dI&0x0F) + (dJ&0x0F); if ((tmp & 0xFF) > 0x09) tmp = 0x10 | (tmp ^ ((0x2 | ~(tmp<<1)&0x4 | ((((tmp>>2)&1) | (((tmp>>1)&1)))<<3)) & 0x0F)); tmp += (dI&0xF0) + (dJ&0xF0); if ((tmp & 0xFF0) > 0x90) { tmp = tmp ^ (0x20 | ~(tmp<<1)&0x40 | (((tmp>>2)&0x10 | ((tmp>>1)&0x10))<<3)); }
Que fait ce code?

Ca c'est un DAA non ?
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

13

ElBarto (./4) :
J'aime bien ce jeu smile
#include <stdio.h> int i = 0; int main(int argc, char *argv[printf("%d\n", i++)]) { return (i <= 1000) && main(argc, argv); }

Que fait ce code ?


Aucun warning des compilateurs sur ce code !!!! Arrgg !!!!

14

C'est con, je me demande quel code ça génère. C'est un tableau à taille dynamique, mais comme c'est un paramètre en pratique c'est juste un variable sized array (char[]). Mais ouais grammaticalement ça a du sens en tous cas, juste pas fonctionnellement...
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

15

Réponse générale pour les deux cas (et je suppose pour aussi la plupart de ceux à venir) : ce code vous fait avoir des problèmes avec votre responsable qualité logicielle et l'autorité compétente de certification embarrassed
avatar
Que cache le pays des Dieux ? - Forum Ghibli - Forum Littéraire

La fin d'un monde souillé est venue. L'oiseau blanc plane dans le ciel annonçant le début d'une longue ère de purification. Détachons-nous à jamais de notre vie dans ce monde de souffrance. Ô toi l'oiseau blanc, l'être vêtu de bleu, guide nous vers ce monde de pureté. - Sutra originel dork.

16

Responsable quoi ? Autorité compéquoi ? Tu as une de ces imaginations, Ximoon cheeky
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

17

C'est ce que j'allais dire, au vu des exemples qu'on voit fleurir ici et là, au vu même de ce qu'on lit parfois sur yN, j'imaginnais que c'était des postes qui n'avaient pas encore d'existence grin

18

Va dire ça au mec de l'ESA avec qui je vais passer la journée demain tiens grin

(ceci dit il est marrant ce topic oui)
avatar
Que cache le pays des Dieux ? - Forum Ghibli - Forum Littéraire

La fin d'un monde souillé est venue. L'oiseau blanc plane dans le ciel annonçant le début d'une longue ère de purification. Détachons-nous à jamais de notre vie dans ce monde de souffrance. Ô toi l'oiseau blanc, l'être vêtu de bleu, guide nous vers ce monde de pureté. - Sutra originel dork.

19

Ximoon (./18) :
Va dire ça au mec de l'ESA avec qui je vais passer la journée demain tiens grin

ESA ou EASA ?

20

int i= 0 ;
i+= i+++i---i+++i ;

21

Rien du tout si le compilateur est malin, vu que i n'est pas utilisé. Sinon c'est dépendant de l'implémentation. C'est pas drôle embarrassed
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

22

En JAVA je suis sûr que c'est spécifié embarrassed

23

Je ne touche pas aux drogues dures embarrassed
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

24

Godzil (./1) :
tmp = (dI&0x0F) + (dJ&0x0F); if ((tmp & 0xFF) > 0x09) tmp = 0x10 | (tmp ^ ((0x2 | ~(tmp<<1)&0x4 | ((((tmp>>2)&1) | (((tmp>>1)&1)))<<3)) & 0x0F)); tmp += (dI&0xF0) + (dJ&0xF0); if ((tmp & 0xFF0) > 0x90) { tmp = tmp ^ (0x20 | ~(tmp<<1)&0x40 | (((tmp>>2)&0x10 | ((tmp>>1)&0x10))<<3)); }

J'avais implémenté ça de façon plus lisible quand même tongue// http://www.ftp83plus.net/Tutorials/z80inset_fullA.htm // Exemple: 0x8 + 0x3 = 0xb -> 0x11 (+6) if ((accu & 0xf) >= 0xa || flags.halfcarry) accu += flags.n ? -6 : 6; // Pareil pour le digit du haut if ((accu & 0xf0) >= 0xa0 || flags.carry) { accu += flags.n ? -0x60 : 0x60; flags.carry = 1; } else flags.carry = 0; flags.halfcarry = 0; flags.zero = (accu == 0);
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

25

Zerosquare (./21) :
Sinon c'est dépendant de l'implémentation.

Pas exactement. Là c'est du "undefined behavior", ce qui n'est pas la même chose que "implementation-defined behavior" si on veut être précis #modpo#
So much code to write, so little time.

26

Pphd> ESA
avatar
Que cache le pays des Dieux ? - Forum Ghibli - Forum Littéraire

La fin d'un monde souillé est venue. L'oiseau blanc plane dans le ciel annonçant le début d'une longue ère de purification. Détachons-nous à jamais de notre vie dans ce monde de souffrance. Ô toi l'oiseau blanc, l'être vêtu de bleu, guide nous vers ce monde de pureté. - Sutra originel dork.

27

Brunni: j'ai posté l'asm généré par le code zarb.

28

Brunni (./24) :
Godzil (./1) :
tmp = (dI&0x0F) + (dJ&0x0F); if ((tmp & 0xFF) > 0x09) tmp = 0x10 | (tmp ^ ((0x2 | ~(tmp<<1)&0x4 | ((((tmp>>2)&1) | (((tmp>>1)&1)))<<3)) & 0x0F)); tmp += (dI&0xF0) + (dJ&0xF0); if ((tmp & 0xFF0) > 0x90) { tmp = tmp ^ (0x20 | ~(tmp<<1)&0x40 | (((tmp>>2)&0x10 | ((tmp>>1)&0x10))<<3)); }

J'avais implémenté ça de façon plus lisible quand même tongue// http://www.ftp83plus.net/Tutorials/z80inset_fullA.htm // Exemple: 0x8 + 0x3 = 0xb -> 0x11 (+6) if ((accu & 0xf) >= 0xa || flags.halfcarry) accu += flags.n ? -6 : 6; // Pareil pour le digit du haut if ((accu & 0xf0) >= 0xa0 || flags.carry) { accu += flags.n ? -0x60 : 0x60; flags.carry = 1; } else flags.carry = 0; flags.halfcarry = 0; flags.zero = (accu == 0);


Mon algo peux paraitre bizzare, mais il est base sur les equation logiques interne du 6502
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

29

 

30

Ha oui
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.