Super Mario Bros : The Lost Levels est un jeu très difficile, tous les joueurs qui l'ont testé le savent. Mais ce qu'une bande de mathématiciens / informaticiens (G. Aloupis, E. D. Demaine, A. Guo et G. Viglietta) ont démontré en février 2014 dans un article d'une trentaine de pages, c'est que c'est plus qu'un jeu difficile : c'est un jeu... NP-difficile ! Et ce n'est pas le seul : la plupart des jeux de la série des Mario, Zelda, Donkey Kong, Metroid et Pokémon sont eux aussi NP-difficile. Candy Crush aussi, d'ailleurs, mais cela n'a aucun rapport.
Il n'est pas vraiment ici question de la difficulté de ces jeux en elle-même, mais plutôt de la complexité des puzzles qu'il est possible de générer avec le moteur de ces jeux.

En informatique, une question de type Oui/Non peut être plus ou moins complexe : plus un problème est complexe, plus les algorithmes permettant de les résoudre seront long à être exécutés. Il existe tout un bestiaire de classes de complexités, les principales étant les classes P et NP (bien que l'on ne sache pas réellement si ces deux classes sont distinctes ou non, mais c'est un autre problème). 
D'un côté, donc, il y a les problèmes P (polynomiaux), ceux qui sont faciles et rapides à résoudre. Par exemple, savoir si une liste est triée est un problème facile : si il me faut 21 secondes pour vérifier qu'une liste donnée de mots est rangée par ordre alphabétique, il m'en faudra 42 pour vérifier qu'une liste 2 fois plus grande l'est. Le temps de cette vérification est ici proportionnel à la taille des données qui rentrent en jeu, et c'est en cela que l'on peut dire que ce problème est facile. De manière plus globale, un problème est "facile" si le temps nécessaire pour y répondre est une fonction polynomiale de la taille des données.
De l'autre côté, il y a les problèmes NP qui ne sont pas P (Non déterministe en temps polynomial), ceux qui sont dans les grandes lignes difficiles et longs à résoudre. Par exemple, savoir s'il est possible de relier les 6 plus grandes villes de France en moins de 30 heures demandera 20 secondes de calculs, tandis que savoir si on peut relier les 12 plus grandes villes en moins de 60h prendra 5 jours de calculs, et c'est encore pire si le nombre de villes augmente. Le temps n'est pas du tout proportionnel à la taille des données impliquées ! Un problème est donc "difficile" si le temps nécessaire pour répondre "non" n'est pas une fonction polynomiale de la taille des données (mais qu'il peut quand même être résolu de manière polynomiale si l'algorithme utilise un générateur de hasard).

Ce qui est NP-difficile chez les jeux classiques de Nintendo, c'est de savoir si, dans une carte d'un Mario ou d'un Pokémon généralisé, il est toujours possible d'aller d'un point A à un point B en respectant les règles de ce jeu. Et on va le prouver, en montrant que dans tous les jeux Nintendo se cache en fait un problème 3-SAT !

Le problème 3-SAT
Le problème SAT est un problème de classe NP. S'il ne devait en rester qu'un, ça serait celui-là. Pour montrer qu'un problème est NP-difficile, le meilleur moins de procéder est bien souvent de montrer qu'il peut être ramené à ce problème. Le problème SAT est le suivant :

Étant donné une forme normale conjonctive, est-il possible d'assigner des valeurs booléennes à ses variables qui la rende logiquement vraie ?

Détaillons un peu. Si on dispose de plusieurs variables booléennes ("Vrai" ou "Faux") A, B, C et D, une forme normale conjonctive est une expression construite avec ces variables (ou leur négation) composée de parenthèses de "ou" entrecoupées de "et". L'expression suivante

(A ou B ou ¬D) et (¬A ou ¬C ou ¬D) et (A ou C ou D) et (¬A ou B ou ¬C) et (B ou ¬C ou ¬D)

est un exemple de forme normale conjonctive. Celle-ci est constituée 4 variables, de 5 clauses et de 3 variables par clauses. La question qui se pose alors est de savoir si il est possible de déterminer des valeurs logiques pour chacune des 4 variables qui rendent l'expression vraie.
Dans ce cas, c'est effectivement possible, en prenant par exemple les variables A=Vrai, B=Vrai et C=Faux et D=Faux, car chacune des 5 clauses de la FNC sont vérifiées. Mais pour aboutir à cette solution, la façon la plus simple de procéder reste encore d'essayer les 16 combinaisons possibles jusqu'à tomber sur une solution qui fonctionne. Mais lorsque le nombre de variables augmente, le nombre de combinaisons explose, et c'est pour cela que le problème SAT est (NP-)difficile !
Puisqu'il a été démontré que le problème SAT est équivalent au problème 3-SAT (cas où chaque clause ne contient que 3 variables), c'est ce problème particulier qui va nous intéresser.

Pour démontrer que les jeux Nintendo sont NP-difficiles, il faut donc montrer que certains niveaux de Metroid ou de Zelda peut être ramenés à l'assignation de variables d'une forme normale conjonctive. Prenons l'exemple de la forme normale conjonctive suivante

FNC = (A ou ¬B ou C) et (¬A ou B ou C) et (A ou ¬B ou ¬C)

Pour transformer ce problème 3-SAT en niveau de Zelda, il faut que le level design oblige Link à résoudre ce problème de logique. Pour cela, on va simuler au sein du jeu l'assignation des variables, ainsi que la vérification des clauses en fonction des variables rentrées.
Dans un premier temps, notre avatar passera successivement, et sans possibilité de retour en arrière, par trois modules d'assignation de variables (autant que de variables). Chacun de ces modules consiste à choisir un chemin, celui-ci correspond à donner une valeur logique (Vrai/Faux) à chacune des variables A, B et C. Lorsqu'une valeur "Vrai" ou "Faux" est choisie pour une variable, elle donne accès aux modules de clauses correspondant (par exemple, choisir "Vrai" pour la variable A donne un accès aux clauses (A ou ¬B ou C) et (A ou ¬B ou ¬C), car c'est une valeur qui valide ces clauses). Ces modules de clauses, si ils sont tous visités au moins une fois, ouvrent l'accès final à l'arrivée. Résoudre le problème 3-SAT consiste donc à trouver le chemin qui permet d'ouvrir ce chemin final.

Schéma modules

Schéma de la carte qui permettra de résoudre le problème 3-SAT ci-dessus.
En vert les modules de départ/arrivée, en bleu les modules d'assignation des variables et en rouge les modules de vérification des clauses.
Les chemins noirs correspondent à des chemins que l'on peut passer que dans un seul sens, les chemins rouges peuvent être traversés dans les deux sens. Il ne doit être à aucun moment possible de sortir de ces chemins.
La sortie V du module variable A donne seulement accès aux entrées A, lorsqu'elles existent, des modules de clauses, ainsi qu'à une entrée sans retour possible dans le module variable B.

Ainsi, il faudra construire pour chacun des jeux les modules correspondant aux différentes étapes logiques:

  • Module d'assignation des variable
  • Module de clause

Ainsi que des modules qui permettent de mettre en place le schéma au sein du jeu :

  • Module de départ / d'arrivée
  • Module de carrefour, qui empêche de passer d'un chemin à un autre lorsque deux chemins différents se croisent
  • Module de chemin à sens unique

La saga The Legend of Zelda est NP-difficile !
Commençons par la saga The Legend of Zelda ! Dans cette série, on incarne Link, héros vêtu du vert, qui s'attelle épisode après épisode à sauver la princesse Zelda des griffes de génies démoniaques. Pour l'aider dans sa quête, il dispose d'un arsenal d'objets variant en fonction des jeux, comme des bombes, un boomerang, un marteau ou un masque permettant de danser comme Kamaro. L'un des objets emblématique de la série est le grappin qui permet à Link d'atteindre des zones inatteignables, et c'est cet objet qui nous permettra de montrer que le jeu est NP-difficile !

Ce n'est pas vraiment du jeu The Legend of Zelda que parle le théorème de Aloupis, mais de sa version généralisée. Dans cette version, les cartes peuvent être arbitrairement grande, tout comme la mémoire de la SNES qui la ferait tourner. Elle garde cependant les caractéristiques du jeu original : même comportement des ennemis, des décors et des objets, même gameplay, etc. Le théorème de Aloupis énonce donc :

Dans le jeu The Legend of Zelda : A Link to the past généralisé, déterminer si il est possible d'atteindre un point donné depuis un autre point donné est un problème NP-difficile.

On va commencer par le démontrer dans la version généralisé de The Legend of Zelda: A Link to the Past pour une raison assez simple : c'est le meilleur épisode de la série. Seuls deux éléments du gameplay nous seront utile dans la démonstration :

  • Link est capable de pousser certaines pierres (mais ne peut pas les tirer)
  • A l'aide du grappin, Link peut rejoindre une plate-forme contenant un coffre, dans le cas où aucun obstacle se trouve dans sa trajectoire. Il peut aussi s'agriper aux pierres.

On supposera alors que Link ne dispose d'aucun autre objet que le grappin (en particulier, qu'il ne possède aucun objet lui permettant de sauter).

Module de départ / d'arrivée :
Pas de problème pour cela : on supposera que Link entre dans la salle depuis une porte, et cherche à atteindre l'autre porte. On veillera cependant à placer un sol destructible au début de la pièce, puisque si Link tombe dans un précipice, il serait téléporté en début de salle.

Module d'assignation des variables :
Pour chacune des variables du problème SAT correspondant, Link doit choisir une valeur logique Vrai ou Faux. Pour modéliser cela, on oblige Link a devoir choisir entre deux chemins qui s'offre à lui, sans possibilité de retour en arrière, et c'est le grappin qui permet cela :

Zelda_assignation_variable
Module d'assignation de variable :
Link arrive en haut, et doit choisir, grâce au grappin, l'un des deux chemins proposés
Le chemin de gauche correspondra à l'assignation Vrai, le chemin de droite à l'assignation Faux.

Ce module donne également une façon de construire le module de passage à sens unique, en plaçant un coffre de l'autre côté d'un précipice.

Module de clauses :
Avant de pouvoir accéder à la porte finale, Link doit avoir ouvert le passage pour chacun des modules de clauses. Chacun de ces modules doit avoir été visité au moins une fois par Link pendant la phase d'assignation des variables, avant de procéder à la vérification finale.

Zelda_clause
Module de clause :
Link entre dans ce module par la droite, et doit atteindre la sortie à gauche.
Pour passer, il faut que (au moins) l'une des pierres ait été poussée, afin qu'elle puisse être atteinte à l'aide du grappin.
Chaque pierre correspond à l'une des trois variables de la clause concernée, les chemins y menant étant reliés à leur variable correspondante.

Module de carrefour :
Les chemins se croisent souvent, et il ne faut pas que Link puisse passer d'un chemin à un autre. Encore une fois, le grappin permet de construire de tels croisements :

Zelda_carrefour
Module de carrefour :
Si Link entre à l'ouest, il ne peut que ressortir à l'est, grâce au grappin. Et inversement.

Maintenant que l'on dispose de tous ces modules, on peut fabriquer un donjon pour The Legend of Zelda: A Link to the Past arbitrairement difficile, au sens de la complexité. CQFD !

Un petit exemple pour montrer à quel point cette construction est horrible, avec la FNC donnée plus haut en exemple :  (A ou ¬B ou C) et (¬A ou B ou C) et (A ou ¬B ou ¬C) :

Zeldaaaaaaah
Le plan du donjon correspondant à la FNC : (A ou ¬B ou C) et (¬A ou B ou C) et (A ou ¬B ou ¬C)
Terminer cette salle est équivalent à résoudre le problème NP-difficile 3-SAT correspondant !
Ce qui prend en fait le plus de place dans est le nombre énorme de modules de carrefour...

Les épisodes RPG de la série qui suivent A Link to the Past gardent les mêmes mécaniques de jeu, en particulier le grappin et la possibilité de pousser des pierres. La démonstration est donc exactement la même, et on peut conclure que tous les épisodes de la série, dans leur version généralisée, sont NP-difficile.
Cependant, le grappin ne peut pas être trouvé dans le premier épisode de la série, The Legend of Zelda. Des mécanismes de poussage de blocs sont cependant présent, ce qui permet tout de même de prouver que lui aussi est NP-difficile, puisqu'il est équivalent au jeu Sokoban (un jeu où l'on incarne un garde d'entrepot chargé de ranger des caisses, démontré comme étant NP-difficile).
Seul The Adventure of Link ne peut pas être prouvé de cette façon comme NP-difficile, son gameplay étant radicalement différent des autres épisodes de la série. La complexité de ce jeu est donc toujours ouverte !

La saga Super Mario Bros. est NP-difficile !
Autre saga phare de Nintendo : les jeux de plate-forme de la série des Super Mario Bros., qui contient quand même une vingtaine d'épisodes. On y incarne Mario, un plombier moustachu vouant sa vie à arpenter le monde pour venir en aide à divers avatars féminins. Et sa tâche n'est pas aisée : pour ce qui est des épisodes 2D de la série, on peut montrer qu'ils sont tous NP-difficiles. Le schéma de la preuve est le même : il faut construire les modules de variables, de clause et de croisement !

Chaque épisode de la série présente ses spécificités, mais on peut commencer par les deux premiers épisodes : Super Mario Bros. et Super Mario Bros. : The Lost Levels. Ces deux épisodes sont techniquement similaires, puisqu'ils sont basés sur le même moteur de jeu. En particulier, tous les éléments du premier épisode de retrouvent à l'identique dans le suivant.

Encore une fois, on parlera de maps généralisées pour Super Mario Bros. On supposera que la carte peut être arbitrairement grande, et qu'elle n'est soumise à aucune contrainte technique. En particulier, on va admettre que l'écran du jeu peut être arbitrairement grand, puisque, dans le jeu original, le scrolling empêche Mario de sortir de l'écran par la gauche. On supprimera aussi la contrainte du temps. Le théorème de Aloupis énonce donc :

Dans le jeu Super Mario Bros. généralisé, déterminer si il est possible d'atteindre le drapeau de fin d'un niveau depuis son départ est un problème NP-difficile.

Pour démontrer cela, on s'appuiera sur les propriétés suivantes :

  • Mario est capable de marcher, courir et sauter (jusqu'à une hauteur fixée). Il peut mourir instantanément si il tombe dans un trou sans fond, mais ne subit aucun dommage lors de chutes.
  • Initialement, Mario est petit. Lorsqu'il ramasse un champignon, il devient super Mario, plus grand, et acquière le pouvoir de casser certaines briques en sautant par en-dessous. Lorsqu'il est touché par un ennemi, il redevient Mario, petit.
  • Mario peut également ramasser des étoiles dans des blocs "?", qui le rendent temporairement invulnérable.

Ces quelques éléments du gameplay vont nous permettre de construire les modules nécessaires à la preuve

Module de départ / d'arrivée :
On supposera que Mario doit ramasser en début de niveau un super champignon, et qu'il doit rester Super Mario jusqu'à la fin du niveau. Pour obliger cela, on utilisera les modules de départ et d'arrivée suivants :

Mario_debut
Module de départ :
Le bloc contient un super champignon

Mario_fin
Module d'arrivée :
Pour atteindre le drapeau d'arrivée, il est nécessaire d'avoir pris le champignon du départ

Module d'assignation de variable :
Pour affecter une valeur booléenne à une variable, on utilisera le fait que lorsque Mario tombe, il ne pourra plus remonter :

Mario_variables
Module d'assignation de variable :
Mario doit faire un choix entre le chemin de gauche et de droite. Une fois le choix fait, on ne pourra plus revenir en arrière.

Module de clause :
Pour pouvoir passer ce module de clause, Mario doit faire apparaître une étoile d'invincibilité contenue dans les blocs "?", seule celle-ci permettra de passer les tourniquets enflammés sans être blessé. Ce sont ces blocs "?" qui sont accessibles depuis les chemins d'assignation de variables.

Mario_clause
Module de clause :
Pour franchir ce module, il est nécessaire d'avoir activé l'un des blocs "?"

Module de carrefour :
Le plus difficile à construire, c'est en fait ce module de carrefour :

Mario_carrefour
Module de carrefour :
Si Mario arrive du côté gauche, il ne pourra que sortir du côté droit. Pour cela, il devra retrouver sa taille initiale grâce au Goomba, ce qui lui donne accès au petit passage. Sa petite taille l'empêche de casser les briques, et l'oblige à ressortir du côté droit, après avoir repris un champignon dans le bloc "?".
Si Mario arrive en bas, sa grande taille lui permettra de prendre le chemin du haut en cassant les briques, mais lui interdit le passage réservé au petit Mario.
Ce carrefour ne peut cependant être traversé que dans le sens gauche-droite ou bas-haut.

Puisque ces modules peuvent être réalisés, Super Mario Bros. et Super Mario Bros. : The Lost Levels sont NP-difficile ! CQFD.

Je ne me vais pas me risquer à construire un exemple de monde simulant un problème SAT, la taille du module de carrefour rendront la carte démesurée...
Et les autres jeux de la saga dans tout ça ? Eh bien, il va falloir regarder au cas par cas...

Super Mario Bros 3
Dans ce jeu, les flammes n'existent pas ! Il va falloir du coup modifier le module de clause.

SMB3_clause
Module de clause de SMB3 :
Pour franchir le mur de brique du chemin du bas, il est nécessaire d'avoir éliminé l'un des trois Koopa du dessus (chaque tortue correspond à une variable de la clause). 

Super Mario World
Les flammes n'existent pas non plus dans cette opus de la série. Mais les grands absents de cet épisode, ce sont les briques, qui sont remplacées par des blocs jaunes. Ces blocs ne peuvent pas être détruit, mais il est possible de les franchir par en-dessous quel que soit la taille de Mario, et par au-dessus lorsque Mario est grand. Il faut donc modifier les modules d'arrivée, de clause et de carrefour:

SMW_Arrivee
Module d'arrivée :
Un champignon est nécessaire pour franchir le bloc jaune.

SMW_Clause
Module de clause :
Mario doit franchir ce module depuis le côté droit jusqu'au côté gauche. Pour ce faire, il doit appuyer sur le bouton P contenu dans le bloc "?", celui-ci transformant les pièces en blocs franchissables. Pour que ce bouton apparaisse, il faut que l'une des carapaces de Koopas atteigne le bloc "?", les chemins amenant à ces Koopas n'étant accessibles que lors de la phase d'assignation des variables.
A noter tout de même qu'il faut placer un dispositif (des vignes servant d'échelle, par exemple) empêchant Mario d'emporter l'une des carapaces.

SMW_Carrefour
Module de carrefour :
Le principe reste le même. Ce carrefour est traversable de gauche à droite et de haut en bas.

Les autres épisodes
Pour les épisodes suivants, le principe reste le même. Il faut simplement se méfier des wall jump qui apparaissent à partir de Super Mario 64, qui obligent à repenser les modules d'assignation de variable...

La saga Pokémon est NP-difficile !
Une fois n'est pas coutume, je vais devoir à nouveau parler de Pokémon sur ce blog ! Ce n'est quand même pas ma faute si on peut y trouver autant de problématiques mathématiques... Les jeux de cette saga mettent en scène un jeune à casquette qui cherche à réaliser son rêve : capturer un maximum de Pokémon et les entraîner à combattre afin de devenir maître Pokémon ! Une vingtaine d'épisodes sont sortis, et le constat est sans appel : ils sont tous NP-difficiles !

Tous les jeux de la série mettent en scène des problèmes de type Sokoban, et la simple existence de ce mécanisme entraîne sa NP-complexité. Mais on va plutôt le démontrer en s'appuyant sur le cœur des jeux Pokémon : les combats contre les dresseurs !

Encore une fois, il nous faut une version idéalisée du jeu (carte et mémoire en machine arbitrairement grande), et le théorème de Aloupis devient :

Dans la série RPG des jeux Pokémon (généralisés), déterminer si il est possible d'atteindre un point donné depuis un autre point donné est un problème NP-difficile.

Pour construire des cartes construisant des problèmes SAT, on va s'appuyer sur un principe de base des jeux : quand on passe dans le champs visuel d'un dresseur Pokémon adverse, il s'avance vers nous pour nous combattre. Si le dresseur est battu, il restera à sa place, ne pourra plus bouger et ne cherchera plus à combattre. Si un autre dresseur est dans le champ de vision de premier dresseur, celui-ci ne nous verra pas. On se servira de ces mécanismes pour bloquer certains passages

Pour les besoins de la démonstration, on ne considérera que deux types de dresseurs ennemis : les dresseurs faibles et les dresseurs forts.

  • On supposera que notre avatar ne possède aucun objet utilisable et une équipe composée de un seul Pokémon avec une seule attaque : Fantominus (avec l'attaque Destruction, qu'il apprend dans la génération I ou II), ou Skelénox (avec l'attaque Souvenir, à partir de la génération III). Les attaques Destruction et Souvenir ont la particularité de mettre K.O. le Pokémon qui le lance. Ainsi, notre seule action possible lors d'un combat est de lancer l'autodestruction, et de perdre le combat si l'on attaque en premier.
  • Les dresseurs faibles seront forcément battu. Pour implémenter un tel dresseur, on pourra par exemple supposer qu'ils ne possèdent que un Pokémon, un Électrode de niveau 100 et de vitesse maximale possédant la seule attaque Destruction. Dans un combat, ce dresseur faible attaquera en premier, et la destruction lui fera perdre le match. Puisque notre Pokémon est de type spectre, il sera insensible à cette attaque de type Normal.
  • Les dresseurs forts sont imbattables. Ils possèdent deux Pokémon quelconques. Lorsque l'on combat un de ces dresseurs, on sera obligé d'utiliser l'attaque Destruction ou Souvenir, amenant nécessairement à la défaite.

Dans les modules suivants, le champs de vision des dresseurs sera représenté en rouge pour les dresseurs invulnérable, et en bleu pour les dresseurs faibles.

Module de départ / d'arrivée :
Rien de particulier pour ce module, on a juste à se fixer un point de départ et d'arrivée.

Module de chemin à sens unique :
Les routes à sens unique existent déjà dans tous les jeux de la série, grâce à l'existence des corniches. Il est tout de même possible de construire ces chemins uniquement grâce à des dresseurs :

Pokemon_sens_unique
Module de chemin à sens unique :
Quand on passe ce chemin dans un sens, le dresseur bleu s'avancera pour combattre (et perdre), ce qui laissera la voie libre au dresseur rouge du bas. Le chemin de retour implique donc de combattre ce dresseur invulnérable : le retour est impossible. 
L'autre dresseur rouge est présent pour nous empêcher d'aller parler au dresseur bleu.

Module d'assignation de variable :
Dans les jeux Pokémon, les combats contre les dresseurs peuvent être déclenchés de deux façons différentes : soit lorsque l'on rentre dans leur champ de vision (et le dresseur s'avance pour nous combattre), soit lorsqu'on leur parle. Ce sont ces mécaniques que l'on utilisera pour assigner les variables.

Pokemon_Variables (2)
Module d'assignation de variable :
On arrive par la gauche. Pour prendre la sortie de droite, il faut commencer par aller parler au dresseur sans être vu. Une fois immobilisé, la sortie de droite est disponible, et la sortie haute condamnée. Inversement, pour prendre la sortie haute, on commencera par faire avancer le dresseur en rentrant dans son champ visuel. Il laisse alors un accès au chemin du haut.

Module de clause :

Pokemon_Clause
Module de clause :
Il doit être traversé de droite à gauche. 
Si le module n'a pas été visité depuis les entrées A, B ou C, tous les dresseurs bleus s'avanceront pour combattre, laissant le champ libre au dresseur rouge qui regarde vers la gauche. Il bloquera alors le chemin. Il faut donc préalablement neutraliser ces dresseurs bleus, en allant parler à au moins l'un d'entre eux.

Module de carrefour :
Encore une fois, le module de carrefour est le plus compliqué. Celui-ci peut être traversé une fois de gauche à droite, ou une fois de haut en bas.
Ce module comprend 4 modules de chemin à sens unique.

Pokemon_carrefour
Module de carrefour :
Pour franchir ce carrefour de gauche à droite, on commencera par venir parler au dresseur bleu qui regarde loin vers la droite. Après avoir franchit deux des quatre modules de sens unique, la voie sera libre pour la sortie de droite. 

Puisque ces modules peuvent être réalisés, les 25 RPG Pokémon sont NP-difficiles ! CQFD.

Les sagas Metroid et Donkey Kong sont NP-difficiles !
D'un côté, il y a Metroid, où l'on incarne Samus, une chasseuse de primes en quête de retrouver les métroïdes volées par les pirates de l'espace. De l'autre, il y a Donkey Kong Country, où l'on incarne Donkey Kong, un gorille en quête de retrouver son stock de bananes volé par le roi K. Roll, un crocodile obèse. Les scénarios sont plutôt différents, mais la conclusion de Aloupis est la même : ce sont des jeux NP-difficile !
Encore une fois, les démonstrations s'appuient sur la construction des différents modules, mais je ne vais pas les détailler (allez consulter l'article de Aloupis !).

Pour le cas de Donkey Kong Country, les modules de carrefour et de sens unique sont présent directement dans le jeu, grâce aux tonneaux. Le module de variable est similaire à celui de Mario, tandis que le module de clause s'appuie sur l'existence des Zingers, monstres abeilloïdes. Ces éléments se retrouvent dans tous les autres opus 2D de la série, qui sont donc eux aussi NP-difficiles.

Pour Metroid, les modules de carrefour utilisent la capacité de Samus à se transformer en morphball, tandis que le module de clause s'appuie sur l'existence des Hépixors (Zoomers, en VO), monstres mollusquoïdes. Ces éléments sont également présents dans l'ensemble des autres épisodes de la série, les rendant eux aussi NP-difficiles.

Dans leur papier, Aloupis, Demaine, Guo et Viglietta ne s'arrêtent pas à la démonstration de la NP-difficulté de toutes ces licences Nintendo, mais ils démontrent également, pour Zelda et Donkey-Kong Country, leur PSPACE-difficulté. Ces deux jeux sont donc encore plus complexes que complexes !
Si un algorithme cherche à résoudre un problème de déplacement dans une carte de l'un de ces jeux, non seulement le temps de calcul demandé sera énorme (=non proportionnel à la taille de la carte), mais la mémoire demandée par l'algorithme sera elle aussi énorme. La méthodologie de la démonstration est similaire, mais ils montrent que ces jeux sont équivalent à un autre problème de logique (le problème TQBF), et construisent d'autres types de modules.

Bref, vous avez tout ce qu'il faut pour maintenant démontrer vous même que Sonic, Alex Kidd, Tomb RaiderMinecraft ou Mr Carré sont (ou non) NP-difficiles !


Sources
Classic Nintendo Games are (Computationally) Hard --  G. Aloupis, E. D. Demaine, A. Guo et G. Viglietta