Améliorer ses IA et les reconfronter

Voilà, je propose à ceux qui veulent d'améliorer leurs IAs de la finale avec plus de temps et de les reconfronter pour le fun... même si pas mal d'entre vous doivent être bien blasé de ce remake de priate des caraïbes version prologin, personnellement, j'aime bien le jeux. Je serais aussi curieux d'affronter des orgas :P bref, si y en a qui veulent, mp moi et je vous donnerez mon mail pour m'envoyer un le .so

À ce propos, est-il possible d'avoir accès aux codes soumis par les candidats (en particulier les dix premiers)? Ça peut être extrêmement instructif! Surtout qu'il parait que plusieurs codes sont magnifiques.

Nous allons récupérer les /home de tout le monde et les mettre en ligne. Ceux qui le désirent pourront donner leurs mots de passe pour rendre leurs champions accessibles.
Je vais écrire demain des instructions sur l'installation de Stechec 2.

+1

...Mais même ça peut être marrant de continuer prologin

Mon mdp était Aemeith4 pour ceux qui veulent affronter LePerroquetVraimentFou version PI :)

Pour les gens nuls déprimés qui veulent battre une IA merdique ET buggué (en relisant le sujet je me rend compte du nombre de choses que j'ai compris de travers), n'hésitez pas à tester mon IA : elle vous confortera dans l'idée qu'il y a toujours pire que soi. C'est Algue5

On m'a appris avant la fin qu'on pouvait construire plusieurs bateaux par île par tour.
À part ça mon IA est trop fraîche et bien codée.

Je propose de faire mieux vraiment serieusement reorganiser un tournoi, un prologin d'été, à une date butoire (genre 10 aout) en mettant tous les champions ameliorés sur un repo quelconque, ca serait cool de l ouvrir à tous et pourquoi si les orgas sont ok de proposer au gagnant un goodie ou une place en df un truc comme ca. et pour faire tourner le tournoi, plutot que de lancer les matchs chez nous, pourquoi ne pas demander à utiliser le serveur de prologin (avec plus de temps pour pas le kill). Qui serait motivé ?

Le bot qui vous assure la 42eme +- 2 places :
tsterin
AibiiT3t

lpluvinage
pophei9E

J'ai fini 6ème. Par contre j'ai pas trouvé où on peut récupérer notre home, si quelqu'un pouvait me l'indiquer à moins que ce ne soit pas encore disponible ?
Merci !

@thomas_94 peut -être parce qu'il est meilleur comme toutes personnes mieux classées que toi ?
C'est bon Lucas, on sait que t'est 6eme, arrête faire rager les autres :'(

@cheikdav C'était pas pour faire rager, c'était pour que les gens connaissent le classement de l'IA qu'ils testent.
@Thomas_94 D'accord merci.

Pour ma part :
mducret
Ir7fi4ah

J'ai fini 4ème avec mon IA basée sur agression rapide et continue.
Une preuve de plus que le Java ça poutre :D

  • agautier
  • AiX3juer ("AI" et "jouer"... il résume la finale ce mot de passe)
  • une IA assez bête et purement orientée attaque
  • classé 8ème
  • python
  • code plutôt crade, pollué par pas mal de bouts de trucs un peu partout dont je me suis finalement pas servi
    Enjoy

-dcheikhi
-nohRoo3p
Ou "Comment coder des trucs à l'arrache, avoir un gros coup de chance et finir 31eme et pas dernier" :)

Bon, bah, voici mon bot, la version compressée d'abord :

jouer_tour

static char const * const program=R"BRAINFUCK_WHAT( > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > [\^ - ] > [\^ - ] + + + + + + + + + + + [ - \< + + + + + + + + + + > ] \< - . - - - - - - - - . + + + + + + + + + + + + + + . - - - - - - - - - - - - - - - - - - - - . + + + + + + + + + + . + + + . - - - - - - - . + + + + + + + + + + + + + + . [\^ - ] [\^ - ] + + + + + + + + + + . [ - \< [\^ - ] > [\^ - ] + + + + + + + + + + [ - \< + + + + + + + + + + > ] \< - . + + + + + + + + + + + + . - . + + + + + . + . - - . + + + . - - - - - - - - - - - - . + + + + + + + + + . - - - - - - - - - - - - - . [\^ - ] \< , \< , [ > + \< - ] > [ [\^ - ] > > + \< \< ] > [\^ - ] + + + + + + + + + + . [\^ - ] > [\^ - ] > [\^ - ] > [\^ - ] > ] [\^ - ] > [\^ - ] + + + + + + + + [ - \< + + + + + + + + + + > ] \< + + + + . - - - - - - - - - - - - - - - - - - - . + + + + + + + + . + + + . . - - - - - - - . + + + + + + + + + + + + + + + + + + + + + + + + + + . - - - - - - - - - - - . - - - - - - - - - - - - - - - . + + + + + + + + + + + + + . . - - - - - - - - - - - - - - - - - . + + + + + + + + . + + + + + . [\^ - ] [\^ - ] + + + + + + + + + + . [ - > [\^ - ] > [\^ - ] + + + + + + + + [ - \< + + + + + + + + + + > ] \< + + + + . - - - - - - - - - - - - - - - - - - - . + + + + + + + + . + + + . . - - - - - - - . + + + + + + + + + + + + + + + + + + + + + + + + + + . - - - - - - - - - - - . - - - - - - - - - - - - - - - . + + + + + + + + + + + + + . . - - - - - - - - - - - - - - - - - . + + + + + + + + . + + + + + . [\^ - ] [\^ - ] + + + + + + + + + + . [ - \< [ - > > > > > > > > > > > + > + \< \< \< \< \< \< \< \< \< \< \< \< ] > > > > > > > > > > > [ - \< \< \< \< \< \< \< \< \< \< \< + > > > > > > > > > > > ] \< \< \< \< \< \< \< \< \< \< \< > [ - > > > > > > > > > > + > > + \< \< \< \< \< \< \< \< \< \< \< \< ] > > > > > > > > > > [ - \< \< \< \< \< \< \< \< \< \< + > > > > > > > > > > ] \< \< \< \< \< \< \< \< \< - > > > > > > > > > \< [\^ - ] > [\^ - ] + + + + + + + + + + [ - \< + + + + + + + + + + > ] \< + + + + + + + + . - - - . + + + + + + + + + + . + . - - - - - - - - - - - - - - - . - - - - - - . + + + . - . + + + + + + + + + + + + + + + + + + + . - - - - - - - - - - - - - - - . - - - - . + + + + + + + + + + + + + + + + + + + + . + + + . - - - - - - - - - - - - - - - - - - - - - - - - - . + + + + + + + + + + + + + + + + + . - . + + + + . - - - - - - - - - - . + + + + + + + + + + + . - - - - - - - - - - - . + + + + + + . - . [\^ - ] > [\^ - ] + + + + + + + + + + . [ - > [&1 - \< + > ] \< > > > > > > > > [ - \< \< \< \< \< \< \< \< [*8 - > > > > > > > > + \< \< \< \< \< \< \< \< ] + > > > > > > > > > > > > > > > > ] \< \< \< \< \< \< \< \< [*8 - > > > > > > > > + \< \< \< \< \< \< \< \< ] + > > > > > > > > [*1 - > + \< ] \< \< \< \< \< \< \< \< [ \< \< \< \< \< \< \< \< ] > > > > > > > > - > > [&2 - \< \< + > > ] \< \< > > > > > > > > [ - \< \< \< \< \< \< \< \< [*8 - > > > > > > > > + \< \< \< \< \< \< \< \< ] + > > > > > > > > > > > > > > > > ] \< \< \< \< \< \< \< \< [*8 - > > > > > > > > + \< \< \< \< \< \< \< \< ] + > > > > > > > > [*2 - > > + \< \< ] \< \< \< \< \< \< \< \< [ \< \< \< \< \< \< \< \< ] > > > > > > > > - > > > [&3 - \< \< \< + > > > ] \< \< \< > > > > > > > > [ - \< \< \< \< \< \< \< \< [*8 - > > > > > > > > + \< \< \< \< \< \< \< \< ] + > > > > > > > > > > > > > > > > ] \< \< \< \< \< \< \< \< [*8 - > > > > > > > > + \< \< \< \< \< \< \< \< ] + > > > > > > > > [*3 - > > > + \< \< \< ] \< \< \< \< \< \< \< \< [ \< \< \< \< \< \< \< \< ] > > > > > > > > - > > > > [&4 - \< \< \< \< + > > > > ] \< \< \< \< > > > > > > > > [ - \< \< \< \< \< \< \< \< [*8 - > > > > > > > > + \< \< \< \< \< \< \< \< ] + > > > > > > > > > > > > > > > > ] \< \< \< \< \< \< \< \< [*8 - > > > > > > > > + \< \< \< \< \< \< \< \< ] + > > > > > > > > [*4 - > > > > + \< \< \< \< ] \< \< \< \< \< \< \< \< [ \< \< \< \< \< \< \< \< ] > > > > > > > > - > > > > > [&5 - \< \< \< \< \< + > > > > > ] \< \< \< \< \< > > > > > > > > [ - \< \< \< \< \< \< \< \< [*8 - > > > > > > > > + \< \< \< \< \< \< \< \< ] + > > > > > > > > > > > > > > > > ] \< \< \< \< \< \< \< \< [*8 - > > > > > > > > + \< \< \< \< \< \< \< \< ] + > > > > > > > > [*5 - > > > > > + \< \< \< \< \< ] \< \< \< \< \< \< \< \< [ \< \< \< \< \< \< \< \< ] > > > > > > > > - > > > > > > [&6 - \< \< \< \< \< \< + > > > > > > ] \< \< \< \< \< \< > > > > > > > > [ - \< \< \< \< \< \< \< \< [*8 - > > > > > > > > + \< \< \< \< \< \< \< \< ] + > > > > > > > > > > > > > > > > ] \< \< \< \< \< \< \< \< [*8 - > > > > > > > > + \< \< \< \< \< \< \< \< ] + > > > > > > > > [*6 - > > > > > > + \< \< \< \< \< \< ] \< \< \< \< \< \< \< \< [ \< \< \< \< \< \< \< \< ] > > > > > > > > - > > > > > > > [&7 - \< \< \< \< \< \< \< + > > > > > > > ] \< \< \< \< \< \< \< > > > > > > > > [ - \< \< \< \< \< \< \< \< [*8 - > > > > > > > > + \< \< \< \< \< \< \< \< ] + > > > > > > > > > > > > > > > > ] \< \< \< \< \< \< \< \< [*8 - > > > > > > > > + \< \< \< \< \< \< \< \< ] + > > > > > > > > [*7 - > > > > > > > + \< \< \< \< \< \< \< ] - > > > > [\^ - ] > > [\^ - ] > [\^ - ] \< \< \< \< \< [ - > > + > > > > > + \< \< \< \< \< \< \< ] > > [&2 - \< \< + > > ] \< [ - > + > > > > > > + \< \< \< \< \< \< \< ] > [&1 - \< + > ] > > > > \< [\^ - ] > [\^ - ] + + + + + + + + + + [ - \< + + + + + + + + + + > ] \< - . + + + + + + + + + + + + . - - - . + + + . - . - - - - - . + + + + + + + + + + . - - - - - - - - - - - - - - . + + + + + + + + + + + + + . [\^ - ] > [\^ - ] + + + + + + + + + + . [\^ - ] > [\^ - ] > [\^ - ] \< \< \< \< \< > > > > [\^ - ] > [\^ - ] + + + + + + + + + + [ - \< + + + + + + + + + + > ] \< + + + + + + + + . - - - . + + + + + + + + + + . + . - - - - - - - - - - - - - - - . - - - - - - . + + + + + + + + + + . + + + . - - - - - - - . + + + + + + + + + + + + + + . [\^ - ] [\^ - ] + + + + + + + + + + . [ - \< [\^ - ] > [\^ - ] + + + + + + + + + + [ - \< + + + + + + + + + + > ] \< + + + + + . + + + + + . - - - - - - - - . + + + + + + + + + . - - - - - - - - - - - - - - - - . + + + + + + + + + + . + + + . - - - - - - - . - - - - - - . + + + + + + + + + + + . + + + + + . + + + + + + . - - - - - - - - - - - - - - - - . + + + + + + + + + + + + + + + + . - - - . [\^ - ] > [\^ - ] + + + + + + + + + + . [ \< , [ - > + \< \< \< \< [ - > + > + \< \< ] > [&1 - \< + > ] > > + + \< [ - > - - \< ] > > [ - \< - > ] \< [ [\^ - ] \< \< \< [\^ - ] > > > \< \< \< \< \< \< \< [*8 - > > > > > > > > + \< \< \< \< \< \< \< \< ] > > > > > > > \< \< \< \< \< \< [ - > > + > + \< \< \< ] > > [&2 - \< \< + > > ] \< [ - > + > > + \< \< \< ] > [&1 - \< + > ] > > > > \< [\^ - ] > [\^ - ] + + + + + + + + + + [ - \< + + + + + + + + + + > ] \< . + . + + + + + + + + + + + . - - - - . - - - - - - - - - - - . + + . + + . + + + + + + + + + + + + + . [\^ - ] > [\^ - ] + + + + + + + + + + . [\^ - ] \< \< \< \< \< \< [ - > > > > > > > > + \< \< \< \< \< \< \< \< ] > [ - > > > > > > > > + \< \< \< \< \< \< \< \< ] > > > > > > > {D2 [ \< \< \< + > > > - ] \< \< \< [ > + + [ \< \< \< \< + > > > - [ \< \< \< [\^ - ] \< + > > > > - ] \< \< \< \< [*4 > > > > + \< \< \< \< - ] > [ > > > > - [ > > - \< \< [\^ - ] ] + \< \< \< \< - ] > > > > - ] > > + \< \< \< ] > > > } > {D2 [ \< \< \< \< + > > > > - ] \< \< \< [ > + + [ \< \< \< \< + > > > - [ \< \< \< [\^ - ] \< + > > > > - ] \< \< \< \< [*4 > > > > + \< \< \< \< - ] > [ > > > > - [ > > > - \< \< \< [\^ - ] ] + \< \< \< \< - ] > > > > - ] > > > + \< \< \< \< ] > > > } \< \< \< \< [\^ - ] > [\^ - ] + + + + + + + + + + [ - \< + + + + + + + + + + > ] \< . + . + + + + + + + + + + + . - - - - . - - - - - - - - - - - . + + . + + . + + + + + + + + + + + + + . [\^ - ] > [\^ - ] + + + + + + + + + + . [\^ - ] \< \< \< [ - \< + > > > > > > + \< \< \< \< \< ] \< [*1 - > + \< ] > > [ - > + > > > > + \< \< \< \< \< ] > [&1 - \< + > ] > > > {D2 [ \< \< \< + > > > - ] \< \< \< [ > + + [ \< \< \< \< + > > > - [ \< \< \< [\^ - ] \< + > > > > - ] \< \< \< \< [*4 > > > > + \< \< \< \< - ] > [ > > > > - [ > > - \< \< [\^ - ] ] + \< \< \< \< - ] > > > > - ] > > + \< \< \< ] > > > } > {D2 [ \< \< \< \< + > > > > - ] \< \< \< [ > + + [ \< \< \< \< + > > > - [ \< \< \< [\^ - ] \< + > > > > - ] \< \< \< \< [*4 > > > > + \< \< \< \< - ] > [ > > > > - [ > > > - \< \< \< [\^ - ] ] + \< \< \< \< - ] > > > > - ] > > > + \< \< \< \< ] > > > } \< \< \< \< [\^ - ] > [\^ - ] + + + + + + + + + + [ - \< + + + + + + + + + + > ] \< . + . + + + + + + + + + + + . - - - - . - - - - - - - - - - - . + + . + + . + + + + + + + + + + + + + . [\^ - ] > [\^ - ] + + + + + + + + + + . [\^ - ] \< \< \< [ - \< + > > > > > > + \< \< \< \< \< ] \< [*1 - > + \< ] > > [ - > + > > > > + \< \< \< \< \< ] > [&1 - \< + > ] > > > {D2 [ \< \< \< + > > > - ] \< \< \< [ > + + [ \< \< \< \< + > > > - [ \< \< \< [\^ - ] \< + > > > > - ] \< \< \< \< [*4 > > > > + \< \< \< \< - ] > [ > > > > - [ > > - \< \< [\^ - ] ] + \< \< \< \< - ] > > > > - ] > > + \< \< \< ] > > > } > {D2 [ \< \< \< \< + > > > > - ] \< \< \< [ > + + [ \< \< \< \< + > > > - [ \< \< \< [\^ - ] \< + > > > > - ] \< \< \< \< [*4 > > > > + \< \< \< \< - ] > [ > > > > - [ > > > - \< \< \< [\^ - ] ] + \< \< \< \< - ] > > > > - ] > > > + \< \< \< \< ] > > > } \< \< \< \< [\^ - ] > [\^ - ] + + + + + + + + + + [ - \< + + + + + + + + + + > ] \< . + . + + + + + + + + + + + . - - - - . - - - - - - - - - - - . + + . + + . + + + + + + + + + + + + + . [\^ - ] > [\^ - ] + + + + + + + + + + . [\^ - ] \< \< \< [ - \< + > > > > > > + \< \< \< \< \< ] \< [*1 - > + \< ] > > [ - > + > > > > + \< \< \< \< \< ] > [&1 - \< + > ] > > > {D2 [ \< \< \< + > > > - ] \< \< \< [ > + + [ \< \< \< \< + > > > - [ \< \< \< [\^ - ] \< + > > > > - ] \< \< \< \< [*4 > > > > + \< \< \< \< - ] > [ > > > > - [ > > - \< \< [\^ - ] ] + \< \< \< \< - ] > > > > - ] > > + \< \< \< ] > > > } > {D2 [ \< \< \< \< + > > > > - ] \< \< \< [ > + + [ \< \< \< \< + > > > - [ \< \< \< [\^ - ] \< + > > > > - ] \< \< \< \< [*4 > > > > + \< \< \< \< - ] > [ > > > > - [ > > > - \< \< \< [\^ - ] ] + \< \< \< \< - ] > > > > - ] > > > + \< \< \< \< ] > > > } \< \< \< \< [\^ - ] > [\^ - ] + + + + + + + + + + [ - \< + + + + + + + + + + > ] \< . + . + + + + + + + + + + + . - - - - . - - - - - - - - - - - . + + . + + . + + + + + + + + + + + + + . [\^ - ] > [\^ - ] + + + + + + + + + + . [\^ - ] > [\^ - ] > [\^ - ] > [\^ - ] > [ [\^ - ] > [\^ - ] > [\^ - ] > ] > > ] ] > ] > [\^ - ] > [\^ - ] > \< \< \< \< \< \< \< [*3 - > > > + \< \< \< ] \< \< [*3 - > > > + \< \< \< ] \< [*3 - > > > + \< \< \< ] \< [*3 - > > > + \< \< \< ] > > > > > > > > > > > ] + [ - \< \< \< + ] \< \< \< \< \< \< \< \< [ \< \< \< \< \< \< \< \< ] > > > > > > > > - > > > > > > > > ] \< + [ - \< \< \< \< \< \< \< \< + ] > > > > > > > > > > [\^ - ] > [\^ - ] \< \< \< \< \< \< \< \< \< \< \< \< ] \< ])BRAINFUCK_WHAT";

L'algorithme est simple

  • Pour chacune de mes iles
    • Construire un galion avec une chance de 3/4, une caravelle sinon
  • Pour chaque case
    • Lister les bateaux
    • Pour chaque bateau
      • Coloniser en sa position
      • Lister les iles
      • Pour chaque ile
        • Si elle est a moi continue
        • continue avec une chance 1/2
        • Si (le bateau est un galion et l'ile est ennemie) ou (le bateau est une caravelle et l'ile est neutre)
          • Soit (fy, fx) la position du bateau et (ty, tx) la position de l'ile
          • Déplacer le bateau en (ty, tx)
          • (ty, tx)=((ty+fy)/2, (tx+fx)/2)
          • Déplacer le bateau en (ty, tx)
          • (ty, tx)=((ty+fy)/2, (tx+fx)/2)
          • Déplacer le bateau en (ty, tx)
          • (ty, tx)=((ty+fy)/2, (tx+fx)/2)
          • Déplacer le bateau en (ty, tx)
          • (ty, tx)=((ty+fy)/2, (tx+fx)/2)
          • Déplacer le bateau en (ty, tx)

Remarquez que je ne teste pas si les bateaux m'appartiennent ou pas, ce n'est pas très grave si deplacer() retourne une erreur (e.g. parce que le bateau ne m'appartient pas), je l'ignore.
Pour le déplacement sur plusieurs tours, je déplace le bateau sur l'ile, puis à la moitié du chemin, puis le quart, le huitième et enfin le seizième, le bateau bougera sur le premier qui fonctionne puis les autres échoueront.

À noter que ma stupidité artificielle aura tendance a aller sur les premières iles dans l'ordre renvoyé par le serveur, donc si elle commence en bas à droite, elle a peu de chance de gagner (parce que si elle commence en haut à gauche elle a une chance ?)

Il y a quelques optimisations dans mon code, le seul but est d'accélérer l'exécution du brainfuck, sans ces optimisations, le code fonctionnerait quand même, mais serait plus lent :

  • [ *n > ~n~ +\< ~n~ -] déplace la cellule de n case sur la droite sans exécuter la boucle
  • [ &n \< ~n~ +> ~n~ -] déplace la cellule de n case sur la gauche
  • [ \^ -] met la cellule a zéro
  • { D2 plein de code post-mortem } divise par deux

De plus, quelques extensions brainfuck pour le debug :

  • % affiche sur stderr l'index et la valeur de la cellule courante
  • \$ affiche sur stderr le reste de la ligne

Pour rendre le code plus lisible, j'utilise cpp (le préprocesseur C), donc je peux faire de magnifique #define et #include .
L'exécution des fonctions de l'api se fait en écrivant leur nom sur stdout (suivi d'un NL), j'ai des #define dans call_function.bf fait pour ça.
Par contre, le passage des paramètres et la valeur de retour se font directement sur la mémoire, stdin est remplit de std::rand() .

Bon, voila le code comme écrit :

jouer_tour.bf

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#include "call_function.bf"#include "structure.bf"

$ ===========================$ ===========================$ ========== DEBUT ==========$ ===========================$ ===========================

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

$ =====================================$ = Debut de la phase de construction =$ =====================================

MES_ILES_2CALL_1[ Pour chaque ile    - clear flag    <    CONSTRUIRE_2    HERE 0* | 0 | y | x    <,<,[>+<-]> un bateau au hasrd (3/4 galion /// 1/4 caravelle)    HERE r*| 0 | 0 | y | x    [[-]>>+<<]    >    CALL_1    [^-]>[^-]>[^-]>[^-]>]

$ ============================================$ = Debut de la phase d assignation de tache =$ ============================================

FOREACH_CELL_7    <<<<<<<<<->>>>>>>>>    HERE y | x | m1| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |*0 | y | x    <    LISTE_BATEAUX_POSITION_2    >    CALL_1    [ Pour chaque bateau sur la case

#define DEPLACER_FLAG_END \            >>>>>>>>[ deplacement en fin \                - mise a zero du flag \                <<<<<<<<[*8 ->>>>>>>>+<<<<<<<<] \                + remise du flag \                >>>>>>>>>>>>>>>> \            ] \            <<<<<<<< deplacement de end m 1 en end \            [*8 ->>>>>>>>+<<<<<<<<] \            +>>>>>>>>

        - mise a zero du flag        >[&1 -<+>]< copy id        DEPLACER_FLAG_END        [*1 ->+<]         Retour <<<<<<<< [<<<<<<<<] >>>>>>>>

        - mise a zero du flag        >>[&2 -<<+>>]<< copy posy        DEPLACER_FLAG_END        [*2 ->>+<<]         Retour <<<<<<<< [<<<<<<<<] >>>>>>>>

        - mise a zero du flag        >>>[&3 -<<<+>>>]<<< copy posx        DEPLACER_FLAG_END        [*3 ->>>+<<<]         Retour <<<<<<<< [<<<<<<<<] >>>>>>>>

        - mise a zero du flag        >>>>[&4 -<<<<+>>>>]<<<< copy joueur        DEPLACER_FLAG_END        [*4 ->>>>+<<<<]         Retour <<<<<<<< [<<<<<<<<] >>>>>>>>

        - mise a zero du flag        >>>>>[&5 -<<<<<+>>>>>]<<<<< copy btype        DEPLACER_FLAG_END        [*5 ->>>>>+<<<<<]         Retour <<<<<<<< [<<<<<<<<] >>>>>>>>

        - mise a zero du flag        >>>>>>[&6 -<<<<<<+>>>>>>]<<<<<< copy or        DEPLACER_FLAG_END        [*6 ->>>>>>+<<<<<<]         Retour <<<<<<<< [<<<<<<<<] >>>>>>>>

        - mise a zero du flag        >>>>>>>[&7 -<<<<<<<+>>>>>>>]<<<<<<< copy deplacable        DEPLACER_FLAG_END        [*7 ->>>>>>>+<<<<<<<]

        HERE : 1 | end id | end py | eetc | eetc | eetc | eetc | eetc | 0*| id | py | px | etc

        $ I HAVE A BOAT        >%<        $ IS NAME

        -        BATEAU CELL: m1*| id | posy | posx | joueur | type | or | deplacable

        >>>>[^-]>>[^-]>[^-]<<        HERE: m1| id | posy | posx | 0 | type*| 000

        <<<        [->>+>>>>>+<<<<<<<]        >>[&2 -<<+>>]        <        [->+>>>>>>+<<<<<<<]        >[&1 -<+>]        >>>>        HERE: m1| id | posy | posx | 0 | type | 0 | 0 | 0*| posy | posx        <        COLONISER_2        >        CALL_1        [^-]>[^-]>[^-]        <<<<<        HERE: m1| id | posy | posx | 0 | type*| 0000                >>>>        HERE: m1| id | posy | posx | 0 | type | 0 | 0 | 0 |*0

        LISTE_ILES_2        CALL_1        [ Pour toute ile            $ => I HAVE AN ISLAND            >%>%<<            $ IS NAME

            - mise du flag a zero            HERE id | fy | fx | 0 | type | 0 | 0 | 0 | 0*| ty | tx

            < INFO_ILE_JOUEUR_2            > CALL_1

            HERE 0 | j*| y | x            [<,[-                >+<                HERE id | fy | fx | 0 | type | 0 | 0 | 0*| j | ty | tx                <<<[->+>+<<]                >[&1 -<+>]                >>                HERE id | fy | fx | 0 | type | 0 | type | 0*| j | ty | tx

                ++<[->--<]>>[-<->]<                j = 0 and type=0 ok                j = 0 and type=1 fail                j = 2 and type=1 ok                j = 2 and type=0 fail                2 m 2*type m j

                HERE id | fy | fx | 0 | type | 0 | 0 | ok?*| 0 | ty | tx                [ [^-]                    <<<[^-]>>> CLEAN type

                    <<<<<<<[*8 ->>>>>>>>+<<<<<<<<]                    >>>>>>>                    HERE 0 | fy | fx | 0 | 0 | 0 | 0 | 0*| id | ty | tx                    <<<<<<[->>+>+<<<]                    >>[&2 -<<+>>]<                    HERE 0 | fy | fx*| 0 | fy | 0 | 0 | 0*| id | ty | tx                    [->+>>+<<<]                    >[&1 -<+>]                    >>>>                    HERE 0 | fy | fx | 0 | fy | fx | 0 | 0*| id | ty | tx

                    < DEPLACER_2                    > CALL_1                    [^-]

#define DIVIDE_TFY_BY_TWO \                        {D2 \                            x[<<<t0+>>>x-] \                            <<<t0[>++y[ \                                <<<<t1+ \                                >>>t0-[<<<t1[^-]<t2+>>>>t0-] \                                <<<<t2[*4 >>>>t0+<<<<t2-] \                                >t1[>>>>y-[>>x-<<y[^-]]+<<<<t1-] \                                >>>>y-]>>x+<<<t0]>>> \                        }

#define DIVIDE_TFX_BY_TWO \                        {D2 \                            x[<<<<t0+>>>>x-] \                            <<<t0[>++y[ \                                <<<<t1+ \                                >>>t0-[<<<t1[^-]<t2+>>>>t0-] \                                <<<<t2[*4 >>>>t0+<<<<t2-] \                                >t1[>>>>y-[>>>x-<<<y[^-]]+<<<<t1-] \                                >>>>y-]>>>x+<<<<t0]>>> \                        }

                    <<<<<<[->>>>>>>>+<<<<<<<<]                    >[->>>>>>>>+<<<<<<<<]                    >>>>>>>                    HERE 0 | 0 | 0 | 0 | fy | fx | 0 | 0 | id | tfy*| tfx                    DIVIDE_TFY_BY_TWO                    >                    DIVIDE_TFX_BY_TWO                    <<<                    HERE 0 | 0 | 0 | 0 | fy | fx | 0 | 0*| id | tfy | tfx                                        < DEPLACER_2                    > CALL_1                    [^-]

                    HERE 0 | 0 | 0 | 0 | fy | fx | 0 | 0*| id | tfy | tfx                    <<<[-<+>>>>>>+<<<<<]<[*1 ->+<]                    >>[->+>>>>+<<<<<]>[&1 -<+>]>                    >>                    DIVIDE_TFY_BY_TWO                    >                    DIVIDE_TFX_BY_TWO                    <<<                    < DEPLACER_2                    > CALL_1                    [^-]

                    HERE 0 | 0 | 0 | 0 | fy | fx | 0 | 0*| id | tfy | tfx                    <<<[-<+>>>>>>+<<<<<]<[*1 ->+<]                    >>[->+>>>>+<<<<<]>[&1 -<+>]>                    >>                    DIVIDE_TFY_BY_TWO                    >                    DIVIDE_TFX_BY_TWO                    <<<                    < DEPLACER_2                    > CALL_1                    [^-]

                    HERE 0 | 0 | 0 | 0 | fy | fx | 0 | 0*| id | tfy | tfx                    <<<[-<+>>>>>>+<<<<<]<[*1 ->+<]                    >>[->+>>>>+<<<<<]>[&1 -<+>]>                    >>                    DIVIDE_TFY_BY_TWO                    >                    DIVIDE_TFX_BY_TWO                    <<<                    < DEPLACER_2                    > CALL_1                    [^-]

                    >[^-]>[^-]>[^-]                    >                    [ CLEAN                        [^-]>[^-]>[^-]>                    ]                    >>                ]            ]>]

            >[^-]>[^-]>

            HERE id | fy | fx | 0 | type | 0 | 0 | 0 | 0 | 0 | 0 | ?* | y | x

            <<<<<<<[*3->>>+<<<]            <<[*3->>>+<<<]            <[*3->>>+<<<]            <[*3->>>+<<<]            >>>>>>>>>>>

            HERE id | fy | fx | 0 | type | 0 | 0 | 0 | ?*| ty | tx

            $ END OF ISLAND LOOP            %        ] fin pour toute ile

        +[-<<<+]        HERE : 1 | end id | end py | eetc | eetc | eetc | eetc | eetc | 0*| 0

        $ MY BOAT IS GONE :(

        Retour <<<<<<<< [<<<<<<<<] >>>>>>>>        ->>>>>>>>    ] fin pour chaque bateau        <+[-<<<<<<<<+]    >>>>>>>>>END_FOREACH_CELL_7

$ =========================$ =========================$ ========== FIN ==========$ =========================$ =========================

structure.bf

1
2
3
#define FOREACH_CELL_7 \    TAILLE_TERRAIN_2 \    CALL_1 \    [-> \        TAILLE_TERRAIN_2 \        CALL_1 \        [- \            < \            HERE  *y | x \            [->>>>>>>>>>>+>+<<<<<<<<<<<<] \            HERE  *0 | x | 0 ||||| y | y \            >>>>>>>>>>>[-<<<<<<<<<<<+>>>>>>>>>>>] \            <<<<<<<<<<< \            HERE  *y | x | 0 ||||| 0 | y \            >[->>>>>>>>>>+>>+<<<<<<<<<<<<] \            HERE   y |*0 | 0 ||||| x | y | x \            >>>>>>>>>>[-<<<<<<<<<<+>>>>>>>>>>] \            HERE   y | x | 0 |||||*0 | y | x

#define END_FOREACH_CELL_7 \            >[^-]>[^-]<<<<<<<<<<<< \        ] \    <]

call_function.bf

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
#define CALL_1 \    [^-]++++++++++.

#define MES_ILES_2 \    [^-]>[^-]+++++++++++[-<++++++++++>]<-. \    --------. \    ++++++++++++++. \    --------------------. \    ++++++++++. \    +++. \    -------. \    ++++++++++++++.[^-]

#define CONSTRUIRE_2 \    [^-]>[^-]++++++++++[-<++++++++++>]<-. \    ++++++++++++. \    -. \    +++++. \    +. \    --. \    +++. \    ------------. \    +++++++++. \    -------------.[^-]

#define INFO_ILE_JOUEUR_2 \    [^-]>[^-]++++++++++[-<++++++++++>]<+++++. \    +++++. \    --------. \    +++++++++. \    ----------------. \    ++++++++++. \    +++. \    -------. \    ------. \    +++++++++++. \    +++++. \    ++++++. \    ----------------. \    ++++++++++++++++. \    ---.[^-]

#define TAILLE_TERRAIN_2 \    [^-]>[^-]++++++++[-<++++++++++>]<++++. \    -------------------. \    ++++++++. \    +++. \    . \    -------. \    ++++++++++++++++++++++++++. \    -----------. \    ---------------. \    +++++++++++++. \    . \    -----------------. \    ++++++++. \    +++++.[^-]

#define LISTE_ID_BATEAUX_POSITION_2 \    [^-]>[^-]++++++++++[-<++++++++++>]<++++++++. \    ---. \    ++++++++++. \    +. \    ---------------. \    ------. \    ++++++++++. \    -----. \    -----. \    +++. \    -. \    +++++++++++++++++++. \    ---------------. \    ----. \    ++++++++++++++++++++. \    +++. \    -------------------------. \    +++++++++++++++++. \    -. \    ++++. \    ----------. \    +++++++++++. \    -----------. \    ++++++. \    -.[^-]

#define LISTE_BATEAUX_POSITION_2 \    [^-]>[^-]++++++++++[-<++++++++++>]<++++++++. \    ---. \    ++++++++++. \    +. \    ---------------. \    ------. \    +++. \    -. \    +++++++++++++++++++. \    ---------------. \    ----. \    ++++++++++++++++++++. \    +++. \    -------------------------. \    +++++++++++++++++. \    -. \    ++++. \    ----------. \    +++++++++++. \    -----------. \    ++++++. \    -.[^-]

#define DEPLACER_2 \    [^-]>[^-]++++++++++[-<++++++++++>]<. \    +. \    +++++++++++. \    ----. \    -----------. \    ++. \    ++. \    +++++++++++++.[^-]

#define LISTE_ILES_2 \    [^-]>[^-]++++++++++[-<++++++++++>]<++++++++. \    ---. \    ++++++++++. \    +. \    ---------------. \    ------. \    ++++++++++. \    +++. \    -------. \    ++++++++++++++.[^-]

#define COLONISER_2 \    [^-]>[^-]++++++++++[-<++++++++++>]<-. \    ++++++++++++. \    ---. \    +++. \    -. \    -----. \    ++++++++++. \    --------------. \    +++++++++++++.[^-]

L'interpréteur étant :

prologin.cc

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
///// This file has been generated, if you wish to// modify it in a permanent way, please refer// to the script file : gen/generator_cxx.rb//

#include "prologin.hh"#include "jouer_tour"

#include <fstream>#include <stdexcept>#include <iostream>#include <vector>#include <stack>#include <cstdlib>#include <cstring>

void bf_exec();void exec(std::string const &call, std::vector<int>::iterator mem);inline int conv_ply(int p){    if(p==-1)        return -1;    return p==adversaire();}

///// Fonction appelée au début de la partie//void partie_init(){    std::srand(42);}

///// Fonction appelée à chaque tour//void jouer_tour(){    int exec_count=0;    std::stack<char const *> stack;    char const *end=program+std::strlen(program), *ip=program;

    std::vector<int> memory(4200);    std::vector<int>::iterator mp=memory.begin();    std::string buf_out;

    while(ip!=end){        ++exec_count;        switch(*ip){            case '<':                --mp;                break;            case '>':                ++mp;                break;            case '+':                ++*mp;                break;            case '-':                --*mp;                break;            case '[':                if(exec_count>10000000){                    std::cerr << "\nSTOP (TIMEOUT PREVENTION) with " << exec_count << "exec\n";                    return;                }                if(*(ip+1)=='^'){ // optimisation                    *mp=0;                    while(*ip!=']') ++ip;                } else if(*(ip+1)=='*'){ // optimisation                    *(mp+*(ip+2)-'0')=*mp;                    *mp=0;                    while(*ip!=']') ++ip;                } else if(*(ip+1)=='&'){ // optimisation                    *(mp-*(ip+2)+'0')=*mp;                    *mp=0;                    while(*ip!=']') ++ip;                } else if(*mp) stack.push(ip);                else{                    std::size_t c=1;                    while(c){                        ++ip;                        if(*ip=='[') ++c;                        else if(*ip==']') --c;                    }                }                break;            case ']':                if(*mp) ip=stack.top();                else stack.pop();                break;            case '.':                if(*mp=='\n'){                    exec(buf_out, mp);                    buf_out.clear();                } else buf_out+=static_cast<char>(*mp);                break;            case '%':                //std::cerr << "[@" << (mp-memory.begin()) << "] " << *mp << std::endl;                break;            case ',':                *mp=std::rand()&1;                break;            case '$':                while(*ip!='\n'){ /*std::cerr << *ip;*/ ++ip; }                //std::cerr << std::endl;                break;            case '{':                if(*(ip+1)=='D' && *(ip+2)=='2'){ // Optimisation                    *mp= *mp/2;                    while(*ip!='}') ++ip;                }                break;        }        ++ip;    }}

///// Fonction appelée à la fin de la partie//void partie_fin(){}

void exec(std::string const &function, std::vector<int>::iterator mem){    if(function=="TAILLE_TERRAIN") *mem=TAILLE_TERRAIN;    else if(function=="FIN_PARTIE") *mem=FIN_PARTIE;    else if(function=="MAX_JOUEURS") *mem=MAX_JOUEURS;    else if(function=="REVENU_ILE") *mem=REVENU_ILE;    else if(function=="REVENU_VOLCAN") *mem=REVENU_VOLCAN;    else if(function=="OR_INITIAL") *mem=OR_INITIAL;    else if(function=="CARAVELLE_COUT") *mem=CARAVELLE_COUT;    else if(function=="GALION_COUT") *mem=GALION_COUT;    else if(function=="CARAVELLE_DEPLACEMENT") *mem=CARAVELLE_DEPLACEMENT;    else if(function=="GALION_DEPLACEMENT") *mem=GALION_DEPLACEMENT;    else if(function=="LIMITE_BATEAUX") *mem=LIMITE_BATEAUX;    else if(function=="info_terrain"){        position pos;        pos.y=*++mem;        pos.x=*++mem;        mem-=2;        *mem=info_terrain(pos);    } else if(function=="info_ile_joueur"){        position pos;        pos.y=*++mem;        pos.x=*++mem;        mem-=2;        *mem=conv_ply(info_ile_joueur(pos));    } else if(function=="info_ile_or"){        position pos;        pos.y=*++mem;        pos.x=*++mem;        mem-=2;        *mem=info_ile_or(pos);    } else if(function=="info_bateau"){        bateau b=info_bateau(*++mem-1);        *--mem=b.id+1;        *++mem=b.pos.y;        *++mem=b.pos.x;        *++mem=conv_ply(b.joueur);        *++mem=b.btype;        *++mem=b.nb_or;        *++mem=b.deplacable;    } else if(function=="bateau_existe"){        bool b=bateau_existe(*++mem-1);        *--mem=b;    } else if(function=="liste_bateaux_position"){        position pos;        pos.y=*++mem;        pos.x=*++mem;        mem-=2;        std::vector<int>::iterator cell=mem-1;        std::vector<bateau> l=liste_bateaux_position(pos);        for(auto it=l.begin(); it!=l.end(); ++it){            *++cell=1;            *++cell=it->id+1;            *++cell=it->pos.y;            *++cell=it->pos.x;            *++cell=conv_ply(it->joueur);            *++cell=it->btype;            *++cell=it->nb_or;            *++cell=it->deplacable;        }        *++cell=0;    } else if(function=="liste_id_bateaux_position"){        position pos;        pos.y=*++mem;        pos.x=*++mem;        mem-=2;        std::vector<int>::iterator cell=mem-1;        std::vector<int> l=liste_id_bateaux_position(pos);        for(auto it=l.begin(); it!=l.end(); ++it)            *++cell=*it+1;        *++cell=0;    } else if(function=="liste_iles"){        std::vector<int>::iterator cell=mem-1;        std::vector<position> l=liste_iles();        for(auto it=l.begin(); it!=l.end(); ++it){            *++cell=1;            *++cell=it->y;            *++cell=it->x;        }        *++cell=0;    } else if(function=="mes_iles"){        std::vector<int>::iterator cell=mem-1;        std::vector<position> l=mes_iles();        for(auto it=l.begin(); it!=l.end(); ++it){            *++cell=1;            *++cell=it->y;            *++cell=it->x;        }        *++cell=0;    } else if(function=="id_dernier_bateau_construit"){        *mem=id_dernier_bateau_construit();    } else if(function=="construire"){        bateau_type t=static_cast<bateau_type>(*++mem);        position pos;        pos.y=*++mem;        pos.x=*++mem;        mem-=3;        *mem=construire(t, pos);        /*if(!*mem)            std::cerr << "CONSTRUIRE " << t << " " << pos.y << " " << pos.x << "\n";*/    } else if(function=="deplacer"){        int id=*++mem-1;        position pos;        pos.y=*++mem;        pos.x=*++mem;        mem-=3;        *mem=deplacer(id, pos);        /*if(!*mem)            std::cerr << "DEPLACER " << id << " -> " << pos.y << " " << pos.x << "\n";*/    } else if(function=="coloniser"){        position pos;        pos.y=*++mem;        pos.x=*++mem;        mem-=2;        *mem=coloniser(pos);        /*if(!*mem)            std::cerr << "COLONISER " << pos.y << " " << pos.x << "\n";*/    } else if(function=="charger"){        int id, nor;        id=*++mem-1;        nor=*++mem;        mem-=2;        *mem=charger(id, nor);    } else if(function=="decharger"){        int id, nor;        id=*++mem-1;        nor=*++mem;        mem-=2;        *mem=decharger(id, nor);    } else if(function=="transferer"){        int nor, src, dst;        nor=*++mem;        src=*++mem-1;        dst=*++mem-1;        mem-=3;        *mem=transferer(nor, src, dst);    } else if(function=="score"){        if(*++mem) *--mem=score(mon_joueur());        else *--mem=score(adversaire());    } else if(function=="tour_actuel"){        *mem=tour_actuel();    } else{        for(auto it=function.begin(); it!=function.end(); ++it)            std::cerr << "<-> " << static_cast<int>(*it) << "\n";        throw std::runtime_error("function not found: "+function);    }}

J'avais ajouté une cible Makefile :

Makefile

1
bf:    @echo 'static char const * const program=R"BRAINFUCK_WHAT(' > jouer_tour    @cpp jouer_tour.bf | sed -e 's/^#.*//' >> jouer_tour @echo ')BRAINFUCK_WHAT";' >> jouer_tour

Oui, la boucle sur les bateaux est en O(n ^2^ ) alors qu'il est possible de faire deux boucles foreach en O(n) (à partir de 3, c'est nécessairement du O(n ^2^ ) en brainfuck), mais lors de l'écriture de cette boucle, je ne savais pas si j'allais avoir besoin de plus de boucle imbriquée, j'ai préféré écrire un peu plus de code et perdre en complexité plutôt que de prendre le risque de tout réécrire.

Voilà, comme vous pouvez le voir, certains organisateurs étaient très occupés.
Toute personne perdant contre ce bot sera pendue haut et court.

Répondre au sujet

Vous devez vous enregistrer ou vous connecter pour poster des messages.