iOS 11 a un bug qui fait que le résultat de 1 + 2 + 3 est 24 . Ceci est lié à la vitesse d'animation, mais de toute façon:
La tâche est de faire 1 + 2 + 3 == 24
. Mais seulement ça. Vous devez donc fournir une fonction qui additionne correctement la plupart des séquences, mais renvoie 24
quand les arguments sont 1
, 2
et 3
dans n’importe quel ordre.
Exemple d'entrées:
1 2 => 3
3 4 => 7
1 2 3 4 5 6 7 8 9 => 45
3 2 1 => 24
2 1 3 => 24
1 1 => 2
1 2 3 => 24
40 2 => 42
1 2 2 4 => 9
1 2 3 4 1 2 3 => 16
1 => 1
1 23 => 24
0 1 2 => 3
3 2 3 => 8
L'entrée peut être dans n'importe quel format tant que votre code accepte un nombre quelconque d'arguments.
- La prise en charge des nombres négatifs n'est pas requise (tous les nombres non négatifs doivent fonctionner, y compris 0)
- Nous supposons une entrée correcte
Différences par rapport à une autre question similaire: "Qu'est-ce que vous obtenez lorsque vous multipliez 6 par 9? (42)" :
- Dans ce cas, votre fonction doit accepter un nombre quelconque d'arguments. La vieille question précise exactement 2.
- Dans ce cas, l'ordre n'a pas d'importance, alors que l'ancienne question spécifiait que cet ordre
6 9
était requis et9 6
devait être évalué correctement.
Réponses:
MATL ,
11 à10 octetsEssayez-le en ligne! ou vérifier tous les cas de test
Explication
la source
05AB1E , 9 octets
Explication:
Essayez-le en ligne!
la source
Java 8,
1091061019075747166 octets-12 octets grâce à @ OlivierGrégoire .
-31 octets grâce à @Nevay .
Explication:
Essayez ici.
Preuve (inefficace) que seuls
[1,2,3]
(dans n'importe quel ordre) seront les résultats possibles lorsquep
is0b1110
(p==14
) et que la somme est inférieure à 6 ou inférieure (s<7
): Essayez-le ici.Vieux 71 octets répondent:
Preuve que pour trois nombres naturels non nuls donnés, seuls
[1,2,3]
(dans un ordre quelconque) auront une somme égale à son produit (1+2+3 == 1*2*3
) (avec une somme positive):lorsque la somme est égale au produit de Leo Kurlandchik & Andrzej Nowicki
(Inefficace) preuve que seulement
[1,2,3]
(dans n'importe quel ordre) et[0,0,0]
sera les résultats possibles avec des nombres non négatifs et une longueur de 3: Essayez-le ici.Ainsi
s*4
deviendra6*4 = 24
pour[1,2,3]
, et0*4 = 0
pour[0,0,0]
.la source
Gelée , 8 octets
Essayez-le en ligne!
la source
MATL , 13 octets
Essayez-le en ligne!
Il est deux octets plus long que l'autre réponse MATL, mais il utilise une approche complètement différente (et une OMI plus intéressante), j'ai donc pensé que cela valait la peine d'être publié.
Explication:
Cette solution utilise le fait que:
Cela prend l'entrée, calcule la somme
s
et la dupliquet
. Il vérifie ensuite si la somme est égale au produitGp=
. Nous multiplions le booléen1/0
par 1818*
et vérifions s'il existe des valeurs non identiques dans le vecteurda*
(encore une fois, multiplions par un booléenany(diff(x))
. Nous multiplions ensuite les deux et ajoutons le dernier nombre à la somme initiale.Une explication pas à pas:
Supposons que l'entrée est
[1, 2, 3]
:la source
Python 2 , 39 octets
Essayez-le en ligne!
Utilise une autre méthode d’ajout de 18 si l’entrée triée consiste
[1, 2, 3]
à battre l’ autre réponse Python d’un octet.la source
sorted(a)==[1,2,3]
peut devenirset(a)=={1,2,3}
pour sauver 3 octets.[1, 2, 3, 3]
Haskell , 37 octets
Essayez-le en ligne!
Nous utilisons l'appariement de motifs pour attraper le cas exceptionnel.
Haskell n'a pas de tri intégré. L'égalité
2^a+2^b+2^c==14
n'est satisfaite que par[a,b,c]
une permutation de[1,2,3]
parmi des entiers non négatifs. Un plus courta+b+c=a*b*c
fonctionne presque, mais est satisfait[0,0,0]
, et l'ajout du contrôle le,a>0
rend plus long d'un octet.la source
Octave , 34 octets
Essayez-le en ligne!
ou
Essayez-le en ligne!
ou
Ceci est plus courte que l'approche utilisation des autres:
@(x){24,sum(x)}{2-isequal(sort(x),1:3)}
.Explication:
Il prend la somme du vecteur et ajoute 18 si le vecteur trié est égal à
1,2,3
. Cela donnera6+18=24
si le vecteur est une permutation de1,2,3
, et juste la somme du vecteur sinon.la source
PHP, 116 octets
C’est ma première tentative de défi de golf, et c’est PHP, un langage qui, apparemment, craint en jouant au golf puisque je le vois rarement ici, alors ... heu, j’ai essayé?
Remarque: je n'ai pas inclus le commentaire dans le décompte.
Ungolfed
Ce n'est rien de spécial tbh:
Si vous voulez tester cela avec PHPFiddle et non sur console, vous pouvez évidemment le remplacer
$i
par tout ce que vous voulez.Merci à Olivier Grégoire qui m'a fait connaître la combinaison de cordes
[0,3,3]
qui est revenue 24 fois avant et m'a également aidé à économiser quelques caractères en stockant learray_sum
et en le retournant au lieu d'exécuter à nouveau la fonction.la source
[0, 3, 3]
? De plus, ne pouvez-vous pas enregistrer le résultat dearray_sum($a)
dans une variable et le réutiliser?R,
47 octets34 octets36 octetsEssayez-le en ligne!
Faites la somme des entrées et ajoutez 18 si le jeu d’entrées est 1: 3.
Merci à @mlt pour avoir joué 11 octets au golf. Merci à @ Ayb4btu pour avoir identifié une erreur avec le code survolé
la source
Javascript ES6, 39 octets
Merci à Herman Lauenstein
Réponse précédente
Javascript ES6, 66 octets
L'essayer
la source
a=>(Array.sort(a).join()=="1,2,3"?24:a.reduce((x,y)=>x+y))
a.sort()=="1,2,3"
travaux.a=>a.sort()=="1,2,3"?24:eval(a.joinBT+BT)
(remplace BT par une attache arrière)Rapide, 67 octets
Pourrait le rendre à 27 octets avec des extensions sur [Int], mais ce serait tricher :(
la source
func z(i:[Int]){print(i.sorted()==[1,2,3] ?24:i.reduce(0,+))}
.{$0.sorted()==[1,2,3] ?24:$0.reduce(0,+)}as([Int])->Int
comme les fonctions anonymes sont autorisées par nos règles standard. Vous pouvez voir comment cela fonctionne ici .as
:)Mathematica, 28 octets
Essayez-le en ligne!
la source
J, 17 octets
-6 octets grâce à Frowny Frog
Faites la somme de tous les nombres
+/
et multipliez le résultat par (pseudocode)1 + 3*(is123 ? 1 : 0)
. Autrement dit, renvoyez les résultats inchangés, sauf si la liste triée est1 2 3
dans ce cas, nous multiplions le résultat par 4.Essayez-le en ligne!
réponse originale
Vérifiez si l'entrée triée est
1 2 3
- si oui, invoquez la fonction constante 24 (24"_
); sinon, retournez la somme+/
Essayez-le en ligne!
la source
1 2 3
→i.3
?i.3
produit0 1 2
, vous devrez donc faire1+i.3
ce qui ne sauvegarde aucun caractère mais est moins clair.[:+/8"0^:(1 2 3-:/:~)
+/@,[*3*1 2 3-:/:~
C # (.NET Core) , 57 + 18 = 75 octets
Essayez-le en ligne!
+18 pour
using System.Linq;
la source
Lua ,
11681 octets-7 octets grâce à Jonathan
Prend les entrées en tant qu'arguments de ligne de commande
Essayez-le en ligne!
Explication:
Fonctionne en créant un tableau fragmenté
S
et en ajoutant des zéros dans les index correspondant aux valeurs en entrée. Si les paramètres sont3, 4, 7
définis, le tableau fragmenté n'aura que des nombres à ces index. Avec ce tableau, nous obtenons sa longueur avec l'opérateur#
qui compte depuis l'index1
jusqu'au plus haut index qui a une valeur. Si cette longueur est exactement identique3
, cela signifie qu'il y avait des éléments dans la position1
,2
et3
c'est ce que nous sommes. à la recherche de. La longueur du tableau fragmenté sera toujours comprise entre0
etN
oùN
est le nombre de paramètres. Il suffit donc de vérifier si la longueur du tableau de paramètres et du tableau fragmenté est correcte3
.la source
#args
Lua est un peu trop lourd en octets? Dans ce cas, vous pouvez revenir à votre réponse sur 90 octets, je suppose .. :(R ,
55455449575448 octetsSauvegardé de nombreux
octets etsolutions incorrectes grâce à Ayb4btu.Enregistré
39 octets grâce à Giuseppe. Je continue à apprendre de nouvelles façons d’abuser du fait queF==0
.Essayez-le en ligne!
L'autre réponse R a gagné à la fin.
la source
[0,0,0]
: renvoie24
au lieu de0
.c(1,1,2,3)
retourne28
au lieu de7
x=scan();s=sum(x);"if"(s-prod(x)|s-6|length(x)-3,s,24)
est de 54 octets échangeant la condition et en utilisant|
au lieu de&
nous pouvons soustraire.C (gcc) ,
1361311259791 octetsEssayez-le en ligne!
la source
Retina , 21 octets
Essayez-le en ligne!
Les entrées sont séparées par des sauts de ligne, mais la suite de tests utilise la séparation par virgule pour plus de commodité.
Explication
Trier les chiffres (lexicographique, en fait, mais nous ne se soucient que le cas où les entrées sont
1
,2
,3
dans un certain ordre, où cela ne fait pas de différence).Si l'entrée est
1,2,3
(dans un certain ordre), remplacez-la par 24.Convertissez chaque nombre en unaire.
Comptez le nombre de
1
s, ce qui ajoute les nombres unaires et les reconvertit en décimal.la source
1
lettres s dans ce cas). Est-ce que Retina fait toujours cela pour une seule ligne finale? Ou est-il également possible de compter tous les1
s quelque part entre les deux, puis de continuer avec le résultat pour faire autre chose (qui utilise encore deux lignes pour les actions de remplacement)? En outre, une autre question connexe: quelles fonctions dans Retina nécessitent une seule ligne? Le tri (O`
) est l’un d’eux et l’autre fonctionne également; mais un autre? J'essaie juste de comprendre un peu plus Retina. :)M`
. Ce n'est que s'il existe une seule ligne de fuite que Retina seM
fixe par défaut au lieu d'R
eplace.AGMTS
sont tous les stades d'une seule ligne,R
est de deux lignes,O
etD
une ou deux lignes , selon que l'$
option est utilisée ( ce qui les transforme en sort / deduplicate- par étapes). N'hésitez pas à me contacterHaskell , 44 octets
Essayez-le en ligne!
Les permutations de
[1,2,3]
sont les seules partitions de ce6
produit6
, sauf6
elle-même. (Cela suppose que les entrées sont non négatives, ce qui semble être le cas pour tous les cas de test… j'ai demandé à l'OP à ce sujet.)la source
PL / SQL -
135123 octetsEn supposant que i soit une entrée de tableau entier de toute taille:
la source
C ++ 17,
5654 octetsEssayez-le en ligne!
Notez que l'objet fonction créé est utilisable à la compilation. Les tests sont donc effectués par le compilateur sans qu'il soit nécessaire d'exécuter un programme.
Explication:
Preuve que les seuls non négatifs
i...
pour lesquels(-i&...)
est égal à -4 et à(~i*...)
-24 sont les permutations de1, 2, 3
:Nous observons tout d' abord que depuis
-0
=0
, le cas échéanti
=0
alors(-i&...) = 0
, si nous concluons que tous lesi
sont positifs.Maintenant, notez que dans le complément à 2,
-i
équivaut à~(i - 1)
et~i
équivaut à-(i + 1)
. En appliquant la règle de De Morgan, nous trouvons que(-i & ...)
=~((i - 1) | ...)
=-(((i - 1) | ...) + 1)
, donc((i - 1) | ...) = 3
; de même, est-1 ** n * ((i + 1) * ...) = -24
doncn
étrange et((i + 1) * ...) = 24
.Les facteurs premiers de 24 sont 2 ** 3 * 3, donc
n
<= 4. Sin
= 1, on ai - 1 = 3
eti + 1 = 24
, doncn
= 3. Ecrivez lei
wlog commea <= b <= c
, alors clairementa
= 1 sinon >>(a + 1)(b + 1)(c + 1)
27. Aussic
<= 4 comme sinon(a - 1)|(b - 1)|(c - 1)
> = 4.c
ne peut pas être 4 car 5 n'est pas un facteur de 24, doncc
<= 3. Ensuite, pour satisfaire à(a - 1)|(b - 1)|(c - 1) = 3
c = 3, b = 2 selon les besoins.la source
Coque , 9 octets
Essayez-le en ligne!
Explication
Solution précédente
Donne le mauvais résultat à [2,2], et probablement d'autres entrées aussi, mais c'était plus intéressant.
Essayez-le en ligne!
la source
Pushy , 12 octets
Essayez-le en ligne!
Cela fonctionne en triant les entrées et, si elle est égale à
[1, 2, 3]
, en ajoutant 18. Ensuite, la somme est calculée et imprimée, il est ajouté 24 et le résultat est 18, et la réponse normale autrement.la source
Pyth , 9 octets
Vérifiez tous les cas de test.
la source
Python 2 ,
4139 octets-1 octet grâce à caird
-1 par inspiration de la réponse de FlipTack
Essayez-le en ligne!
Solution alternative de 39 octets
la source
Gelée ,
10 à9 octetsEssayez-le en ligne!
-1 octet grâce à Erik
Alternative (par M. Xcoder ), également pour 9 octets:
Essayez-le en ligne!
Comment ça marche
la source
Ṣ24S⁼?3R¤
pour 9 octets.3R⁼Ṣ×18+S
pour 9 octets aussi.Pyth , 9 octets
Une approche différente de l’autre réponse Pyth.
Explication:
Un port de ma réponse en Python
Essayez-le en ligne!
la source
PowerShell , 44 octets
Essayez-le en ligne!
Algorithme similaire aux réponses Python et JavaScript. Prend les entrées sous forme de tableau littéral
$a
. Puis, somme tout de suite$a
, formant l’opérateur de gauche du+
.La main droite est le
diff
(alias pourCompare-Object
) de1,2,3
et$a
- ceci est un tableau vide si elles sont égales, ou un tableau non vide des différents éléments s'ils ne sont pas égaux - enfermés dans un booléen-not. Ainsi, s’ils sont égaux, le tableau vide (une valeur de Falsey) devient$true
.C'est ensuite multiplié par
18
ce qui jette implicitement$true
à1
et$false
à0
. Donc, le côté droit sera18
si les tableaux sont les mêmes, et0
sinon. Cela donne le résultat correct de24
si le tableau en entrée est1,2,3
dans une permutation, et la somme du tableau en entrée dans le cas contraire.la source
Kotlin ,
4644 octetsEssayez-le en ligne!
Édite
la source
listOf(1,2,3)
pour économiser 2 octets? Je ne connais pas Kotlin, alors je ne suis pas sûr.