Skip to content

Modeste solveur pour résoudre les défis journaliers de la plateforme https://sutom.nocle.fr/

License

Notifications You must be signed in to change notification settings

pil0u/sutom-tob

Repository files navigation

stuom-tob

Un solveur pour le jeu SUTOM, une adaptation libre du jeu Motus.

En cours de développement sur Twitch et Discord.
Pour s'entraîner au Motus, j'ai mis en ligne la version "joueur humain" du code. Plus d'infos

Introduction

L'objectif initial du projet était de créer un algorithme permettant de résoudre le mot du jour directement sur SUTOM avec du JavaScript.

Après avoir réussi à simuler un parcours dans le navigateur grâce à Puppeteer, j'ai décidé de mettre de côté le JavaScript pour me recentrer sur la partie algorithmique.

Il a fallu recréer le jeu pour que notre solveur puisse y "jouer", pour cela j'ai choisi Ruby 💎.

Usage

À la racine du projet, lancer le script avec :

ruby ruby/run.rb

Toute la configuration se fait au niveau du fichier ruby/config.rb

Mots du jour

Historique de mes propres parties sur SUTOM. Certains jours ont été réalisés en intelligence collective sur Twitch.

Les scores sont en gras* avec astérisque si le solveur a battu l'humain (voir le score final)

Jour Vainqueur Mot Performance humaine v1 v2 v3 v4
093 🕊️ caché 🟥🟦🟦🟡🟡🟡🟡🟡🟦
🟥🟡🟥🟦🟥🟦🟥🟡🟥
🟥🟥🟥🟥🟥🟥🟥🟥🟥
8 3 3 3
092 🕊️ caché 🟥🟦🟦🟡🟦🟡🟦
🟥🟡🟡🟦🟡🟦🟦
🟥🟥🟥🟥🟥🟥🟥
3 4 3 4
091 À résoudre À résoudre 9 3 3 3
090 À résoudre À résoudre 11 4 2 3
089 🤖 caché 🟥🟦🟦🟦🟥🟦🟥🟥🟦
🟥🟦🟦🟡🟡🟦🟡🟡🟥
🟥🟥🟥🟥🟥🟥🟥🟥🟥
5 4 3 2*
088 💪 caché 🟥🟥🟦🟥🟦🟡🟦
🟥🟥🟥🟥🟥🟥🟥
3 3 3 3
087 💪 caché 🟥🟡🟦🟡🟡🟥🟦🟥
🟥🟥🟥🟥🟥🟥🟥🟥
4 3 3 3
086 🤖 caché 🟥🟦🟡🟦🟦🟡
🟥🟡🟡🟦🟦🟦
🟥🟡🟦🟡🟡🟡
🟥🟥🟥🟥🟥🟥
6 4 3* 3*
085 🕊️ caché 🟥🟥🟦🟦🟦🟦🟦🟡
🟥🟥🟡🟦🟡🟦🟥🟦
🟥🟥🟥🟥🟥🟥🟥🟥
6 3 3 3
084 💪 caché 🟥🟥🟦🟦🟡🟡🟡
🟥🟥🟥🟥🟥🟥🟥
3 3 3 3
083 💪 caché 🟥🟡🟦🟥🟥🟥
🟥🟥🟥🟥🟥🟥
8 3 4 4
082 🕊️ caché 🟥🟡🟦🟦🟦🟦🟦
🟥🟥🟥🟡🟡🟡🟦
🟥🟥🟥🟥🟥🟥🟥
6 4 3 4
081 À résoudre À résoudre 5 3 3 3
080 🕊️ caché 🟥🟥🟦🟦🟦🟥
🟥🟥🟥🟥🟥🟥
3 3 4 2
079 💪 caché 🟥🟡🟡🟦🟦🟡🟡
🟥🟥🟥🟡🟦🟡🟡
🟥🟥🟥🟥🟥🟥🟥
4 4 4 4
078 🕊️ caché 🟥🟦🟦🟡🟦🟡
🟥🟥🟦🟥🟥🟦
🟥🟥🟥🟥🟥🟥
5 4 4 3
077 🕊️ caché 🟥🟦🟡🟦🟦🟦🟡🟦
🟥🟦🟦🟡🟥🟥🟦🟥
🟥🟥🟥🟥🟥🟥🟥🟥
6 4 4 3
076 🕊️ caché 🟥🟦🟦🟦🟦🟡🟥
🟥🟡🟦🟡🟦🟦🟥
🟥🟥🟥🟦🟥🟥🟥
🟥🟥🟥🟥🟥🟥🟥
14 5 4 6
075 🤖 caché 🟥🟥🟥🟦🟦🟦🟦🟡
🟥🟥🟥🟡🟦🟦🟦🟦
🟥🟥🟥🟥🟥🟥🟥🟥
5 3 4 2*
074 💪 caché 🟥🟦🟥🟥🟦🟦🟡
🟥🟥🟥🟥🟥🟥🟥
9 3 3 4
073 🤖 caché 🟥🟦🟦🟡🟡🟦
🟥🟡🟡🟡🟦🟦
🟥🟥🟥🟥🟥🟥
6 2* 3 4
072 🕊️ caché 🟥🟡🟡🟦🟦🟦🟦
🟥🟡🟦🟦🟡🟡🟦
🟥🟥🟥🟥🟥🟥🟥
6 4 4 3
071 💪 caché 🟥🟡🟦🟦🟡🟡🟦🟥
🟥🟥🟥🟥🟥🟥🟥🟥
9 4 4 3
070 🕊️ caché 🟥🟥🟦🟡🟡🟦🟦🟦🟥
🟥🟥🟥🟥🟥🟥🟥🟥🟥
4 3 4 2
069 🤖 caché 🟥🟦🟡🟦🟦🟦
🟥🟡🟦🟡🟡🟦
🟥🟥🟦🟥🟦🟡
🟥🟥🟥🟥🟦🟡
🟥🟥🟥🟥🟥🟥
4* 4* 4* 4*
068 À résoudre À résoudre 5 4 3 3
067 À résoudre À résoudre 7 5 2 2
066 🕊️ caché 🟥🟦🟦🟡🟡🟦🟦
🟥🟡🟡🟦🟦🟡🟦
🟥🟥🟥🟥🟥🟥🟥
5 3 3 3
065 🤖 caché 🟥🟦🟡🟦🟦🟦
🟥🟡🟡🟦🟡🟦
🟥🟥🟦🟡🟡🟦
🟥🟥🟥🟥🟥🟥
3 2* 3 3
064 🕊️ caché 🟥🟡🟦🟥🟦🟡🟡🟡🟦
🟥🟥🟥🟥🟥🟥🟥🟥🟥
2 2 3 2
063 🤖 caché 🟥🟦🟦🟥🟦🟦🟥
🟥🟦🟦🟥🟦🟥🟥
🟥🟥🟥🟥🟦🟥🟥
🟥🟥🟥🟥🟥🟥🟥
5 4 4 3*
062 🤖 caché 🟥🟦🟦🟦🟡🟡
🟥🟡🟡🟦🟥🟥
🟥🟥🟥🟥🟥🟥
4 2* 4 2*
061 🤖 caché 🟥🟦🟡🟡🟡🟦🟦🟡🟡
🟥🟥🟦🟥🟡🟥🟦🟦🟡
🟥🟥🟥🟥🟥🟥🟥🟥🟥
5 2* 3 3
060 🤖 caché 🟥🟦🟦🟦🟦🟡
🟥🟦🟦🟥🟦🟦
🟥🟦🟥🟥🟡🟦
🟥🟥🟥🟥🟥🟥
8 5 4 3*
059 🕊️ caché 🟥🟦🟦🟦🟡🟦🟡🟡
🟥🟥🟡🟡🟦🟡🟡🟦
🟥🟥🟥🟥🟥🟥🟥🟥
7 3 3 3
058 🕊️ caché 🟥🟥🟦🟦🟡🟥🟥🟥🟥
🟥🟥🟥🟥🟥🟥🟥🟥🟥
3 3 4 2
057 💪 caché 🟥🟦🟡🟡🟡🟥
🟥🟥🟥🟥🟥🟥
6 3 3 3
056 🕊️ caché 🟥🟦🟦🟦🟡🟦🟦🟦🟥
🟥🟦🟦🟦🟡🟦🟦🟥🟥
🟥🟥🟥🟥🟥🟥🟥🟥🟥
4 3 3 3
055 🕊️ caché 🟥🟦🟡🟦🟦🟡
🟥🟦🟦🟡🟥🟦
🟥🟥🟥🟥🟥🟥
9 3 3 4
054 🕊️ caché 🟥🟦🟡🟦🟡🟦🟡🟦
🟥🟦🟡🟡🟦🟦🟥🟥
🟥🟥🟥🟥🟥🟥🟥🟥
6 3 3 3
053 🤖 caché 🟥🟦🟦🟦🟡🟦🟦
🟥🟡🟡🟦🟦🟡🟦
🟥🟦🟦🟥🟥🟦🟥
🟥🟦🟦🟥🟥🟦🟥
🟥🟥🟥🟥🟥🟥🟥
5 3* 3* 4
052 🕊️ caché 🟥🟡🟦🟦🟦🟥
🟥🟦🟦🟡🟡🟥
🟥🟥🟥🟥🟥🟥
6 4 3 3
051 💪 caché 🟥🟡🟡🟦🟦🟦🟥🟥
🟥🟥🟥🟥🟥🟥🟥🟥
6 5 4 3
050 🕊️ caché 🟥🟦🟦🟦🟦🟡🟦
🟥🟥🟥🟡🟦🟦🟦
🟥🟥🟥🟥🟥🟥🟥
6 3 3 4
049 🤖 caché 🟥🟡🟦🟦🟦🟦
🟥🟡🟦🟡🟡🟡
🟥🟡🟥🟡🟥🟦
🟥🟥🟥🟥🟥🟥
9 5 5 3*
048 🤖 caché 🟥🟦🟦🟦🟡🟡🟡
🟥🟦🟡🟥🟥🟦🟡
🟥🟥🟥🟥🟥🟥🟥
4 3 2* 2*
047 💪 caché 🟥🟦🟦🟡🟦🟦🟦🟥🟦
🟥🟥🟥🟥🟥🟥🟥🟥🟥
6 3 3 3
046 💪 caché 🟥🟡🟦🟦🟦🟡🟦
🟥🟥🟥🟥🟥🟥🟥
6 4 4 3
045 🕊️ caché 🟥🟦🟦🟡🟥🟦
🟥🟦🟥🟦🟥🟥
🟥🟥🟥🟥🟥🟥
4 3 4 4
044 🕊️ caché 🟥🟡🟦🟥🟦🟡🟡🟦
🟥🟥🟥🟥🟥🟥🟥🟥
3 3 3 2
043 🤖 caché 🟥🟦🟦🟦🟡🟦
🟥🟦🟡🟦🟡🟦
🟥🟥🟥🟦🟦🟥
🟥🟥🟥🟥🟥🟥
6 4 3* 3*
042 🕊️ caché 🟥🟥🟡🟡🟡🟦🟦🟦
🟥🟥🟥🟥🟥🟥🟥🟥
7 4 2 3
041 🤖 caché 🟥🟦🟦🟦🟡🟦
🟥🟡🟦🟥🟦🟦
🟥🟥🟦🟥🟦🟥
🟥🟥🟥🟥🟥🟥
7 3* 3* 4
040 🕊️ caché 🟥🟦🟦🟡🟦🟡🟦
🟥🟡🟥🟦🟦🟡🟥
🟥🟥🟥🟥🟥🟥🟥
6 5 3 3
039 🕊️ caché 🟥🟦🟦🟡🟦🟦🟦🟦
🟥🟥🟥🟥🟥🟥🟥🟥
4 3 3 2
038 🕊️ caché 🟥🟦🟦🟦🟦🟥
🟥🟦🟦🟦🟥🟥
🟥🟥🟥🟥🟥🟥
5 4 4 3
037 💪 caché 🟥🟥🟦🟦🟡🟦🟡
🟥🟥🟥🟥🟥🟥🟥
5 4 3 3
036 🤖 caché 🟥🟦🟡🟦🟡🟦
🟥🟥🟦🟦🟡🟦
🟥🟥🟥🟥🟥🟥
4 2* 3 2*
035 🕊️ caché 🟥🟦🟥🟦🟦🟡
🟥🟥🟥🟡🟥🟦
🟥🟥🟥🟥🟥🟥
7 5 3 4
034 🤖 caché 🟥🟡🟦🟦🟦🟦🟦
🟥🟡🟡🟦🟦🟡🟡
🟥🟥🟥🟥🟥🟥🟥
4 2* 3 3
033 🕊️ caché 🟥🟡🟦🟦🟡🟦
🟥🟥🟡🟡🟡🟡
🟥🟥🟥🟥🟥🟥
4 3 4 3
032 🕊️ caché 🟥🟡🟦🟦🟥🟡
🟥🟥🟥🟥🟥🟦
🟥🟥🟥🟥🟥🟥
10 3 4 4
031 🤖 caché 🟥🟡🟦🟡🟡🟥🟦🟦🟥
🟥🟡🟦🟦🟡🟥🟦🟦🟥
🟥🟥🟥🟥🟥🟥🟥🟥🟥
4 2* 3 2*
030 💪 caché 🟥🟥🟦🟦🟡🟦🟦🟦
🟥🟥🟥🟥🟥🟥🟥🟥
5 3 4 3
029 🤖 caché 🟥🟦🟦🟡🟡🟦🟥
🟥🟦🟡🟡🟦🟦🟥
🟥🟥🟥🟦🟥🟦🟥
🟥🟥🟥🟥🟥🟥🟥
5 3* 3* 4
028
(Twitch)
🕊️ caché 🟥🟥🟦🟦🟦🟦
🟥🟥🟡🟡🟦🟦
🟥🟥🟥🟥🟥🟥
3 3 4 3
027 💪 caché 🟥🟦🟥🟦🟥🟦
🟥🟥🟥🟥🟥🟥
4 3 3 3
026 🕊️ caché 🟥🟦🟡🟡🟦🟦🟦
🟥🟦🟡🟡🟦🟦🟡
🟥🟥🟥🟥🟥🟥🟥
8 4 3 3
025 🤖 caché 🟥🟦🟦🟦🟡🟡🟦🟥
🟥🟡🟦🟡🟦🟡🟦🟥
🟥🟥🟥🟥🟥🟥🟥🟥
5 4 3 2*
024 🕊️ caché 🟥🟥🟦🟥🟦🟡🟦
🟥🟥🟥🟥🟥🟥🟥
7 4 3 2
023 🕊️ caché 🟥🟦🟡🟦🟡🟦🟦
🟥🟥🟡🟦🟦🟦🟡
🟥🟥🟥🟥🟥🟥🟥
3 3 3 3
022 🤖 caché 🟥🟦🟦🟦🟦🟦
🟥🟡🟥🟦🟦🟡
🟥🟥🟥🟥🟥🟥
9 2* 3 3
021 🤖 caché 🟥🟦🟥🟦🟡🟦🟦🟦
🟥🟥🟥🟥🟦🟦🟡🟦
🟥🟥🟥🟥🟥🟥🟦🟥
🟥🟥🟥🟥🟥🟥🟥🟥
6 3* 3* 3*
020 À résoudre À résoudre 4 3 3 4
019 À résoudre À résoudre 5 4 3 3
018
(Twitch)
💪 caché 🟥🟡🟦🟦🟦🟡🟡
🟥🟥🟥🟥🟥🟥🟥
11 4 3 4
017
(Twitch)
💪 caché 🟥🟦🟦🟦🟦🟦🟥
🟥🟥🟥🟥🟥🟥🟥
6 4 4 3
016
(Twitch)
🕊️ caché 🟥🟥🟡🟡🟦🟦🟦
🟥🟥🟦🟡🟦🟡🟡
🟥🟥🟥🟥🟥🟥🟥
5 3 3 3
015
(Twitch)
💪 caché 🟥🟥🟦🟦🟥🟦🟡
🟥🟥🟥🟥🟥🟥🟥
7 3 5 3
014
(Twitch)
🕊️ caché 🟥🟦🟦🟡🟡🟡🟡🟦
🟥🟦🟦🟡🟡🟦🟥🟥
🟥🟥🟥🟥🟥🟥🟥🟥
9 3 3 3
013
(Twitch)
🕊️ caché 🟥🟡🟦🟦🟡🟡🟥🟦
🟥🟥🟥🟦🟥🟥🟥🟦
🟥🟥🟥🟥🟥🟥🟥🟥
7 3 3 3
012
(Twitch)
💪 caché 🟥🟦🟡🟡🟡🟦🟦
🟥🟥🟥🟥🟥🟥🟥
4 4 4 4
011
(Twitch)
💪 caché 🟥🟡🟡🟥🟦🟡
🟥🟥🟥🟥🟥🟥
9 3 5 3
010
(Twitch)
🤖 caché 🟥🟦🟦🟦🟡🟥🟡🟡
🟥🟡🟦🟦🟡🟡🟦🟦
🟥🟡🟦🟦🟦🟥🟡🟥
🟥🟥🟥🟥🟥🟥🟥🟥
8 4 4 2*
009
(Twitch)
🕊️ caché 🟥🟥🟥🟥🟥🟡🟦
🟥🟥🟥🟥🟥🟥🟥
5 2 2 2
008 💪 caché 🟥🟦🟦🟡🟡🟡🟦
🟥🟡🟡🟦🟡🟦🟡
🟥🟥🟥🟥🟥🟥🟥
4 4 5 4
007
(Twitch)
🕊️ caché 🟥🟦🟦🟦🟡🟦🟡
🟥🟥🟦🟡🟦🟦🟦
🟥🟥🟥🟥🟥🟥🟥
3 3 4 4
006
(Twitch)
🕊️ caché 🟥🟦🟦🟦🟦🟡
🟥🟥🟦🟡🟡🟦
🟥🟥🟥🟦🟥🟦
🟥🟥🟥🟥🟥🟥
8 4 4 4
005
(Twitch)
🤖 caché 🟥🟦🟦🟡🟡🟦🟦🟡🟦
🟥🟡🟦🟦🟦🟦🟡🟡🟥
🟥🟥🟥🟥🟥🟥🟥🟥🟥
4 3 2* 3
004
(Twitch)
🤖 caché 🟥🟥🟡🟦🟥🟦🟦🟥
🟥🟥🟦🟡🟥🟡🟦🟥
🟥🟥🟦🟦🟥🟥🟥🟥
🟥🟥🟥🟥🟥🟥🟥🟥
5 3 3 2*
003
(Twitch)
🕊️ caché 🟥🟡🟦🟦🟦🟡🟦🟦
🟥🟡🟡🟡🟡🟦🟡🟡
🟥🟥🟥🟥🟥🟥🟥🟥
7 3 4 5
002
(Twitch)
🤖 caché 🟥🟦🟡🟡🟦🟦
🟥🟦🟦🟥🟥🟥
🟥🟥🟦🟥🟥🟥
🟥🟥🟥🟥🟥🟥
11 4 2* 2*
001
(Twitch)
🤖 caché 🟥🟦🟡🟦🟡🟦🟦
🟥🟦🟦🟡🟡🟡🟦
🟥🟥🟥🟥🟥🟦🟦
🟥🟥🟥🟥🟥🟥🟥
8 4 3* 3*

Deus ex machina?

💪 🤖 🕊️
20 27 39 7

Benchmark

Tentatives moyennes

Échantillon v1 v2 v3
100 mots
1k mots
5k mots
10k mots
150k mots

Statistiques complémentaires

v1

Échantillon min 25% 50% 75% max µ σ 90% 95% 99%
100 mots
1k mots
5k mots
10k mots
150k mots

Prochaines étapes

  • Modifier le run des bots (et du player) pour charger la matrice au début : plus besoin de calculer !
  • Créer une version qui utilise les calculs d'entropie
  • Benchmarker efficacement (mémoïsation ?) les différentes versions du solveur et archiver les résultats
  • Compléter la partie Usage du README
  • Stocker les résultats des benchmarks dans des fichiers (YAML, JSON...) (exemple)
  • Ajouter les versions (Ruby, Node) utilisées
  • Créer une extension de navigateur qui résout le mot SUTOM du jour avec notre meilleure version

(idée) Stream automatique de Motus - intelligence collective vs robot

S'entrainer au Motus en ligne

Pour créer un solveur, il faut que l'algorithme puisse jouer au jeu. Par conséquent, j'ai dû reproduire le jeu et ses règles en Ruby. J'en ai profité pour mettre cette version jouable en ligne.

Pour lancer une partie avec un mot aléatoire :

  1. Se rendre sur cette page
  2. Cliquer une fois sur le bouton vert Run
  3. Patienter jusqu'à ce que le Mot à trouver s'affiche.
  4. La partie peut démarrer.

À noter :

  • Le mot est choisi aléatoirement parmi les 150 000 mots du dictionnaire (le fichier mots.txt). Cela inclut des verbes conjugués et autres mots peu usités.
  • Le nombre de tentatives est illimité.
  • Écrire en minuscule fonctionne très bien.
  • En cas de blocage sur un mot, vous pouvez taper q ou Q en guise de proposition et le jeu s'arrête en vous dévoilant la solution.

Choisir son propre mot

Si vous souhaitez prendre la main sur le mot à faire deviner pour le partager à vos amis ou faire jouer des élèves, voici les étapes à suivre :

  1. Créez un compte sur Replit
  2. Sur la page de mon script, cliquez sur le bouton Fork repl. Cette action sauvegarde le script (le code) dans votre propre espace Replit et vous permet de le modifier, l'adapter à vos besoins.
  3. Parmi les fichiers à gauche, cliquez sur main.rb et remplacer entièrement la ligne 8 avec, par exemple :
mot = "JUSTICE"

Le mot doit être entre guillemet et en majuscules. Vous pouvez jeter un œil rapide au fichier mots.txt pour vérifier que votre mot existe bien dans le dictionnaire.

  1. (Optionnel) Quand le mot est choisi, n'hésitez pas à tester en cliquant sur Run et en jouant votre partie.
  2. En haut à gauche, à côté du nom du projet, cliquez sur le petit rubis, puis sur (à droite dans le menu ouvert) et enfin sur Spotlight. Cette action vous redirige vers la page que vous pouvez partager à vos amis pour qu'ils jouent.

Si vous souhaitez modifier le mot, il suffit de recommencer à partir de l'étape 3. L'URL reste la même pour vos amis !

About

Modeste solveur pour résoudre les défis journaliers de la plateforme https://sutom.nocle.fr/

Resources

License

Stars

Watchers

Forks