La tâche est donc simple, étant donné le tableau de nombres et le résultat, vous devez trouver les opérations que vous devez utiliser sur les nombres du tableau, pour obtenir le résultat demandé.
Rendons-le simple pour le démarrage et n'autorisons que les opérations de base telles que: addition, soustraction, multiplication et division.
Exemple:
Input : [5,5,5,5,5] 100
Output : 5*5*5-5*5
Pour donner un certain avantage à des langages comme Java, la demande consiste à implémenter la fonction, pas le programme entier, et le résultat peut être renvoyé via un paramètre ou imprimé sur la console.
Le code est noté en fonction du nombre d'octets, et comme c'est un défi de code de golf, le score le plus bas gagne.
Une autre exigence est que vous pouvez obtenir -10 points supplémentaires si le tableau ne contient que des chiffres, des solutions de support où vous pourriez construire des nombres à partir des chiffres suivants. C'est à dire
Input : [1,2,3,4,5] 0
Output : 12-3-4-5
Notez que, à condition que les extrants soient des extrants proposés, certains cas peuvent avoir plusieurs solutions. C'est à vous de proposer une ou plusieurs solutions pour une tâche donnée.
EDIT: Le résultat doit être valide du point de vue mathématique, donc la division est une division rationnelle, pas un entier, et la priorité de l'opération est la même qu'en mathématiques classiques (d'abord multiplication et division puis addition et soustraction).
la source
*
- ce et a- t- il la/
préséance sur+
et-
? Vos deux exemples se contredisent.Réponses:
Pyth, 23 octets
Pour des raisons de sécurité,
*
et/
n'évalueront pas en ligne, mais ils fonctionnent théoriquement.Suite de tests avec seulement
+
et-
.la source
Oracle SQL 11.2,
322304270 octets: 1 est la liste des chiffres
: 2 est le résultat recherché
Non golfé:
la source
TSQL (sqlserver 2016)
310294280 octetsQuelle merveilleuse occasion d'écrire du code laid:
Golfé:
Essayez-le en ligne
Lisible: (l'insertion du point décimal (.) Et sa suppression sont nécessaires pour que sql accepte que 4/5 n'est pas 0 - la suppression est pour les personnes qui la testent)
Cette solution peut également gérer ces types d'entrée:
la source
JavaScript (ES6),
165147 bytesImbriqué
eval
... charmant.la source
Python 3,
170155 bytesCréez un générateur avec toutes les commandes possibles des opérateurs, combinez cela avec les nombres, puis évaluez jusqu'à ce que nous obtenions la réponse.
https://repl.it/C2F5
la source
['+','-','*','/']
par'+-*/'
; puisquestring
s sont itératives, elle sera traitée comme unarray
chaque élément étant chaque caractère dans lestring
- il agira comme vous l' avez fourni avec le tableau que vous avez actuellement.Python,
195186 octetsVoici une façon atroce de le faire.
La fonction
x
accepte un argument de alist
et aresult
-x([1,2,3,4,5], 15)
par exemple.Le programme commence une boucle où nous commençons à sélectionner au hasard si nous devons ajouter
"+", "-", "*", or "/"
entre chaque nombre, ou si nous devons les concaténer ensemble. Cela semblait être une option plus concise que de passer par des permutations et d'essayer chaque combinaison pour trouver chaque résultat, et bien que cela prenne plus de temps et soit beaucoup moins efficace. (Heureusement, ce n'est pas un problème dans ce contexte!)Il ajoute également "." à chaque nombre pour éviter de faire des opérations arrondies entières comme
6/4 = 1
. Ileval
s ensuite notre expression et détermine si le résultat est égal à ce que nous attendons, et si oui, sort l'expression.Ce programme ne se termine jamais - il continuera à produire des résultats en continu jusqu'à sa mort.
EDIT 1 : Supprimez les sauts de ligne inutiles où les
if
instructions d' une ligne peuvent être utilisées.la source
Matlab, 234
238258octetsJe suppose sur la base des limitations des autres réponses que l'ordre numérique du tableau d'entrée est maintenu par fiat.
Ce code prend une chaîne de nombres
x
, par exemplex = '12345'
et un résultatr
, disonsr = 15
et retourne toutes les chaînes d'expressions vous pouvez évaluer pour obtenirr
de l'x
aide des quatre opérateurs.J'ai utilisé deux façons différentes, équivalentes en longueur, d'éviter d'utiliser des expressions
ones(length())
-type ourepmat(length())
-type:~~p(1,:)
qui renvoie des valeurs not-not dansp
(c'est- à -dire une liste de1
s la même longueur comme première dimension dep
) et0|p(:,1)
qui renvoie 0 ou is-there -a-value-inp
(c'est -à- dire une liste de1
s de même longueur que la deuxième dimension dep
).Matlab n'a pas
nchoosek
de méthode avec remplacement , j'ai donc dupliqué les opérateurs le nombre correct de fois, calculé tout l'espacenchoosek
pour cette plus grande sélection d'opérateurs, puis utilisé ununique
appel pour réduire le résultat à ce qu'il devrait être. (en supprimant les combinaisons équivalentes comme «*** +» et «*** +»). J'ajoute un espace de fin pour correspondre à la longueur du vecteur d'entrée à des fins de concaténation, puis je compose les chaînes d'opérateur avec les chaînes d'entrée dans les colonnes d'une matrice. J'évalue ensuite les expressions colonne par colonne pour obtenir des résultats et trouver l'ordre des opérateurs qui correspond à ces colonnes avec des résultats qui correspondent à notre entréer
.Test:
x = '12345'
,r = 15
:Si je devais prendre un tableau de valeurs de double précision, j'aurais besoin
x = num2str(x,'%d');
pour convertir les chiffres en une chaîne, en ajoutant 21 (20 sans le;
) à mon score. * Les octets supplémentaires étaient des points-virgules que j'ai laissés uniquement afin que toute personne exécutant ce code ne voit pas son invite de commande exploser avec de longs tableaux. Étant donné que ma modification produit maintenant une pile géante d'avertissements sur les logiques et les opérandes deux-points, j'ai supprimé les points-virgules dans la nouvelle version.Edit 2: J'ai oublié de remplacer un
2*n+2
park
.Ancienne réponse:
la source
JavaScript (ES6), 88 octets
Jeté un peu au hasard dans le mélange. Beaucoup plus facile que d'itérer systématiquement à travers les combinaisons.
Suite de tests
la source
PHP, 108 octets
prend les entrées des arguments de ligne de commande dans l'ordre inverse. Courez avec
-r
.panne
la source
Perl 5 avec
-pa
, 46 octetsEssayez-le en ligne!
la source