Je vois votre BIDMAS et vous élève un BADMIS
Défi
Etant donné un ensemble de nombres avec des opérateurs entre eux: "5 + 4 * 9/3 - 8", retourne tous les résultats possibles de l'expression pour chaque permutation de l'ordre des opérations de base: [/, *, +, -].
Règles
- Failles standard interdites
- E / S
- L'entrée doit être ordonnée avec des opérations d'infixe, mais cependant c'est plus simple (chaîne ou tableau)
- Vous n'êtes pas tenu de prendre en charge les opérateurs unaires (par exemple, "-3 * 8 / +2")
- Les entiers peuvent être remplacés par des flottants pour les langues qui analysent implicitement le type (par exemple 45 ⟶ 45.0)
- La sortie doit être tous les résultats possibles de l'expression, aucun format ni ordre spécifié
- Toutes les entrées sont valides (par exemple n'ont pas besoin de traiter avec "7/3 + *"). Cela signifie également que vous n'aurez jamais besoin de diviser par zéro.
- Les opérateurs sont tous associatifs à gauche, donc "20/4/2" = "(20/4) / 2"
- C'est Code Golf, donc le moins d'octets gagne
Cas de test (avec explication)
- "2 + 3 * 4" = [14, 20]
- 2 + (3 * 4) ⟶ 2 + (12) ⟶ 14
- (2 + 3) * 4 ⟶ (5) * 4 ⟶ 20
- "18/3 * 2 - 1" = [11, 2, 6]
- ((18/3) * 2) - 1 ⟶ ((6) * 2) - 1 ⟶ (12) - 1 ⟶ 11
- (18/3) * (2 - 1) ⟶ (6) * (1) ⟶ 6
- (18 / (3 * 2)) - 1 ⟶ (18 / (6)) - 1 ⟶ (3) - 1 ⟶ 2
- 18 / (3 * (2 - 1)) ⟶ 18 / (3 * (1)) ⟶ 6
- 18 / ((3 * 2) - 1) ⟶ 18/5 ⟶ 3,6
Cas de test (sans explication)
- "45/8 + 19/45 * 3" = [6.891666666666667, 18.141666666666666, 0.1111111111111111113, 0.01234567901234568, 0.01234567901234568, 5.765740740740741]
- "2 + 6 * 7 * 2 + 6/4" = [112 196 23 87,5]
code-golf
permutations
Freddie R
la source
la source
2 - 3 + 4
=>[-5, 3]
2*3-6+2-9/6*8+5/2-9
donnant 24 résultats distincts.Réponses:
JavaScript (V8) ,
118112octetsImprime les résultats.
Essayez-le en ligne!
Ou consultez les résultats dédupliqués .
la source
C # (Visual C # Interactive Compiler) , 285 octets
Essayez-le en ligne!
la source
JavaScript (Node.js) , 132 octets
Essayez-le en ligne!
Cela permet des sorties dupliquées.
JavaScript (Node.js) ,
165161155153152137 octetsEssayez-le en ligne!
Prend une chaîne avec des espaces entre les opérateurs et les nombres.
la source
[3, -5]
maintenant.Perl 6 ,
92 9088 octetsEssayez-le en ligne!
Prend une chaîne avec un espace après tout opérateur et renvoie un ensemble de nombres. Cela fonctionne principalement en substituant toutes les instances de
n op n
avec le résultat évalué à toutes les permutations des opérateurs.Explication:
la source
set
, car la condition pour éliminer les doublons a été supprimée. Beau code.Python 3 , 108 octets
Essayez-le en ligne!
La fonction prend une seule chaîne en entrée et renvoie une liste de résultats possibles.
Non golfé
Essayez-le en ligne!
la source
Gelée , 30 octets
Essayez-le en ligne!
Une paire de liens. Le second est le lien principal, et prend comme argument une liste Jelly de flottants / entiers entrecoupés avec les opérateurs comme caractères. Il s'agit d'une version aplatie de la façon dont Jelly prend son entrée lorsqu'il est exécuté en tant que programme complet avec des arguments de ligne de commande. La valeur de retour du lien est une liste de listes de listes de membres uniques, chacune étant une valeur possible pour l'expression.
Explication
Lien d'aide
Prend une liste de flottants / entiers alternant avec des opérateurs (sous forme de caractères) comme argument de gauche et un opérateur sous forme de caractère comme argument de droite; renvoie la liste d'entrée après avoir évalué les nombres séparés par l'opérateur approprié, en travaillant de gauche à droite.
Lien principal
Prend une liste de flottants / entiers alternant avec des opérateurs (sous forme de caractères)
la source
Python 2 ,
182172 octetsEssayez-le en ligne!
Prend l'entrée avec des nombres entiers formatés comme des flottants, selon "Les nombres entiers peuvent être remplacés par des flottants pour les langues qui analysent implicitement le type".
la source
Julia 1.2 , 88 (82) octets
Prend une bande sous la forme d'un vecteur de nombres et de fonctions d'infixe, évalue chaque appel de fonction unique et passe récursivement chaque bande résultante à elle-même jusqu'à ce qu'il ne reste qu'un seul numéro. Malheureusement,
get(t, (), ...)
ne fonctionne pas correctement dans Julia 1.0, une nouvelle version est donc nécessaire.Six octets peuvent être enregistrés, si un groupe de tableaux imbriqués est acceptable en sortie:
Sortie:
la source
Perl 5 (
-alp
), 89 octetsTIO
ou valeurs uniques, 99 octets
la source