Cette fois, votre objectif est de trouver le maximum de 3 entiers (de - (2 ^ 31) à 2 ^ 31 - 1 en complément binaire 2) sans utiliser de branchement ou de boucles.
Vous n'autorisé à utiliser
L' inégalité / l' égalité (
==
,>
,>=
,<
,<=
,!=
) Ceux - ci comptent comme 2 jetons.Arithmétique (
+
,-
,*
,/
)Opérateurs logiques (
!
pas,&&
et,||
ou)Opérateurs de bits (
~
non,&
et,|
ou,^
xor,<<
,>>
,>>>
gauche arithmétiques et logiques et décalages à droite)Constantes. 0 jetons
Affectation variable. 0 jetons
Entrez 3 variables comme a
, b
et c
. Sortez le nombre maximum.
Les règles standard de golf à code atomique s'appliquent. Si vous avez des questions, veuillez les laisser dans les commentaires. Un jeton est l'un des ci-dessus avec les règles spéciales.
Réponses:
Javascript 10 jetons
Modifier en utilisant <et * au lieu de bidouiller les bits - comme indiqué dans les commentaires, les opérations sur les bits peuvent échouer pour une entrée proche de la limite de plage (plus de 30 bits)
Jetons C 8
Indépendant du langage en fait, n'importe quel langage de type C fera l'affaire. Pour être pointilleux, en C standard, il n'est pas portable car le décalage à droite peut ne pas étendre le signe (mais dans les implémentations courantes, il le fait).
En C (et C ++, C # et Java je pense), nous pouvons facilement gérer les problèmes de débordement en utilisant des valeurs temporaires plus grandes:
la source
int
votre code ne fonctionne pas pour x = 2147483647, y = -2, z = 0. Votre choix si vous voulez le changerJavascript
6 jetons
la source
&&
et||
probablement un oubli, qui devrait être souligné plutôt qu'exploité.&&
,<
et>
. Le=
est utilisé comme une affectation et compte pour 0C: 10 jetons
Inspiré par la réponse de @ openorclose, mais converti en C et rendu sans branche en utilisant la multiplication plutôt que les opérateurs booléens en court-circuit.
la source
Javascript
14 jetons
la source
Plusieurs langues (Python) (10 jetons)
https://graphics.stanford.edu/~seander/bithacks.html#IntegerMinOrMax
Oh, quelqu'un l'a déjà posté :)
la source
You are only allowed to have one function, the one that takes the 3 inputs and outputs.
c'est exactement ce que cette réponse a. Les 2 tirages ne sont que des cas de testmax2(max2(x,y),z)
initialement :)Jetons C ++ 11:15
Utiliser uniquement des opérateurs arithmétiques et au niveau du bit (car les opérateurs d'égalité et de logique booléenne le rendent trop facile) ...
la source
J (pas en compétition)
Je me demandais juste à quoi ressemblerait une solution dans J. Cela utilise un
,
et un#
bien, donc ce ne sera pas en compétition.Ce serait en concurrence, mais c'est beaucoup trop long, avec 9 jetons:
la source
nous avons les hypothèses suivantes:
max (a; b) = (a + b + | ab |) / 2
max (a; b; c) = max (max (a; b); c)
abs (a) = (a + (a >> 31)) ^ (a >> 31)
on peut utiliser le pseudo-code:
la source
C # (2e essai)
Je l'ai compris ... Pas de fonctions intégrées ...
Mais est-il autorisé à utiliser d'autres types de données intégrés ou tout simplement un entier? Si autorisé, je proposerais:
la source
jetons javascript 8
bien que similaire à la réponse de @ openorclose, j'utilise en fait les opérateurs logiques pour l'affectation elle-même.
violon
la source
R (10 jetons)
la source
Brainfuck (pas en compétition)
la source
TIS-100, 8 opérations
Le fournisseur (UP) ne fait que des MOV, donc non indiqué dans le code Peut-être ne fonctionne pas lorsqu'il est trop près du bord 999
la source
VBA (6 jetons)
Je ne sais pas si ce n'est pas une ramification.
la source
IIf
, Inline-If. Dans la plupart des langues, c'est par exemple le casa>=b ? a : b
. Il se ramifie en effet.JavaScript: 4 jetons (** basé sur une interprétation large de "affectation"!)
Évidemment, mon score de 4 est extrêmement généreux / indulgent!
Pour arriver à ce score, j'ai supposé que «l'affectation» (valant 0 jeton dans la question) comprend des éléments tels que l'affectation additive, l'affectation soustractive, l'affectation multiplicative et l'affectation XOR-ing (
^=
)Si ces affectations comptent réellement, le score est de 14 :)
la source
d -= b
c'est en fait la même chose qued = d - b
, je dirais que vous utilisez l'arithmétique et que vous devez compter cela comme un jeton.