Show more

Première tâche, pas la plus facile : recoder une arène complète en Rust, avec toutes les règles du jeu, pour pouvoir tester "localement" ma future IA.

Une bonne occasion d'apprendre comment fonctionne la communication inter-processus (par pipes) en Rust.

Nouvelle année et nouveau défi pour moi :

Je vais essayer d'atteindre la ligue Légende dans le jeu "Code à la Mode" sur Codingame. Encore une fois, je vais utiliser le langage Rust.

Le code complet et mis à jour est disponible ici :

redmine.jpages.eu/projects/adv

Et le crate (package Rust) est disponible ici : redmine.jpages.eu/projects/adv

ou sur mon serveur FTP : ftp://ftp.jpages.eu/projects/adventofcode/aoc2020-1.0.0.crate

La cour suprême autrichienne juge illégaux le port du masque obligatoire à l'école et les cours en alternance.

C'est une immense victoire pour les libertés publiques, et l'éducation.

20minutes.fr/monde/2938679-202

Jour 25 : J'ai fini au bout de 24 minutes 26 secondes pour la partie 1. Record battu de 15 secondes, et ma meilleure place cette année (1868ème).

La partie 2 était évidemment une formalité, à condition d'avoir également les 48 étoiles des précédents problèmes.

Jour 24 : un problème assez facile cette fois, et j'ai pu valider la partie 2 avant 9 heures du matin, ce qui ne m'était plus arrivé depuis le jour 13

Il s'agissait encore une fois d'un automate cellulaire, sur un pavage hexagonal.

Jour 23 (suite) : après avoir écrit mon programme, je n'étais pas encore satisfait, car il s'exécutait en 21 secondes.

Utiliser un tuple au lieu d'un vecteur dans une méthode m'aura permis de faire descendre ce temps d'exécution à 6 secondes.

Jour 23 : Comme dit par beaucoup, le problème 23 illustrait bien l'importance d'utiliser des structures de données efficaces.

Ici, un vecteur ne permet pas de finir la partie 2, il faut utiliser une liste chaînée pour insérer ou supprimer des éléments en O(1).

Jour 22 (suite) : pour cela, il m'a suffi de trouver un algorithme très simple pour déterminer le vainqueur d'une partie de bataille, en fonction du nombre total de cartes, et du joueur possédant la carte la plus forte.

Jour 22 : le problème du jour était une simulation d'une partie de "bataille" (le jeu de cartes), puis d'une variante "récursive".

J'ai eu le bonheur de faire passer le temps d'exécution de mon programme, pour la partie 2, de 50 secondes à 150 millisecondes.

Jour 21 : problème beaucoup plus facile (surtout la partie 2). J'ai décidé cette fois de ne pas me presser, et de bien prendre le temps d'écrire du code propre.

Mon code est écrit dans un style différent, avec un large recours aux clôtures.

Jour 20 : J'ai terminé le problème du jour... il y a seulement une heure.

J'ai énormément galéré sur les transformations (rotations et retournements) à appliquer aux tuiles. Je croyais stupidement qu'il y en avait 6 distinctes, alors qu'il y en avait 8.

Jour 19 : Un problème vraiment difficile, à tel point que j'ai cru ne pas pouvoir finir la partie 2 dans le délai de 24 heures que je m'étais fixé.

Comme hier, c'était un problème dl'analyse syntaxique.

Pour la première fois, j'ai utilisé la fonction map()

Jour 18 : j'ai beaucoup souffert sur la partie 1, en partant sur un algorithme complètement faux.

Il faudra que je révise les algorithmes d'analyse syntaxique, comme l'algorithme Shunting-yard.

La partie 2 était plus facile.

Jour 17 (suite) : en réfléchissant un peu mieux, j'ai trouvé un autre algorithme, plus logique et beaucoup plus efficace qui a réduit le temps d'exécution à 2.5 secondes.

Jour 17 : J'ai réalisé mon meilleur classement aujourd'hui pour la première partie (3725ème), avant de perdre 3000 places pour la 2ème partie.

J'avais trouvé assez vite la réponse à la 2ème partie, mais mon algorithme était mauvais (temps d'exécution > 30 s)

Jour 16 : Le problème le plus complexe à résoudre jusqu'à présent. Je n'aurai pas réussi à valider la partie 2 avant ma pause de midi.

Jour 15 : Le problème du jour portait sur une suite au comportement chaotique, dont il fallait trouver le 2020ème terme (partie 1), puis le 30000000ème terme (partie 2).

J'ai cherché pendant 2 heures un algo plus rapide que O(n), ce qui est probablement impossible.

Jour 14 : Problème assez technique aujourd'hui. J'ai mis un peu plus de 3 heures pour les deux parties.

J'ai bien utilisé des opérations bit à bit ("bitwise operators") mais je n'ai pas vu que je pouvais utilser un xor pour faire de l'inversion binaire.

Show more
Mastodon

The social network of the future: No ads, no corporate surveillance, ethical design, and decentralization! Own your data with Mastodon!