La dernière fois que j'ai essayé de trouver quelque chose de facile qui ne soit pas un doublon, c'était trop difficile. Donc, espérons que cette fois, les nouveaux arrivants pourront en faire de même.
Contribution:
Un tableau / liste avec des nombres entiers / décimaux. (Ou une chaîne représentant un tableau avec des nombres entiers / décimaux.)
Sortie:
Parcourez les nombres et appliquez les cinq opérandes mathématiques suivants dans cet ordre:
- Addition (
+
); - Soustraction (
−
); - Multiplication (
*
ou×
ou·
); - Division réelle / calculatrice (
/
ou÷
); - Exponentiation (
^
ou**
).
(REMARQUE: Les symboles entre parenthèses sont simplement ajoutés à titre de clarification. Si votre langage de programmation utilise un symbole complètement différent de l'opération mathématique pour les opérations mathématiques, cela est tout à fait acceptable.)
Continuez jusqu'à ce que vous ayez atteint la fin de la liste, puis donnez le résultat de la somme.
Règles du challenge:
- Une exponentiation de 0 (
n ^ 0
) devrait donner 1 (ceci s'applique également à0 ^ 0 = 1
). - Il n'y a pas de scénario de test pour la division par 0 (
n / 0
), vous n'avez donc pas à vous soucier de ce cas périphérique. - Si le tableau ne contient qu'un seul nombre, nous le renvoyons comme résultat.
Règles générales:
- C'est du code-golf , donc la réponse la plus courte en octets est gagnante.
Ne laissez pas les langues de code-golf vous décourager de poster des réponses avec des langues autres que le code de golf. Essayez de trouver une réponse aussi courte que possible à n'importe quel langage de programmation. - Les règles standard s'appliquent à votre réponse, vous êtes donc autorisé à utiliser STDIN / STDOUT, fonctions / méthode avec les paramètres appropriés, programmes complets. Ton appel.
- Les failles par défaut sont interdites.
- Si possible, veuillez ajouter un lien avec un test pour votre code.
Cas de test:
[1,2,3,4,5] -> 0
-> 1 + 2 = 3
-> 3 - 3 = 0
-> 0 * 4 = 0
-> 0 / 5 = 0
[5,12,23,2,4,4,2,6,7] -> 539
-> 5 + 12 = 17
-> 17 - 23 = -6
-> -6 * 2 = -12
-> -12 / 4 = -3
-> -3 ^ 4 = 81
-> 81 + 2 = 83
-> 83 - 6 = 77
-> 77 * 7 -> 539
[-8,50,3,3,-123,4,17,99,13] -> -1055.356...
-> -8 + 50 = 42
-> 42 - 3 = 39
-> 39 * 3 = 117
-> 117 / -123 = -0.9512...
-> -0.9512... ^ 4 = 0.818...
-> 0.818... + 17 = 17.818...
-> 17.818... - 99 -> -81.181...
-> -81.181... * 13 = -1055.356...
[2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2] -> 256
-> 2 + 2 = 4
-> 4 - 2 = 2
-> 2 * 2 = 4
-> 4 / 2 = 2
-> 2 ^ 2 = 4
-> 4 + 2 = 6
-> 6 - 2 = 4
-> 4 * 2 = 8
-> 8 / 2 = 4
-> 4 ^ 2 = 16
-> 16 + 2 = 18
-> 18 - 2 = 16
-> 16 * 2 = 32
-> 32 / 2 = 16
-> 16 ^ 2 = 256
[1,0,1,0,1,0] -> 1
-> 1 + 0 = 1
-> 1 - 1 = 0
-> 0 * 0 = 0
-> 0 / 1 = 0
-> 0 ^ 0 = 1
[-9,-8,-1] -> -16
-> -9 + -8 = -17
-> -17 - -1 = -16
[0,-3] -> -3
-> 0 + -3 = -3
[-99] -> -99
la source
n ^ 0 = 1
mais0 ^ n = 0
. Le conflit est résolu en définissant lesn != 0
deux règles, mais il reste ensuite0 ^ 0
indéfini. Cependant, il y a beaucoup de choses qui se mettent bien en place dans les mathématiques si0 ^ 0
on le définit1
. Voir Wikipedia pour quelques détails.Réponses:
Gelée , 13 octets
Essayez-le en ligne! ou vérifier tous les cas de test .
Comment ça marche
la source
Javascript ES7 49 octets
9 octets sauvés grâce à Dom Hastings, 6 autres sauvés grâce à Leaky Nun
Utilise le nouvel opérateur d'exponentiation.
la source
Infinity
une erreur?Haskell,
76656462 octetsMerci à @ Damien pour la suppression de deux autres octets =)
Ceci utilise le
>>
qui ici ajoute juste la liste[(+),...]
à seslength v
temps. Le reste fonctionne toujours comme les anciennes versions.Anciennes versions:
Ces solutions utilisent les listes infinies, comme
cycle[...]
répète simplement la liste donnée à l'infini. Ensuite, il obtient essentiellementzip
la liste des nombres, et nous réduisons simplementfold
( dans d’autres langues) la liste zippée via un lambda, qui applique les opérateurs à l’élément accumulateur / liste courante.la source
foldl(&)u$zipWith(&)v(flip<$>v>>[…])
?import
pour&
, donc ce serait encore plus long, mais merci quand même!uncurry
. Cela n’a pas fonctionné, mais j’ai remarqué que vous devriez pouvoir sauvegarder un autre octet en utilisant$
plutôt que la parenthèse.Pyke,
22 à21 octetsEssayez-le ici!
la source
Haskell, 61 octets
Crée une série de transformations dans une liste, comme dans [ajouter 1, ajouter 2, soustraire 3, ...], en commençant par 2 additions car nous commençons par 0 dans le repli. Ensuite, nous faisons ce que j'appelle le pli d'application de liste, ou foldl (flip id), qui applique une liste d'homomorphismes en série. Cela commence par zéro, ajoute la valeur initiale, puis effectue toutes les transformations calculées ci-dessus pour obtenir un résultat final.
Notez que (id d'inversion) est identique à (\ x y-> yx), juste plus court.
Exemple d'utilisation:
la source
flip id
, vous pouvez simplement utiliser&
. Ouflip($)
. Wow, je n'ai jamais réalisé($) = id
&
est défini dansData.Function
, vous avez donc besoin de laimport
aussi. Peut-être qu'un interprète en ligne l'importe par défaut, mais vous devez ensuite spécifier celui que vous utilisez.TSQL
11611588 octetsGrâce à la suggestion de Ross Presser, j'ai pu jouer au golf jusqu'à 88 personnages.
Essayez-le en ligne
la source
Pyth,
272625 octetsSuite de tests.
Pyth utilise la notation préfixe:
1+2
est écrit comme+1 2
(espace nécessaire pour séparer les nombres).Par conséquent, pour le premier cas de test, l'expression serait
(((1+2)-3)*4)/5
, qui dans la notation de préfixe serait écrite comme/*-+ 1 2 3 4 5
.En Pyth, la division float est à la
c
place de/
, elle devient doncc*-+ 1 2 3 4 5
.Aussi, en Pyth,
-100
est écrit comme à la_100
place.Par conséquent, pour le troisième cas de test, qui est
((((((((-8+50)-3)*3)/-123)^4)+17)-99)*13)
, il devient:*-+^c*-+ _8 50 3 3 _123 4 17 99 13
.Histoire
v:P+*lQ\(ssV+R\)Q*"+-*/p"lQ\p"**"
.vs+_XUtQUQ"+-*c^"m:+;d\-\_
.vs+_XUtQUQ"+-*c^":jdQ\-\_
la source
En fait, 23 octets
Essayez-le en ligne!
En réalité, utilise la notation postfixe pour les mathématiques et les opérateurs qui ne prennent jamais que deux arguments (tels que les opérateurs pour addition, soustraction, multiplication, division et exponentiation) ne font rien s’il n’ya qu’un seul élément sur la pile. Par conséquent, la conversion de l'entrée en code réel consiste simplement à inverser l'entrée, à la formater en tant que valeur numérique et à l'ajout des opérations. Ensuite, le code résultant peut être exécuté en donnant la sortie souhaitée.
Explication:
Exemple de code traduit pour la saisie
1,2,3,4,5
:la source
s/Actually uses postfix notation/Actually actually uses postfix notation/
Julia,
5350 octetsEssayez-le en ligne!
la source
J, 40 octets
Trouve le nombre de valeurs nécessaires pour utiliser un multiple de 5 opérateurs, que les pads avec les valeurs d'identité de ces opérateurs. Dans l'ordre,
+
0,-
0,*
1,%
1 et^
1, ce qui peut être une valeur de bit00111
, ou 7 en base 10. Opère ensuite sur cette liste en passant en revue les opérateurs.Usage
Explication
la source
Python 2,
816764 octetsL'entrée est un tableau de flotteurs. Testez-le sur Ideone .
Comment ça marche
'*+-*/*'[i::5]
sélectionne chaque cinquième caractère de la chaîne, en commençant par celui de l' indice i , de sorte que ces rendements**
si i = 0 ,+
si i = 1 ,-
si i = 2 ,*
si i = 3 et/
si i = 4 . Puisque la chaîne a une longueur de 6 , l’expression générera une chaîne vide si i> 5 .Nous initialisons la variable i à 10 . Pour chaque nombre n dans le tableau d'entrée, nous construisons la chaîne
r<op>=n
quiexec
s'exécute.Initialement, i = 10 ,
<op>
la chaîne vide l'est aussi , et il initialise r avecr+=n
. Après chaque étape, nous incrémentons i modulo 5 aveci=-~i%5
, de sorte que l'étape suivante récupère l'opérateur approprié.Lorsque tous les nombres saisis ont été traités, nous imprimons r , qui contient la sortie souhaitée.
la source
Matlab -
95 9185 octets / Octave - 81 octetsL’entrée se présente sous cette forme
a = ['1' '2' '3' '4' '5'];
:, j’espère que cela est couvert par "chaîne représentant un tableau avec des entiers / décimales", sinon il y a 2 num2str nécessaires en plus.Chaque résultat intermédiaire est imprimé sur console car cela me permet d'économiser des points-virgules.
a(1)
est exécuté pour que sa valeur soit ensuite sauvegardée dansans
. Aussi bien sûr en utilisantans
du code est une mauvaise pratique.En octave,
'+-*/^'(mod(i+2,5)+1)
fonctionne également, ce qui économise encore 4 octets, merci Adám et Luis Mendo:Changelog:
la source
b = '+-*/^'
être à joué au golfb='+-*/^'
etfor i = 2:length(a)
àfor i=2:length(a)
(enlever les espaces)? En outre, des astuces pour jouer au golf dans MATLAB pourraient vous intéresser. :)'+-*/^'(mod(i+2,5)+1)
valide?Mathematica,
676665 octetsSimple
Fold
avec une variablei
contenant l'index.la source
+##
au lieu de#+#2
CJam, 18 octets
L'entrée est un tableau de flotteurs. Essayez-le en ligne!
Comment ça marche
la source
R ,
87 7870 octetsEssayez-le en ligne!
la source
do.call
... Je ne devrais probablement pas me considérer programmeur R avant de le faire!Advanced R
de Hadley Wickam est une excellente plage à lire :)do.call
- m'a fait comprendre que je cherchaisget
.Haskell - 74
Cas de test:
Cela pourrait probablement être plus court; Le support de Haskell pour des listes infinies et des fonctions d'ordre supérieur rend la solution directe assez agréable, cependant. Une version de
^ :: Double -> Double -> Double
serait plus intéressante pour le golf, mais je n’en ai pas trouvé. Heureusement, je n'avais pas besoin d'un lambda complet, style inutile alors rasé quelques octets.la source
(+)
à la liste des opérateurs et commencer lafoldl
avec0
pour aller complètement Pointfree et enregistrez le nom de la fonction et les paramètres:foldl(\x(o,y)->o x y)0.zip((+):cycle[(+),(-),(*),(/),(**)])
.PowerShell v2 +, 124 octets
Longtemps parce que PowerShell n'a pas d' opérateur
^
ou**
, nous devons donc comptabiliser un cas séparé et utiliser un appel .NET.Prend l’entrée
$n
sous forme de tableau, définit notre sortie$o
comme premier chiffre. Nous vérifions ensuite.count
le tableau, et tant qu'il est supérieur à celui que nous entrons dans le tableauif
. Sinon, nous sautons leif
.Dans la
if
boucle we, nous parcourons le tableau1..$y|%{...}
et chaque itération est réinitialisée$o
à une nouvelle valeur, résultat d'une autreif/else
instruction. Tant que notre compteur$i++
n'est pas modulo-5 égal à 4 (c'est-à-dire que nous ne sommes pas chez l'^
opérateur), nous le prenons$o
et le concaténons avec le symbole approprié'+-*/'[$x]
et le nombre suivant dans le tableau en entrée$n[$_]
. Nous transmettons cela àiex
(alias pourInvoke-Expression
et similaire àeval
), et cela est ré-enregistré dans$o
. Si nous sommes sur l'^
opérateur, nous sommes dans leelse
, alors nous exécutons un[math]::Pow()
appel, et ce résultat est ré-enregistré dans$o
.Dans les deux cas, nous sortons simplement
$o
vers le pipeline et sortons, avec une sortie implicite.la source
Rouille,
123, 117 octetsRéponse originale:
noms de méthodes stupides et longues ^^ ahh bien mieux
non-golfé
la source
Perl 6 ,
70 68 6562 octetsExplication:
Techniquement,
* + *
c'est un lambda, mais c'est en fait la même chose que&[+]
ce qui est court pour&infix:<+>
l'ensemble des sous-routines qui gèrent l'addition numérique infixe.Je n'ai pas utilisé que pour la multiplication ou exponentiation que les moyens de les écrire comme c'est au moins aussi longtemps que ce que j'ai (
*×*
ou* * *
et* ** *
)Tester:
Testez-le sur ideone.com
(après la mise à niveau vers une version de Rakudo datant d'un an et demi avant la sortie officielle des Perl 6 spectests )
la source
Python 3,
8893 octetsCela a commencé par être beaucoup plus court, mais la priorité des opérateurs m'a alors vaincue et j'ai dû inclure beaucoup de parenthèses ...
la source
Oracle PL / SQL,
275254 octetsLes données doivent être insérées dans une table appelée
T
avec une colonneN
de typeNUMBER
Usage:
Sortie:
Version 275 octets:
la source
Java 8,
173172167138137118113 octetsExplication:
Essayez ici.
la source
double r=a[0];
pourdouble r=a[0],b;
sauver quelques octets.float
, mais il n'y a pas deMath.pow
pour les flottants, d'où ledouble
lieu. Merci pour le,b
. Et aveci++<a.length
je reçois une ArrayOutOfBoundsException àb=a[i];
(sauf si je le fais à lai++<a.length-1
place, ce qui est un octet plus long au lieu de plus court).== 4
à> 3
et== 0
à< 1
. Je ne suis pas sûr mais je pense que vous pourriez économiser un peu en créant une variable pouri % 5
.<x
astuce, réduisant ainsi la fonction entière à 137 caractères.Quelques astuces peuvent réduire l'approche de @ Willmore de 23 à 174 octets (php 5.6 ou supérieur requis). La partie la plus économique consiste à supprimer les parenthèses inutiles (-10 octets).
Mais utiliser l'
**
opérateur au lieu depow()
permet également d'utilisereval
un tableau pour les opérations; et avec encore quelques astuces ...PHP> = 5.6, 82 octets
prend la liste des paramètres de ligne de commande. Courez avec
php -nr '<code>'
ou essayez-le en ligne .ancienne version,
161 157 151 145 144 140 137 137117 octetsLe golf le plus efficace a été obtenu en écrivant le résultat intermédiaire directement dans le premier élément, après avoir déplacé le résultat précédent du tableau.
panne
suite de tests
la source
If the array contains just a single number, we return that as the result.
est assez clair. Mais merci de me laisser revisiter cela.PHP ,
135130 octetsMerci @titus, -5 octets, plus 0 cas correctif!
Essayez-le en ligne!
Moins de golf:
Était vraiment enraciné pour que array_reduce () travaille pour cela, mais nécessite trop de caractères pour battre le score PHP actuel le plus bas.
Le poster quand même au cas où quelqu'un aurait des suggestions!
la source
$c
coups0
. Enregistrez deux octets avec une fonction anonyme au lieu dew
.eval('$c'.['/','**','+','-','*'][$i++?$i%5:5].'=$x');return$c;
est six octets plus court et devrait résoudre le problème de zéro.Brachylog , 68 octets
C'est long… mais il n'utilise aucun prédicat d'évaluation.
Explication
Prédicat principal
Prédicat 1
la source
FPU IBM PC 8087,
6682 octetsUtilise uniquement le coprocesseur mathématique Intel 8087 du PC IBM pour les calculs.
Essayez-le hors ligne! (dans DOSBox ou autre). Donnez à la vieille puce 8087 ennuyée de votre ancien PC quelque chose à faire, en plus de toutes les feuilles de calcul Lotus 1-2-3 que vous utilisiez dans les années 80.
Ungolfed (non assemblé):
Sortie:
L'entrée s'effectue via un PROC (x86 correspondant le plus à une fonction), BX étant un pointeur sur un tableau de mots en mémoire, CX étant le nombre d'éléments qu'il contient et renvoie le résultat en ST.
* Remarque: le code actuel de la fonction est
6682 octets. Bien sûr, le code servant à écrire un nombre à virgule flottante sur la console (code du livre de recettes) est de 83 octets. Le programme de test et les données sont183215 octets, rendant le fichier .COM exécutable305380 octets au total.la source
APL (Dyalog Unicode) ,
29SBCS sur 27 octetsFonction de préfixe tacite anomyme. Notez que
*
c'est une exponentiation en APL.Essayez-le en ligne!
Comme APL s'exécute de droite à gauche, nous pouvons simplement inverser l'ordre des arguments des opérations insérées et inverser l'expression entière. Postfix
⍨
inverse les arguments. Après avoir parfaitement mélangé chiffres et opérations, il suffit d’inverser, d’aplanir et d’évaluer:≢{
…}⊢
Appeler la fonction suivante avec le nombre et les nombres réels tels que⍺
et⍵
:'⍨'
ce personnage'+-×÷*',¨
ajoutez chacun de ces personnages à cela;["+⍨","-⍨","×⍨","÷⍨","*⍨"]
⍺⍴
utiliser de manière cyclique l'argument de gauche (nombre de chiffres) r Eshape que⌽
sens inverse⍕
format comme ficelle plate3↓
supprimer les 3 premiers caractères (un espace et un symbole et⍨
)⍎
exécuter en tant que code APLla source
Japt , 16 octets
Essayez-le en ligne!
Explication:
la source
c #,
238, 202 octetsJe n'ai pas vu de solution C #, donc je vais en donner une. Ceci est mon premier codegolf. J'ai commencé à écrire en c # "il y a deux mois" (bien que je connaisse Java dans une certaine mesure).
Il utilise Stack
Ungolfed et cas de test
Sortie:
la source
a, Double.Parse
->a,Double.Parse
;while (s.Count
->while(s.Count
;Pow(l, r)
->Pow(l,r)
). En outre, vous pouvez enleverint
devantj=
et le mettre derrière leint i=0,j;
. Grande première réponse cependant, et encore une fois bienvenue. :)PHP,
206,198, 197 octetsUngolfed
En PHP, une logique similaire à ma réponse c # ( 202 octets ) :).
la source