StickStack est un langage de programmation basé sur une pile très simple avec seulement deux instructions:
|
pousse la longueur de la pile sur la pile-
sort les deux premiers éléments de la pile et repousse leur différence (second topmost - topmost
)
Détails sur la langue
- La pile est vide au début du programme.
- Toutes les instructions sont exécutées séquentiellement de gauche à droite.
- S'il y a moins de 2 nombres sur la pile, l'
-
instruction est illégale. - À la fin de l'exécution, la pile doit contenir exactement un numéro .
Tout entier peut être généré par un programme StickStack. Par exemple:
|||--||-- generates the number 2 through the following stack states:
[]
[0]
[0, 1]
[0, 1, 2]
[0, -1]
[1]
[1, 1]
[1, 1, 2]
[1, -1]
[2]
Pour évaluer votre code StickStack, vous pouvez utiliser cet évaluateur en ligne (CJam) . (Merci pour @Martin pour le code.)
La tâche
Vous devez écrire un programme ou une fonction qui a donné un nombre entier comme sorties d'entrée ou renvoie une chaîne représentant un programme StickStack qui sort le nombre donné.
Notation
- Votre score principal est la durée totale des programmes StickStack pour les cas de test donnés ci-dessous. Un score plus bas est meilleur.
- Votre soumission n'est valide que si vous avez exécuté votre programme sur tous les cas de test et compté votre score.
- Votre score secondaire (bris d'égalité) est la durée de votre programme ou fonction de génération.
Cas de test d'entrée
(Chaque numéro est un cas de test différent.)
-8607 -6615 -6439 -4596 -4195 -1285 -72 12 254 1331 3366 3956 5075 5518 5971 7184 7639 8630 9201 9730
Votre programme devrait fonctionner pour tous les entiers (que votre type de données peut gérer) et pas seulement pour les cas de test donnés. Les solutions pour les numéros de test ne doivent pas être codées en dur dans votre programme. En cas de doute sur le codage en dur, les numéros de test seront modifiés.