Test de primalité à Manufactoria


13

Contexte

Manufactoria est un jeu de programmation. Le joueur doit utiliser une forme de langage de programmation bidimensionnel pour effectuer les tâches. Si vous n'en avez jamais entendu parler, la façon la plus simple d'apprendre est d'essayer les premiers niveaux du jeu.

Défi

Votre défi est de créer un programme qui teste la primauté d'un nombre.

L'entrée sera une série de N marqueurs bleus dans la file d'attente. Si N est premier, alors votre programme devrait l'accepter (déplacer le robot jusqu'à la fin). Si N est composite, alors votre programme devrait le rejeter (déposez-le sur le sol quelque part).

Options de soumission

Comme il s'agit d'un défi plus complexe que le défi typique de Manufactoria, j'ai décidé de permettre plus de façons de soumettre vos réponses.

Vanille

J'ai créé un niveau personnalisé 13x13 pour créer et tester des soumissions. Le niveau de test personnalisé est le suivant.

Niveau personnalisé 13x13

Le jeu ne permet que 8 cas de test à un niveau personnalisé, mais votre création devrait théoriquement être capable de gérer n'importe quel nombre naturel N, limité uniquement par la mémoire disponible. À des fins d'information, les cas de test fournis dans le niveau personnalisé sont les suivants:

1 -> reject
2 -> accept
4 -> reject
5 -> accept
7 -> accept
9 -> reject
11-> accept
15-> reject

Grille étendue

Certains utilisateurs peuvent vouloir plus d'espace qu'une grille 13x13. Voici un lien vers un niveau personnalisé 15x15 en jeu, créé en changeant un nombre dans l'URL:

Niveau personnalisé 15x15

Malheureusement, les niveaux personnalisés plus importants ne fonctionnent pas, car les cellules supplémentaires sont inaccessibles.

La Manufactoria Esolang

Il y a eu une adaptation de Manufactoria dans un langage basé sur ASCII. Si vous voulez une manière différente de concevoir / tester votre création, ou si vous ne parvenez pas à adapter votre solution finale sur le plateau de jeu, vous pouvez utiliser cet esolang. Vous pouvez trouver des informations sur cet esolang ici:

Manufactoria esolang

Il y a quelques différences entre l'esolang et le jeu réel. Par exemple, les traversées de convoyeurs sont traitées différemment. Essayez d'éviter de profiter de ces écarts.

Un moyen plus rapide de tester

Le jeu est très lent en ce qui concerne les programmes qui nécessitent plusieurs milliers d'étapes. Ma solution de preuve de concept a pris 28042 étapes pour en rejeter 15. Même avec l'accélération 50x dans le jeu, cela prend tout simplement trop de temps.

J'ai trouvé ce site Web très utile . Copiez-collez simplement le lien vers votre réponse, et vous pouvez tester votre réponse avec des entrées spécifiques. Le processus en 28042 étapes a pris moins d'une seconde.

Une chose à noter est qu'il dit souvent quelque chose comme "incorrectement accepté" même si votre machine fonctionne correctement. En effet, la page Web ne connaît que les cas de test. Par exemple, cela dirait que ma solution a "mal accepté" le chiffre 3, même si ma machine était en fait correcte.

Comment gagner

Le critère de notation est le nombre de pièces (cellules occupées). C'est du golf de code, donc la soumission avec le moins de pièces l'emporte.

Pour les personnes intéressées, ma solution de référence comprend 96 pièces et s'adapte sur la grille 13x13. Trouver un meilleur algorithme pourrait conduire à des améliorations colossales, car je sais que j'ai utilisé un algorithme sous-optimal.

Réponses:


10

53 pièces - grille 11x11

Je viens d'apprendre à jouer à Manufactoria il y a 2 jours, donc ce n'est probablement pas très optimisé pour le golf, mais au moins ça résout le problème. Il implémente bien sûr la division d'essai, par soustraction répétée. Tous les diviseurs de 2 à N-1 sont vérifiés. La complexité temporelle devrait être O (N ^ 3), je crois.

Solution en 53 pièces

Lien de solution

J'ai été très déçu de devoir utiliser un tapis roulant :)

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.