Bei einer gegebenen Zahl N wird das Vorzeichen von N ausgegeben :
- Wenn N positiv ist, wird 1 ausgegeben
- Wenn N negativ ist, wird -1 ausgegeben
- Wenn N 0 ist, wird 0 ausgegeben
N ist eine ganze Zahl innerhalb des darstellbaren Bereichs von ganzen Zahlen in der von Ihnen gewählten Sprache.
s
aufwändiger, ein eingebautes Zeichen einzugeben oder es mit cleverer Bitverschiebung / Mathematik zu berechnen? Schauen Sie sich diesen Meta-Post anAntworten:
Netzhaut , 9 Bytes
Probieren Sie es online!
Ersetzt eine Ziffer ungleich Null und alles danach mit
1
. Dies lässt ein potenzielles Vorzeichen-
intakt und ändert alle Zahlen außer sich0
selbst in einen absoluten Wert1
.quelle
0.42e2
)?C (GCC),
24232218 BytesVielen Dank an @aross und @Steadybox für das Speichern eines Bytes!
Funktioniert nicht auf allen Systemen oder Compilern. Funktioniert mit TIO .
quelle
return n>>16|!!n;
f(n){n=n>>31|!!n;}
funktioniert auch. Dies ist jedoch nur eine Eigenheit des Compilers, keine Sprachfunktion.Mathematica, 4 Bytes
Wie wäre es, wenn Sie die eingebauten
Sign
4 Bytes nicht verwenden? ;)Clip
Mit einem einzelnen Argument wird der Eingabewert zwischen-1
und geklemmt1
. Da es sich bei den Eingaben nur um Ganzzahlen handelt, entspricht dies der VerwendungSign
.quelle
COW,
225213201 BytesProbieren Sie es online!
Die Art und Weise, wie dieser Code funktioniert, ist, dass er das Vorzeichen bestimmt, indem er abwechselnd größere Zahlen addiert und subtrahiert und sieht, welche zuletzt funktioniert hat. Wenn eine Ganzzahl ungleich Null angegeben ist, subtrahieren Sie zuerst 1, addieren dann 2, subtrahieren dann 3 usw. und Sie werden schließlich 0 erreichen. Behalten Sie Ihren Zustand im Auge, indem Sie abwechselnd 2 zu einem Wert addieren und subtrahieren, der bei 0 beginnt Beispiel:
Wenn Sie fertig sind, subtrahieren Sie 1 von Ihrem Zustand und Sie erhalten das positive oder negative Vorzeichen. Wenn die ursprüngliche Zahl 0 ist, tun Sie dies nicht und geben Sie einfach 0 aus.
Ausführliche Erklärung:
Ich experimentiere immer noch mit dem Golfspielen (Sie werden schockiert sein, wenn Sie feststellen, dass das Golfspielen in COW ziemlich schwierig ist), sodass dies in Zukunft möglicherweise ein paar Bytes länger dauern wird.
quelle
OUT OF MANA!!!
Cubix , 10 Bytes
Testen Sie es online!
Dieser Code wird in das folgende Würfelnetz eingeschlossen:
Der Code wird dann mit dem IP (Anweisungszeiger) beginnend
I
nach Osten ausgeführt.I
gibt eine vorzeichenbehaftete Ganzzahl von STDIN ein und schiebt sie auf den Stapel.Der nächste Befehl ist
?
, der die Richtung der IP abhängig vom Vorzeichen des obersten Elements ändert. Wenn die Eingabe 0 ist, bewegt sie sich in dieselbe Richtung und durchläuft den folgenden Code:>
- Richten Sie die IP nach Osten. (No-op, da wir schon nach Osten gehen.)O
- Das oberste Element als Ganzzahl ausgeben.2
- 2 auf den Stapel schieben. Dies ist praktisch ein No-Op, weil ...@
- Beendet das Programm.Wenn der Eingang negativ ist, wird die IP am
?
; Da dies ein Würfel ist, bewegt sich die IP0
in der zweiten Reihe in Richtung Osten.0
drückt ein Literal 0, dann wird dieser Code ausgeführt:^
- Richten Sie die IP nach Norden.W
- "Sidestep" die IP einen Punkt nach links.(
- Verringern Sie das oberste Element.Das TOS ist jetzt
-1
und die IP wickelt sich durch ein Bündel von No-Ops um den Würfel,.
bis er das trifft>
. Dies führt den gleichen oben erwähnten Ausgabecode aus und gibt ihn aus-1
.Wenn die Eingabe positiv ist, geschieht das Gleiche wie bei negativen Eingaben, mit einer Ausnahme: Die IP dreht sich nach rechts statt nach links
?
und umschließt den Cube mit der2
, wodurch ein Literal 2 ausgelöst wird. Dies wird dann auf 1 und dekrementiert zur Ausgabe gesendet.quelle
I
, -1 zurückzugeben, wenn die Eingabe endet, genau wie bei Kleinbuchstabeni
.JavaScript (ES6), 9 Byte
Einfach.
Das kürzeste nicht eingebaute ist 13 Bytes:
Dank @Neil kann dies byteweise ausgeführt werden, allerdings auf Kosten von 32-Bit-Ganzzahlen:
Oder du könntest tun
Das scheint mehr Golf zu spielen, aber ich bin nicht sicher, wie.
quelle
n
:n=>n>>31|!!n
.n>>31
ist wirklich schlau, danke!APL (Dyalog APL) , 1 Byte
Funktioniert auch für komplexe Zahlen und gibt 1∠ θ zurück :
TryAPL online!
Ohne diese integrierte Funktion für Ganzzahlen (gemäß OP):
¯1⌈
der größte der negativen und1⌊
der kleinste von einem und⊢
das ArgumentTryAPL online!
... und eine allgemeine:
>∘0
mehr als null-
Minus<∘0
weniger als NullTryAPL online!
quelle
> <> ,
98 BytesVielen Dank an Sp3000 für das Speichern eines Bytes.
Es gibt eine nicht druckbare
0x01
vor dem/
.Probieren Sie es online!
Erläuterung
Dies ist ein Port meiner zeichencodebasierten Labyrinth-Antwort .
quelle
;
anstelle der nicht druckbaren verwenden können,0x01
um das Programm korrekt zu beenden :)0x01
zum pushen1
.123
. Lektion gelernt: Testen Sie mit mehr Fällen.Vim, 22 Bytes
Dank @DJMcMayhem ein Byte gespart !
Hier
^M
ist eine wörtliche Newline.Wie @ nmjcman101 in den Kommentaren ausführte , kann
:s/\v(-)=[^0].*/\11^M
stattdessen ein einzelner regulärer Ausdruck ( 20 Byte) verwendet werden. Da dies jedoch im Grunde das Gleiche ist wie eine Retina-Antwort, halte ich an meiner eigenen Methode fest.Erläuterung:
Hier ist ein GIF mit einer negativen Zahl (alte Version):
Hier läuft es mit 0:
Laufen mit positivem:
quelle
:s/\v(-)=[^0].*/\11
///
5236 BytesUngolfed, Erklärung:
Grundsätzlich handelt es sich um eine MapReduce-Implementierung, dh es gibt zwei Phasen:
2
-9
durch1
, zB1230405
->1110101
11
oder10
zu1
wiederholt, zum Beispiel1110101
->1
Wenn es
-
anfangs eine gab, bleibt diese bestehen und die Ausgabe erfolgt-1
. Eine einzelne0
wird niemals ersetzt, was zu sich selbst führt.Update: Sparen Sie zusätzliche 16 Bytes durch Aliasing
//1/
mita
, dank Martin Ender.Probieren Sie es online mit Testfällen aus
quelle
Python 2 , 17 Bytes
Probieren Sie es online!
quelle
(0).__rcmp__
...-(0).__cmp__
.Labyrinth , 10 Bytes
Probieren Sie es online!
Erläuterung
Die Kontrollflusssemantik von Labyrinth gibt Ihnen tatsächlich eine "freie" Möglichkeit, das Vorzeichen einer Zahl zu bestimmen, da der gewählte Pfad an einer 3-Wege-Gabel davon abhängt, ob das Vorzeichen negativ, null oder positiv ist. Es ist mir jedoch bisher nicht gelungen, ein Programm mit Junctions in weniger als 12 Bytes einzupassen (obwohl dies möglicherweise möglich ist).
Stattdessen ist hier eine geschlossene Lösung, die keine Verzweigungen erfordert:
Der Befehlszeiger stößt dann auf eine Sackgasse, dreht sich um und endet, wenn
%
jetzt versucht wird, durch Null zu dividieren.Die Eingangsverdopplungs ist notwendig , diese Arbeit mit Eingaben zu machen
1
und-1
, sonst einer der beiden Modulo - Operationen bereits eine Division durch Null versuchen würde.quelle
:D
PHP, 16 Bytes
Verwendet den neuen Raumschiff-Operator.
quelle
<?=
, sollten Sie verwenden$_GET[n]
, das keine Bytes mehr benötigt. Um es zu benutzen<?=
, müssen Sie sich in einem Webserver (wie Apache) befinden, auf den Sie keinen Zugriff haben$argv
. Sie können versuchen,<?php var_dump($argv);
von einer PHP-Datei zu starten, auf die über Apache zugegriffen wird, und es wird angezeigtNULL
.<?=
Operator funktioniert einwandfrei über die Befehlszeile.php -r '<?=1'
bekomme ichPHP Parse error: syntax error, unexpected '<' in Command line code on line 1
. Aber scheint aus einer Datei gut zu funktionieren. Ich schätze du hast Recht.-r
Flag soll ein Code-Snippet ausführen. Dies ist die vollständige Quelle. Speichern Sie es in eine Datei und führen Sie dannphp file.php
-f
Parameter aus einer Datei heraus funktioniert .Brain-Flak
74 4240 Bytes2 Bytes dank 1000000000 gespart
Probieren Sie es online!
Erläuterung:
quelle
(())
J , 1 Byte
Probieren Sie es online (mit Testfällen)!
quelle
C
24201918 BytesIch missbrauche zwei C-Heldentaten, um das herunterzuspielen. Dies ist in C (GCC).
Probieren Sie es online!
Versionsgeschichte:
1)
f(a){return(a>0)-(a<0);}
// 24 Bytes2)
f(a){a=(a>0)-(a<0);}
// 20 Bytes3)
f(a){a=a>0?:-1+!a;}
// 19 Bytes4)
f(a){a=a>0?:-!!a;}
// 18 BytesRevision 1: Erster Versuch. Einfache Logik
Revision 2: Missbrauch eines Speicher- / Stapel-Fehlers in GCC, bei dem, soweit ich das beurteilen kann, eine nicht zurückgebende Funktion in bestimmten Fällen die zuletzt gesetzte Variable zurückgibt.
Revision 3: Missbrauch ternären Verhaltens, bei dem undefiniertes Ergebnis bedingtes Ergebnis zurückgibt (weshalb die wahre Rendite für mein ternäres Ergebnis Null ist)
Revision 4: Subtrahieren Sie eine Bool-Besetzung (
!!
) von der ternären bedingten Ersetzung für dienil
in Revision 2 angegebene.quelle
Ruby, 10 Bytes
quelle
0.<=>
auch funktionieren, oder kannst du in Ruby nicht auf solche Methoden verweisen?.<=>
Erwartet 1 Argument, so würde es am Ende sein0.<=> x
, was länger ist.0.method:<=>
da Methodenaufrufe in ruby keine Klammern verwenden und0.<=>
als Methodenaufruf mit zu wenigen Argumenten interpretiert würden.Perl, 9 Bytes
Benötigt
-E
keine zusätzlichen Kosten.Verwendungszweck
Ich bin glücklich mit dem Fischbetreiber!
quelle
-E
, das ist nur, wenn Sie es von der CLI anstelle einer Datei aufrufen, weshalb Sie vermutlich keine zusätzlichen Kosten angegeben haben.-e
nicht funktioniert, aber-E
nicht länger als akzeptiert wird-e
. Konsens über Meta. Ich hoffe das hilft ein wenig!Stapel Katzen , 6 + 4 = 10 Bytes
+4 Bytes für die
-nm
Flags.n
ist für numerische E / A und da für Stack Cats palindromische Programme erforderlich sind, wirdm
implizit der Quellcode gespiegelt, um die ursprüngliche Quelle zu erhaltenProbieren Sie es online! Wie bei allen guten Stack-Cats-Golfs wurde dies mit brachialer Gewalt herausgefunden, die manuellen Versuche weit hinter sich gelassen hat und nicht einfach in ein größeres Programm integriert werden kann.
Fügen Sie ein
D
Flag hinzu, wenn Sie eine schrittweise Programmablaufverfolgung-nmD
anzeigen möchten , dh mit STDERR / debug ausführen und überprüfen möchten.Stack Cats verwendet ein Band mit Stapeln, die implizit unten mit Nullen gefüllt sind. Zu Beginn des Programms werden alle Eingaben auf den Eingabestapel verschoben, mit einem
-1
an der Basis, um die Eingabe von den impliziten Nullen zu trennen. Am Ende des Programms wird der aktuelle Stapel mit Ausnahme einer Basis,-1
falls vorhanden, ausgegeben .Die relevanten Befehle hier sind:
Beachten Sie, dass alle diese Befehle invertierbar sind, wobei die Umkehrung der Spiegel des Befehls ist. Dies ist die Prämisse von Stack Cats - alle nicht-trivialen Abschlussprogramme haben eine ungerade Länge, da Programme mit gerader Länge sich selbst aufheben.
Wir beginnen mit
_
subtrahiert, bildet den oberen Teil-1-n
und[
verschiebt das Ergebnis um einen Stapel nach links::
tauscht die obersten zwei undI
tut nichts, da der oberste Stapel jetzt Null ist.!
dann negiert bitweise die obere Null in ein-1
und:
tauscht die oberen zwei zurück.!
dann negiert bitweise die Spitze und verwandelt sich-1-n
wieder inn
:Nun verzweigen wir basierend auf
I
, was auf unser Original zutrifftn
:Wenn
n
negativ, bewegen wir uns einen Stapel nach links und enden mit-n
einer impliziten Null.:
swappt, setzt eine Null oben drauf und]
verschiebt die Null oben auf die-1
gerade abgezogene._
subtrahiert dann, wobei der endgültige Stapel unverändert bleibt[-1 -1]
, und es wird nur einer-1
ausgegeben, da die Basis-1
ignoriert wird.Wenn
n
Null ist, bewegen wir uns nicht und:
tauschen, setzen-1
auf.]
dann bewegt man diesen nach links-1
oben nach rechts-1
und_
subtrahiert, wobei der letzte Stapel wie[-1 0]
folgt bleibt, gibt die Null aus und ignoriert die Basis-1
.Wenn
n
positiv, bewegen wir uns einen Stapel nach rechts und enden mit-n
a-1
.:
swappt, setzt den-1
auf und]
verschiebt diesen nach-1
rechts auf eine implizite Null._
subtrahiert dann, gibt0 - (-1) = 1
und lässt den endgültigen Stapel wie[1]
, der ausgegeben wird.quelle
TI-Basic, 8 Bytes
Alternative Lösungen (zögern Sie nicht, mehr vorzuschlagen):
quelle
~
soll das sein?~
dieses Token darstellt.Ans
als Eingabe erfüllt nicht die Kriterien für eine gültige Standard-E / A-Methode (es gibt nicht doppelt so viele positive Stimmen wie negative Stimmen - derzeit liegt sie bei + 19/12).MATL , 6 Bytes
Die Eingabe kann eine Zahl oder ein Array sein. Das Ergebnis ist eine Zahl oder ein Array mit den entsprechenden Werten.
Probieren Sie es online! Oder testen Sie mehrere Fälle mithilfe der Array-Eingabe.
Erläuterung
Dies vermeidet die Verwendung der eingebauten Vorzeichenfunktion (
ZS
).quelle
ZS
wie es in der Antwort steht.Gelee , 1 Byte
TryItOnline!
Die monadischen Zeichen Atom ,
Ṡ
tut genau das, was für eine ganze Zahl Eingang angegeben ist, entweder als Voll Programm oder als ein monadischen Link (Funktion ein Argument nimmt).quelle
Mathematica, 4 Bytes
Genau das, was es verspricht
quelle
sgn
Oktave,
2624 BytesDies ist meine erste Antwort auf eine Code-Golf- Oktave. Alle Golftipps sind willkommen!
Probieren Sie es online!
Die Idee für die Aufnahme
asin
kommt von der Frage, wo es heißtoutput the sign
:)Erläuterung
Hinweis: Wenn Sie die Zahl durch
pi
dividieren und mit multiplizieren,2
entspricht dies der Division der gesamten Zahl durchpi/2
Fall
0
:asin(0)
Ausbeuten0
. Den Realteil davon zu nehmen und durch zu teilen,pi/2
macht keinen Unterschied für die Ausgabe.Fall
positive
:asin(1)
Ausbeutenpi/2
.asin
einer beliebigen Anzahl größer als1
gebenpi/2
+ komplexe Zahl. Den Realteil davon zu nehmen, gibtpi/2
und ihn durchpi/2
gibt zu teilen1
Fall
negative
:asin(-1)
Ausbeuten-pi/2
.asin
einer beliebigen Anzahl kleiner als-1
geben-pi/2
+ komplexe Zahl. Den Realteil davon zu nehmen, gibt-pi/2
und ihn durchpi/2
gibt zu teilen-1
quelle
N will be an integer
Ich habe Glück, dass in der Frage steht :)f=
wenn der Rest ein gültiger, nicht rekursiver Funktionsausdruck ist.Eigentlich 1 Byte
Probieren Sie es online!
Ein weiterer Fall von genau dem, was auf der Dose steht -
s
ist die Vorzeichenfunktion.Ohne das eingebaute (4 Bytes):
Probieren Sie es online!
;A\
dividiert den absoluten Wert der Eingabe durch die Eingabe. Dies ergibt sich-1
für negative Eingänge und1
für positive Eingänge. Leider wird aufgrund der Fehlerbehandlung von Actually (wenn etwas schief geht, wird der Befehl ignoriert),0
da die Eingabe zwei0
s auf dem Stapel belässt .+
Korrigiert dies, indem sie hinzugefügt werden (was zu einem Fehler führt, der ignoriert wird).quelle
Piet,
188534641 BytesOnline-Dolmetscher hier verfügbar.
Dieser Piet-Code erfüllt den Standard
(n>0)-(n<0)
, da keine Vorzeichenprüfung eingebaut ist. In der Tat gibt es nicht weniger als eingebaut, so dass eine genauere Beschreibung dieser Methode wäre(n>0)-(0>n)
.Der obige Text repräsentiert das Bild. Sie können das Bild generieren, indem Sie es in das Textfeld auf der Interpreterseite einfügen. Der Einfachheit halber habe ich das folgende Bild bereitgestellt, in dem die Codelgröße 31 Pixel beträgt. Das Raster dient der Lesbarkeit und ist nicht Bestandteil des Programms. Beachten Sie auch, dass dieses Programm keine weißen Codel kreuzt. Folgen Sie den farbigen Markierungen am Bildrand, um dem Programmablauf zu folgen.
Erläuterung
Um die Dateigröße weiter zu verringern, müsste ich das Programm tatsächlich ändern (keuchen), anstatt nur die Datei zu komprimieren, wie ich es getan habe. Ich möchte eine Zeile entfernen, die dies auf 36 reduziert. Ich kann auch meinen eigenen Interpreter entwickeln, der ein viel kleineres Eingabeformat hat, da es nicht darum geht, den Code tatsächlich zu ändern, um ihn kleiner zu machen.
Die Mods sagten mir, dass die gesamte Dateigröße für Piet-Code zählt. Da der Interpreter Text als gültige Eingabe akzeptiert und der unformatierte Text eine viel geringere Anzahl von Bytes aufweist als jedes Bild, ist Text die naheliegende Wahl. Ich entschuldige mich dafür, dass ich diesbezüglich frech bin, aber ich mache keine Regeln. Die Metadiskussion darüber macht meine Meinung zu diesem Thema deutlich.
Wenn Sie der Meinung sind, dass dies gegen den Geist von Piet verstößt oder Sie dies aus irgendeinem Grund weiter diskutieren möchten, lesen Sie bitte die Diskussion zu Meta .
quelle
Aufdringlich , 7 Bytes
Dies ist wahrscheinlich das seltsamste Programm, das ich je geschrieben habe ...
Probieren Sie es online!
Es verwendet
sign(x) = abs(x) / x
, aber mit einem explizitensign(0) = 0
Nullteilungsfehler zu vermeiden.Dies funktioniert , weil
x / abs(x)
ist 1 , wenn x positiv ist, und -1 , wenn x negativ ist. Wenn der Eingang 0 ist, springt das Programm zum Ausgabebefehl.4 Bytes (nicht konkurrierend)
Wegen Urlaub und zu viel Zeit habe ich den Pushy-Interpreter komplett überarbeitet. Das obige Programm funktioniert immer noch, aber da es
0 / 0
jetzt standardmäßig auf 0 gesetzt ist, ist Folgendes kürzer:Probieren Sie es online!
quelle
abs
, hatte aber keine Ahnung, was ich mit der tun sollte0
. Gut gemacht!R, 25 Bytes
Nimmt die Nummer zu STDIN. Dann wird geprüft , ob es Null ist, wenn nicht, kehrt
x/|x|
die entweder1
von-1
und Ausgänge 0 , wennx=0
.Dies ist
sign
natürlich ohne Verwendung des eingebauten .quelle
sign(scan())
.V
1412 BytesDanke @DJMcMayhem für 2 Bytes. Verwendet eine Reg-Ex, um die Substitution durchzuführen. Ein bisschen Spaß, weil es kein eingebautes ist. Ich habe eine lustigere Funktion, aber sie funktioniert nicht so, wie ich es erwartet hatte.
Überprüfen Sie die Testfälle
Dies übersetzt nur
:%s/\v(-)=[^0].*/\11
die Übereinstimmungen mit einer oder mehreren,-
gefolgt von einer Ausnahme von 0, gefolgt von einer beliebigen Anzahl von Malen. Es wird durch das erste Match (also entweder a-
oder nichts) und a ersetzt1
. Der reguläre Ausdruck stimmt nicht mit 0 überein, so dass er selbst bleibt.Die unterhaltsamere Art (21 Bytes)
TryItOnline
Dies akzeptiert die Eingabe eher als Argument als im Puffer.
é<CR>
Fügen Sie eine neue Zeile ein.À
Führen Sie das Argument als V-Code aus. a-
bewegt den Cursor in die vorherige Zeile und eine beliebige Zahl wird zum Zähler für den nächsten Befehlé1
Einfügen (count)1
‚s2|
gehe zur zweiten SpalteD
alles ab der zweiten Spalte löschen (nur ein Zeichen übrig lassen)kJ
Verbinden Sie die beiden Linien miteinander.òhé-ò
übersetzt zu: "laufenhé-
bis zum brechen". Wenn sich die 1 in der zweiten Zeile befand, bricht diese unmittelbar nach dem h ab. Wenn es sich in der ersten Zeile befand, wird-
vor dem Brechen ein eingefügt.ó^$/a
Dies behebt die Tatsache , dass-1
,0
,1
wird ein leer lassen, und ersetzt eine leere mit dem Argument Register.quelle
Àé1
. Eine positive Zahl ergibt eine Folge von Einsen, eine negative Zahl SOLLTE eine Folge von Einsen eine Zeile nach oben ergeben, und 0 würde nichts ergeben. Das negativeÀ
d$@"
é<cr>
es zwei leere Zeilen und dann funktioniert das . Ich bin mir nicht sicher, ob Sie damit eine vollständige Antwort erhalten können--
Argument, das Sie hinzugefügt haben?-6
docopt mit einem Flag beginnt (die Python-Bibliothek für Befehlszeilenoptionen), ist es eher ein Befehlszeilenflag als ein Argument. Hinzufügen--
nur signalisiert, dass es ein Argument ist, keine Option. Andernfalls wird es aufgrund eines ungültigen Befehlszeilenaufrufs überhaupt nicht ausgeführt.C #,
1615 BytesVerbesserte Lösung dank Neil
Alternativ ist die eingebaute Methode 1 Byte länger:
Volles Programm mit Testfällen:
quelle
n>>31
stattn<0?-1:0
.;
da ein Lambda ein Ausdruck ist, keine Aussage. B) WäreMath.Sign
oderMath::Sign
etwas ähnliches eine gültige Vorlage? Nicht sicher, wie C # insbesondere mit Methoden umgeht. Grundsätzlich wärex = Math.Sign;
eine gültige C # -Anweisung, wenn siex
mit dem richtigen Typ initialisiert würde?