Dieses Mal ist es Ihr Ziel, das Maximum von 3 ganzen Zahlen (von - (2 ^ 31) bis 2 ^ 31 - 1 im binären 2er-Komplement) zu finden, ohne Verzweigungen oder Schleifen zu verwenden.
Du darfst nur benutzen
Ungleichheits / Gleichheit (
==
,>
,>=
,<
,<=
,!=
) Diese Zählung als 2 - Tokens.Arithmetic (
+
,-
,*
,/
)Logische Operatoren (
!
nicht&&
und||
oder)Bitweise Operatoren (
~
nicht,&
und,|
oder,^
xor,<<
,>>
,>>>
arithmetische und logische linke und rechte Verschiebungen)Konstanten. 0 Token
Variablenzuordnung. 0 Token
Geben Sie 3 Variablen als a
, b
und ein c
. Geben Sie die maximale Anzahl aus.
Standard Atomic Code-Golf-Regeln gelten. Wenn Sie Fragen haben, hinterlassen Sie diese bitte in den Kommentaren. Ein Token ist eines der oben genannten mit den Sonderregeln.
Antworten:
Javascript 10 Token
Bearbeiten mit <und * anstelle von Bitfummeln - Wie in den Kommentaren erwähnt, können Bitoperationen bei Eingaben nahe der Bereichsgrenze (über 30 Bit) fehlschlagen.
C 8 Token
Sprachunabhängig ist in der Tat jede C-ähnliche Sprache. Um wählerisch zu sein, ist es in Standard C nicht portierbar, da die Rechtsverschiebung das Vorzeichen möglicherweise nicht erweitert (in gängigen Implementierungen jedoch).
In C (und C ++, C # und Java, glaube ich) können wir Überlaufprobleme mit größeren temporären Werten leicht bewältigen:
quelle
int
s funktioniert Ihr Code nicht für x = 2147483647, y = -2, z = 0. Ihre Wahl, wenn Sie es ändern möchtenJavascript
6 Spielmarken
quelle
&&
und||
war wahrscheinlich ein Versehen, auf das hingewiesen werden sollte, anstatt es auszunutzen.&&
,<
und>
. Die=
wird als Aufgabe verwendet und zählt als 0C: 10 Marken
Inspiriert von der Antwort von @ openorclose, aber in C konvertiert und mithilfe von Multiplikation anstelle von Kurzschluss-Booleschen Operatoren verzweigungslos gemacht.
quelle
Javascript
14 Spielmarken
quelle
Viele Sprachen (Python) (10 Token)
https://graphics.stanford.edu/~seander/bithacks.html#IntegerMinOrMax
Oh, jemand hat es bereits gepostet :)
quelle
You are only allowed to have one function, the one that takes the 3 inputs and outputs.
Genau das hat diese Antwort. Die 2 Drucke sind nur Testfällemax2(max2(x,y),z)
ursprünglich gemacht habe :)C ++ 11: 15-Token
Verwenden Sie nur arithmetische und bitweise Operatoren (da Gleichheits- und Boolesche Logikoperatoren es zu einfach machen) ...
quelle
J (nicht im Wettbewerb)
Ich habe mich nur gefragt, wie die Lösung in J aussehen würde. Dies verwendet ein
,
und ein#
obwohl, so dass es nicht konkurrieren wird.Dies würde mit 9 Token konkurrieren, ist aber viel zu lang:
quelle
Wir haben die folgenden Annahmen:
max (a; b) = (a + b + | ab |) / 2
max (a; b; c) = max (max (a; b); c)
abs (a) = (a + (a >> 31)) ^ (a >> 31)
wir können den Pseudocode verwenden:
quelle
C # (2. Versuch)
Ich habe es verstanden ... Keine integrierten Funktionen ...
Aber ist es erlaubt, andere integrierte Datentypen zu verwenden oder einfach nur int? Wenn erlaubt, würde ich vorschlagen:
quelle
Javascript 8 Token
Obwohl es der Antwort von @ openorclose ähnelt, verwende ich tatsächlich die logischen Operatoren für die Zuweisung selbst.
Geige
quelle
R (10 Token)
quelle
Brainfuck (nicht im Wettbewerb)
quelle
TIS-100, 8 Operationen
Der Provider (UP) führt nur MOVs durch, die im Code nicht angezeigt werden. Funktioniert möglicherweise nicht, wenn er sich zu nahe an der 999-Kante befindet
quelle
VBA (6 Token)
nicht sicher, ob dies nicht verzweigt ist.
quelle
IIf
, Inline-If. In den meisten Sprachen zum Beispiela>=b ? a : b
. Es verzweigt sich tatsächlich.JavaScript: 4 Token (** basierend auf einer breiten Interpretation von "Zuweisung"!)
Offensichtlich ist meine Punktzahl von 4 extrem großzügig / nachsichtig!
Um zu dieser Punktzahl zu gelangen, habe ich angenommen, dass "Zuweisung" (Wert 0 in der Frage) solche Dinge wie additive Zuweisung, subtraktive Zuweisung, multiplikative Zuweisung und XOR-ing (
^=
) -Zuweisung umfasstWenn diese Aufgaben tatsächlich zählen, ist die Punktzahl 14 :)
quelle
d -= b
es eigentlich dasselbe ist wied = d - b
, würde ich sagen, dass Sie Arithmetik verwenden und dass Sie dies als Token zählen sollten.