Einführung
Klassischerweise sind Boolesche Werte ein Bit. true
oder false
, 1
oder 0
. Führende Nullen wären einfach überflüssig. Zum Beispiel 001
bedeutet das gleiche wie 00001
oder nur 1
.
Der 32-Bit-Boolesche Wert
Wenn Sie einen Wert für "truthy / falsey" angeben, geben Sie den entsprechenden 32-Bit-Booleschen Wert als Zeichenfolge aus. (Oder als Zahl, wenn Ihre Sprache aus irgendeinem Grund führende Nullen unterstützt.)
Ihr Programm muss nicht für jeden Wahrheits- / Falschtyp geeignet sein, sondern nur für das, wofür Ihre Programmiersprache am besten geeignet ist.
Beispiel I / O
Input >> Output
truthy >> 00000000000000000000000000000001
falsey >> 00000000000000000000000000000000
Antworten:
Python 3 ,
33251815 BytesDanke @ jurjen-bos für den
__mod__
Tipp.Probieren Sie es online!
quelle
lambda b:'%0.32d'%b
funktionierenNone
wahr oder falsch ?lambda b:f'{bool(b):032}'
oderlambda b:f'{not b<1:032}'
0.32d
.x86-16-Computercode (DOS), 16 Byte
Die obige Funktion empfängt einen Booleschen Wert (0 == Falsey, 1 == Truthy) im
BL
Register (Low-Byte vonBX
) und gibt einen "redundanten Booleschen" String an die Standardausgabe aus.Es funktioniert durch Aufrufen eines Interrupts (0x21), um einen DOS-Funktionsaufruf (ausgewählt durch Setzen
AH
auf 2) auszuführen, der ein einzelnes Zeichen (inDL
) an die Standardausgabe ausgibt.Zuerst wird das ASCII-Zeichen '0' geladen
DL
, der Zähler (CX
) wird auf 31 gesetzt und es wird eine Schleife ausgeführt, um die "redundanten" Bytes zu drucken. Dann wird der boolesche Eingabewert addiertDL
(wennBL
falsch ist, bleibt das Addieren von 0DL
unverändert als ASCII '0'; wennBL
wahr,DL
wird es um eins zu ASCII '1' inkrementiert), und das letzte Byte wird gedruckt.Die Funktion gibt keinen Wert zurück.
Ziemlich anständig für eine Sprache, die nicht wirklich Streicher ist.
Volles Programm, 21 Bytes
Wenn Sie ein vollständiges Programm erstellen möchten, sind nur noch 5 Bytes erforderlich. Anstatt die Eingabe in ein Register zu übergeben, wird die Eingabe aus den Argumenten gelesen, die beim Aufrufen der Anwendung in der Befehlszeile übergeben wurden. Ein Argument von 0 wird ebenso wie das völlige Fehlen von Argumenten als falsch interpretiert. Ein Argument größer als 0 wird als wahr interpretiert.
Stellen Sie einfach den folgenden Code als COM-Programm zusammen und führen Sie ihn dann in der Befehlszeile aus.
Beispielausgabe:
Wie funktioniert es? Nun, es ist im Grunde dasselbe, bis Sie zur
CMP
Anweisung kommen. Dadurch wird das Befehlszeilenargument mit dem Wert desDL
Registers verglichen (das, wie Sie sich erinnern, eine ASCII-0 enthält). In einem COM-Programm werden die Codebytes mit dem Offset 0x100 geladen. Davor steht das Programmsegment-Präfix (PSP) , das Informationen zum Status eines DOS-Programms enthält. Insbesondere finden Sie bei Offset 0x82 das erste (eigentlich das zweite, da das erste ein Leerzeichen ist) Argument, das in der Befehlszeile angegeben wurde, als das Programm aufgerufen wurde. Wir vergleichen dieses Byte also nur mit einer ASCII-0.Beim Vergleich werden die Flags gesetzt, und dann wird der
SALC
Befehl (ein undokumentierter Opcode vor dem Pentium, dersbb al, al
nur 1 Byte anstelle von 2 entspricht)AL
auf 0 gesetzt, wenn die beiden Werte gleich waren, oder auf -1, wenn sie unterschiedlich waren. Es ist dann klar , dass , wenn wir subtrahierenAL
ausDL
, ergibt sich daraus entweder ASCII ‚0‘ oder ‚1‘, als angemessen.(Beachte, dass du es ironischerweise kaputt machst, wenn du ein Argument mit einer führenden 0 in der Kommandozeile
01
übergibst , da es nur auf das erste Zeichen abzielt. Also wird es als falsch behandelt. :-)quelle
Python 3 , 23 Bytes
Probieren Sie es online!
quelle
'10'[not n]
würde ausreichen, wenn diese unterstützt werden müssen.'{:032}'.format
für 15 Bytes und arbeiten genauso wie Ihre aktuelle Lösungbool(n)
wäre ausreichendJavascript, 23 Bytes
!!a
zwingt a zu einem Booleschen Wert, aus dem das unäre Plus ein int wird.quelle
a=>'0'.repeat(31)+(+a)
ist ein Byte kürzer.Your program doesn't have to work for every truthy/falsy type, only what your programming language work best for.
a=>'0'.repeat(31)+~~a
funktioniert mit true, false, 1,0V , 8 Bytes
Probieren Sie es online!
Erläuterung:
quelle
Neim ,
65 BytesProbieren Sie es online!
Erläuterung:
Dank Okx wurde ein Byte gespeichert
quelle
ᛝΨβ_I
ᛝ
ist nicht im Wiki, wo hast du es gefunden?Oktave , 17 Bytes
Anonyme Funktion. Funktioniert auch in MATLAB.
Probieren Sie es online!
quelle
ArnoldC , 369 Bytes
Probieren Sie es online!
quelle
Brainfuck ,
616036 BytesIch bin sicher, es gibt eine clevere Möglichkeit, sich mit den Zeigern nicht so viel zu bewegen.Ich lag richtig. Dort gab es. Vielen Dank an @Graviton für die Idee!
Nächster Schritt: Holen Sie sich die Werte 32 und 48 schneller!
Probieren Sie es online!
Hat Spaß gemacht für einen ersten Golf!
Es ist viel zu spät geworden.Was mache ich überhaupt?quelle
>-[-[-<]>>+<]>--<<-[>+<-----]>--->[-<.>],.
(Eingabe als 0 oder 1) Probieren Sie es online!Scala, 32 Bytes
Sorry, aber ich musste es in 32 Bytes> _ <tun
Es wird von einer Funktion eingeschlossen, die
t
als Parameter verwendet wird (alsstring
"0" oder "1" für bzw. falsch oder wahr) unds
zurückgegeben.Probieren Sie es online!
Gültige Antwort: Scala, 46 Bytes
Genau wie meine Java-Antwort sollte ich einen Booleschen Wert für den Parameter verwenden. So :
Probieren Sie es online!
quelle
Braingolf ,
108 BytesProbieren Sie es online!
␟
ist ein Unit Separator, ASCII0x1F
oder 31. Kann das tatsächliche Zeichen nicht finden, das in TIO eingefügt werden soll, daher verwendet TIO stattdessen# 1-
das Leerzeichen (32) und dekrementiert es auf 31.Erläuterung
quelle
Oktave , 23 Bytes
Probieren Sie es online!
Dies ist kürzer als alle Ansätze, mit denen ich versucht habe
printf
. Möglicherweise habe ich jedoch etwas verpasst, da ich dies auf meinem Telefon getan habe.Nur noch ein Byte länger
Das könnten 18 Bytes sein, wenn ich 1/0 als Zeichenkette nehmen könnte.
Probieren Sie es online!
quelle
Java 8,
3127 Bytes-4 Bytes dank @ OlivierGrégoire .
Probieren Sie es hier aus.
quelle
"".format
)String.format
habe, wusste ich, dass es irgendwie einen kürzeren Weg gibt, aber ich dachte, ich habe letztes Mal wahrscheinlich eine String-Variable verwendet ... Danke. ;)05AB1E , 5 Bytes
Probieren Sie es online!
quelle
31úð0:
!Ruby, 21 Bytes
Ja, dieser Raum muss da sein ..: /
In Ruby ist alles außer
false
undnil
wahr; Probieren Sie es online!quelle
Mathematica, 36 Bytes
Mathematica, 26 Bytes
Probieren Sie es online!
quelle
Kohle , 5 Bytes
Probieren Sie es online! (Link zur ausführlichen Version.)
Nach dem Verständnis von Charcoal
0
und1
alsTrue
oderFalse
gibt dies nur 310
s und die Eingabe (0
oder1
) als Zeichenfolge aus.quelle
True
seltsam gesetztPython 2 ,
2625 BytesVielen Dank an Erik den Outgolfer für das Speichern eines Bytes!
Entscheidet sich für den vollständigen Programmansatz:
Probieren Sie es online!
quelle
~~
mit+
für -1. Danach wird das volle Programm nicht mehr teuer sein . ;)Unerwünscht, unnötig, opportunistisch , 7 Bytes
Geben Sie entweder 1 oder 0 in das Register ein.
quelle
C 26 Bytes
Ziemlich die gleiche Idee wie die Lösung von 1bluestone , aber in C ist sie kürzer und funktioniert bei jeder Ganzzahleingabe korrekt:
Dies schließt natürlich einige implizit eingegebene Variablen / Funktionen ein, wie dies bei allen guten C-Golf-Antworten
!!
der Fall ist ... Der Operator ist der kürzeste Weg, um einen Wahrheitswert1
in C umzuwandeln (über doppelte Negation!
wird definiert, ob er entweder1
oder zurückgibt0
).Testen Sie mit:
quelle
Haskell ,
3732 BytesProbieren Sie es online!
Danke @nimi für
-5
Bytes!quelle
show(fromEnum x)
stattlast(...)
. Pointfree noch kürzer:(('0'<$[1..31])++).show.fromEnum
.Bool
ist einEnum
, danke!PHP, 28 Bytes
Als bool.php speichern und ausführen:
quelle
printf('%032d',$argv[1]);
(erfordert das-r
Flag).Ly ,
201513 BytesBEARBEITEN: 5 Bytes dank ovs gespeichert.
BEARBEITEN: Speichert weitere 2 Bytes, indem 0 als Zahl und nicht als Zeichen gedruckt wird.
quelle
65*1+["0"o1-]nu
funktionierenOktave,
1611 BytesProbieren Sie es online!
Ein Funktionshandle, das
"00000000000000000000000000000001"
als wahr und"00000000000000000000000000000000\0"
als falsch gilt.Erläuterung:
In Octave wird ein Array als falsch betrachtet, wenn mindestens eines seiner Elemente Null ist. Das 33. Element der zweiten Zeichenfolge ist ein Zeichen mit dem ASCII-Wert 0, sodass es als falsch betrachtet werden kann.
quelle
Java, 40 Zeichen, 40 Bytes
Als Parameter wird ein String verwendet, der nicht korrekt ist (der Java-Wert falsy / truthy wird von OP gezwungen, durch einen Booleschen Wert dargestellt zu werden).
Probieren Sie es online!
Gültige Antwort: Java, 60 Zeichen, 60 Byte
Probieren Sie es online!
Ich weiß, dass es bereits eine Java-Antwort gibt, die kürzer ist als diese, aber immer noch :)
quelle
return
Anweisung ist Teil Ihres Codes, also Teil Ihrer Byteanzahl. Aber Ihre Antwort erfüllt nicht die Regeln: Sie müssen eineboolean
als Eingabe erhalten. "Wahrheit / Falsch" wird in Java als entwedertrue
oderfalse
und sonst nichts übersetzt. Sie können also keinenString
als Eingabeparameter erhalten.;
) nicht setzen. Außerdem können Sie Ihren Code wie folgt verkürzen:c->{String k="";for(;k.length()<31;)k+=0;return k+=c?1:0;}
. Dask+=c?1:0
ist zu verkürzenk+(c?1:0)
.;
. Eine Anweisung erfordert ein Semikolon. Ein Lambda ist keine Aussage.Japt ,
1311 BytesErläuterung:
Ein Byte mit einer integrierten Base-2-Konvertierung gespeichert!
Um die Zeichenfolge von 0s vor dem
1
/ einzufügen0
, muss das1
und0
in eine Zeichenfolge umgewandelt werden. Die typische Vorgehensweise wäre1s
(3 Bytes). Da wir jedoch nur Einsen und Nullen konvertieren, kann ich die integrierte Basis 21¤
(2 Byte) verwenden.Die Eingabe kann in Form einer Ganzzahl oder einer Zeichenfolge erfolgen.
0
und""
sind falsch in Japt.Probieren Sie es online!
Testsuite
quelle
C # (.NET Core) , 29 Byte
OP sagte 1/0 kann für Truthy / Falsey verwendet werden, kann also
a
ein Int machen und es wirdC # hat zwar nicht wirklich Wahrhaftigkeit / Falschheit, daher werde ich diese Antwort nicht verwenden.
Probieren Sie es online!
quelle
Padleft
kommt hier die gleiche Byteanzahl rein.interpolated strings
b=>$"{(b?1:0):D32}"
19 bytes
MEIN ,
109 BytesProbieren Sie es online!
Erklärung (Codepage [mit Begründung hinter dem Zeichen] / Hex-Code):
Ich kann nicht glauben, dass dies ohne irgendwelche Befehle mit zwei Argumenten möglich ist!
Bearbeiten: 1 Byte gespeichert, indem Primzahlen anstelle von Arithmetik verwendet werden, um 31 zu erhalten.
quelle
APL, 11 Bytes
Wie?
1\⍨⊢
- 1 Eingabe wiederholen - leeres Array bei falschem Wert zurückgeben1↑
- Nimm den ersten Gegenstand¯32↑
- Mit 31 Nullen rechts ausrichten⍕
- Format als Zeichenfolgequelle
⍕¯32↑⊢
∊⍕¨¯32↑⎕
oder so.J, 11 Bytes
Probieren Sie es online!
Wie?
Anmerkung: In J sind Boolesche Werte 0 oder 1, auch als "Iverson-Konvention" bekannt, nach Ken Iverson, dem Schöpfer von J und APL
quelle
":
erforderlich ist - es ändert einen Booleschen Wert in einen String .