Wenn Sie eine positive Ganzzahl in Binärform ohne führende Nullen ausdrücken und jede 1
durch a (
und jede 0
durch a ersetzen )
, stimmen dann alle Klammern überein?
In den meisten Fällen werden sie nicht. Beispiel: 9 ist eine 1001
Binärzahl, ())(
bei der nur die ersten beiden Klammern übereinstimmen.
Aber manchmal passen sie zusammen. Beispiel: 44 ist 101100
binär, dh ()(())
, alle linken Klammern haben eine übereinstimmende rechte Klammer.
Schreiben Sie ein Programm oder eine Funktion, die eine positive ganze Zahl zur Basis 10 verwendet und einen Wahrheitswert ausgibt oder zurückgibt , wenn die Binärklammern -Version der Zahl alle übereinstimmenden Klammern enthält. Wenn dies nicht der Fall ist, drucken Sie einen falschen Wert oder geben Sie ihn zurück .
Der kürzeste Code in Bytes gewinnt.
Wahrheitsbeispiele unter 100:
2, 10, 12, 42, 44, 50, 52, 56
Falsche Beispiele unter 100:
1, 3, 4, 5, 6, 7, 8, 9, 11, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 43, 45, 46, 47, 48, 49, 51, 53, 54, 55, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99
Antworten:
TeaScript , 9 Bytes
16 18 20 22 242 Bytes gespart dank @ETHproductions
Woah. Das ist kurz Verwendet den @ xnor-Ansatz. Dies wird die rekursive Ersetzungsfunktion (
W
) verwenden, die alle10
gleich()
mit nichts ersetzt. Wenn die Zeichenfolge leer ist, ist sie ausgeglichen.Wenn Sie eine Version von TeaScript verwenden, die nach dem Posten dieser Aufforderung erstellt wurde, können dies 7 Bytes werden:
Ungolfed
Erläuterung
quelle
~--c
ist falsch in genau demselben Szenario wiec--
.Pyth, 10 Bytes
Probieren Sie diese Testsuite im Pyth-Compiler aus.
Wie es funktioniert
quelle
!u:G`Tk.BQ
. Wohl leichter zu verstehen.Python2, 87 Bytes
Eine schreckliche Implementierung, die Syntaxfehler missbraucht.
quelle
JavaScript (ES6),
555451 ByteGespeicherte Bytes dank @ Vɪʜᴀɴ und @xsot !
Erläuterung
quelle
f=
. Sie können auch use verwenden,+c
anstattc|0
eine Ganzzahl in Groß- und Kleinschreibung zu schreiben. Sie können auch verwenden,(+c?d++:d--)
was noch kürzer istf=
? Weil viele andere JavaScript-Antworten auf der Site ihre Funktionen benennen.11
true
false
n=>![...n.toString(d=2)].some(c=>(d+=c*2-1)<2)*d==2
Python 2, 45 Bytes
Eine rekursive Funktion. Liest Binärziffern
n
vom Ende und zählti
die aktuelle Verschachtelungsebene der Parens. Wenn es darunter fällt0
, lehnen Sie ab. Wenn wir am Start angelangt sind, wird geprüft, ob die Zählung erfolgt0
.Eigentlich fangen wir mit der Zählung an
i=1
, um zu überprüfen, ob sie gefallen ist0
. Der einzige Terminalerfolgsfall istn==0
undi==1
, geprüft mitn<i<2
. Wir zwingen diese Prüfung passieren , wennn==0
, oder wenni
Stürzen0
, in diesem Fall ist es nicht automatisch.feersum sparte zwei bytes durch restrukturierung der nichtrekursiven fälle mit ungleichheit zum kurzschluss.
quelle
f=lambda n,i=1:n>0<i*f(n/2,i+(-1)**n) or n<i<2
zumindest spart 1.CJam, 11 Bytes
Dies ist ein bisschen unrein: Bei parenthifizierbaren Zahlen werden ein oder mehrere Blöcke gedruckt. Bei nicht parenthifizierbaren Zahlen stürzt das Programm ab, ohne dass etwas an STDOUT ausgegeben wird. Wenn Sie dies online im CJam-Interpreter versuchen , beachten Sie, dass nicht zwischen STDOUT und STDERR unterschieden wird.
Da nicht leere / leere Zeichenfolgen in CJam wahr / falsch sind und die gedruckte Ausgabe immer eine Zeichenfolge ist, entspricht sie möglicherweise den Regeln. Bei den zusätzlichen Kosten von 3 weiteren Bytes für insgesamt 14 Bytes können wir tatsächlich eine wahrheitsgemäße oder falsche Zeichenfolge auf dem Stapel belassen , der gedruckt wird:
Dies stürzt immer noch für nicht parenthifizierbare Nummern ab, was standardmäßig zulässig ist .
Testläufe
Wie es funktioniert
CJam, 15 Bytes
Probieren Sie diese Geige im CJam-Interpreter aus oder überprüfen Sie alle Testfälle auf einmal .
Wie es funktioniert
quelle
Python, 51 Bytes
Eine anonyme Funktion. Wird zu einem Ausdruck ausgewertet, der aussieht wie
Jeder Ersatz entfernt alle
10
, die entsprechen()
. Nachdem alle Ersetzungen vorgenommen wurden, gibt die Funktion zurück, ob es sich nur noch um das binäre Präfix handelt0b
. Es ist mehr als ausreichend,n
Ersetzungen vorzunehmen , da einek
zweistellige Zahl höchstensk/2
Schritte benötigt und ihr Wert am höchsten ist2**k
.quelle
Rubin, 40
Einfache Stringmanipulation. Drops '10', bis es keine mehr gibt.
quelle
Im Ernst , 17 Bytes
Ausgaben
0
für false und1
für true. Probieren Sie es online aus .Erläuterung:
quelle
Japt, 23 Bytes
Japt ist eine verkürzte Version von Ja vaScri pt . Dolmetscher
Das erinnert mich daran, wie weit Japt im Vergleich zu TeaScript noch ist. Nachdem ich den Interpreter in den nächsten Tagen überarbeitet habe, möchte ich "Shortcut" -Zeichen wie Vɪʜᴀɴs hinzufügen.
Wie es funktioniert
Kurz nach dieser Herausforderung half mir @ Vɪʜᴀɴ (jetzt als @Downgoat bekannt), eine Funktion zum rekursiven Ersetzen wie
W
in der TeaScript-Antwort zu implementieren. Dies bedeutet, dass diese Herausforderung jetzt in nur 5 Bytes durchgeführt werden kann:Online testen!
quelle
Mathematica, 49 Bytes
quelle
1,0
von der Liste und teste , ob das Ergebnis eine leere Liste ist.Oktave, 48 Bytes
quelle
C ++,
10494 BytesMit diesem Compiler ausführen , muss vor der Ausführung die Standardeingabe angegeben werden.
Erläuterung
n>>=1
.c+=n&1?-1:1
Zählt die offenen Klammern)
.n&c>=0
stoppt, wenn nur führende Nullen übrig bleiben oder Klammern mehr schließen als öffnen.quelle
Haskell,
4946 BytesAnwendungsbeispiel:
f 13
->False
.Ich verfolge die Verschachtelungsebene
l
wie viele andere Antworten. Der "ausgeglichene" Fall wird jedoch durch dargestellt1
, so dass der "mehr-)
als-(
" Fall vorliegt0
.PS: Die Anpassung der Verschachtelungsebene wurde
l+(-1)^n
in der Antwort von xnor gefunden .quelle
signum
scheint zu kompliziert, wie wäre es einfach_#0=1<0
?l>0
stattl==1
?l==1
ausbalanciert. Ist diesl>1
der Fall, sind die Klammern nicht ausgeglichen.Python 2,
6057565553525049 BytesVielen Dank an xnor für das Speichern von zwei Bytes und feersum für die Erhöhung der letzten Byteanzahl auf 49!
Erläuterung
Die eingegebene Nummer
n
wird von ihrem niedrigstwertigen Bit verarbeitet.i
ist ein Zähler, der die Anzahl der Nullen und Einsen verfolgt. Beachten Sie, dass es1
zum Speichern eines Bytes initialisiert ist . Die Schleife wird abgebrochen, bevorn
0 erreicht wird, wenn die Anzahl der Einsen die Anzahl der Nullen überschreitet (i<=0
).Für das Ausbalancieren der Klammern sind zwei Bedingungen erforderlich:
i==1
)n==0
). Edit: Ich habe festgestellt, dass diese Bedingung nicht notwendig ist, dai
sie nicht positiv sein muss, wennn!=0
die vorherige Bedingung ausreicht.quelle
i
undn
nichtnegativ sind, danni==n==0
isti+n==0
.i
kann negativ sein, wenn die Schleife vorzeitig abgebrochen wird.i|n==0
sollte das immer funktionieren.while i*n
sollte funktionierenJavaScript ES5,
11887858277 BytesInteressante Technik meiner Meinung nach. Minus verdammt viel, dank @ETHproductions und @NotthatCharles
JavaScript ES6,
77575654 Bytes-21 Bytes zu ETHproductions.
quelle
function p(x){x=x.toString(2);r=/10/;while(x.search(r)>=0){x=x.replace(r,"")}return!x}
x=>([...x=x.toString(2)].map(_=>x=x.replace(/10/,"")),!x)
Der Trick besteht darin, die while-Schleife in eine zu verschieben.map
, da ein Eingang nie mehr Zehner als seine Länge enthält.map
.x=>[...x=x.toString(2)].map(_=>x=x.replace(/10/,""))&&!x
IDK, wenn es aber kürzer werden kann.D,
209170 BytesDies macht genau das, was es tun soll, ohne irgendwelche Zusätze oder Vorteile.
quelle
C 67 Bytes
Ziemlich genau ein Port meines Python-Beitrags.
quelle
Prolog, 147 Bytes
Wie es funktioniert
Konvertiert die Dezimalzahl N in ihre binäre Darstellung als Liste (umgekehrt). Bedeutung:
Dann:
Rekurs über Liste [H | T], wobei N erhöht wird, wenn das Kopfelement 0 ist, andernfalls wird es verringert.
Wenn N zu irgendeinem Zeitpunkt negativ wird oder wenn N am Ende nicht 0 ist, wird false zurückgegeben, andernfalls true.
Der Einschnitt
Gibt es eine Möglichkeit, das Backtracking zu verhindern und nicht-binäre Lösungen für das
Testen von b (N, [N]) zu finden ?
Probieren Sie es hier online aus.
Führen Sie die folgende Abfrage aus:
quelle
PowerShell, 106 Bytes
Ich bin mir sicher, dass ich keine Wettbewerbe mit kürzester Dauer gewinnen werde. Aber hey, zumindest schlägt es Java?
Verwendet den sehr langen .NET-Aufruf
[convert]::ToString($a,2)
, um unsere Eingabenummer in eine Zeichenfolge zu konvertieren, die die Binärziffern darstellt. Wir durchlaufen diese Zeichenfolge dann mit for-loop1..$b.length|%{..}
. In jeder Schleife erhöhen wir unseren Zähler , wenn unsere Ziffer a ist1
(ausgewertet mit,%2
anstatt-eq1
ein paar Bytes zu speichern). sonst dekrementieren wir es. Wenn wir jemals negativ werden, bedeutet dies, dass wir mehr)
als bisher(
angetroffen haben, also geben wir0
und ausexit
. Sobald wir die Schleife durchlaufen haben,$c
ist entweder0
oder eine Zahl>0
, also nehmen wir das logische Nicht!
davon, was ausgegeben wird.Dies hat die Eigenheit, auszugeben,
0
wenn die Parens nicht übereinstimmen, weil wir mehr haben)
, aber auszugeben,False
wenn die Parens nicht übereinstimmen, weil wir mehr haben(
. Im Wesentlichen funktional äquivalente falsche Aussagen, nur interessant. Wenn alle Parens übereinstimmen, wird ausgegebenTrue
.quelle
GNU Sed (mit eval extension), 27
Sed hat nicht wirklich eine definierte Vorstellung von Wahrheit und Falschheit, daher behaupte ich hier, dass die leere Zeichenfolge Wahrheit bedeutet und alle anderen Zeichenfolgen Falschheit bedeuten.
Wenn dies nicht akzeptabel ist, können wir Folgendes tun:
GNU Sed (mit eval extension), 44
Dies gibt 1 für wahr und 0 sonst.
quelle
𝔼𝕊𝕄𝕚𝕟 (ESMin), 21 Zeichen / 43 Byte
Try it here (Firefox only).
Beachten Sie, dass dies Variablen verwendet, die für Zahlen vordefiniert sind (insbesondere 2 und 0). Es gibt vordefinierte Zahlenvariablen von 0 bis 256.
19 Zeichen / 40 Byte, nicht wettbewerbsfähig
Try it here (Firefox only).
Beschlossen, implizite Ausgabe zu implementieren ... Vorherige Ausgabeformulare werden jedoch weiterhin unterstützt, sodass Sie mehrere Ausgabeoptionen erhalten!
quelle
Java,
129131 BytesKann wahrscheinlich gekürzt werden. Erklärung zu kommen. Danke an Geobits für 4 Bytes!
quelle
int k=0;
mitint j=0;
?int k=0,j=0;for(...
Dann können Sie diechar[]
Deklaration in den Schleifeninitialisierer einfügen, um auch ein Semikolon zu speichern.C ++, 61 Bytes
Ich denke, die aktuelle C ++ - Antwort ist falsch: Sie gibt einen Wahrheitswert für alle geraden Zahlen zurück, z. B. 4. Haftungsausschluss: Ich konnte den genannten Compiler nicht verwenden, also habe ich g ++ 4.8.4 verwendet. Das Problem liegt in der Verwendung des binären UND-Operators anstelle des logischen UND, das zum vorzeitigen Aufbrechen verwendet wird, wenn die Anzahl der schließenden Klammern die Anzahl der öffnenden Klammern überschreitet. Dieser Ansatz könnte funktionieren, wenn
true
als ein Wort mit einem alles wahren Bitmuster dargestellt wird. Auf meinem System und wahrscheinlich auf den meisten anderen Systementrue
ist dies äquivalent zu1
; nur ein bisschen ist wahr. Auchn/=2
ist kürzer alsn>>=1
. Hier ist eine verbesserte Version als Funktion:quelle
𝔼𝕊𝕄𝕚𝕟 (sehr nicht konkurrierend), 6 Zeichen / 8 Byte
Try it here (Firefox only).
Ich habe mich entschlossen, diese Herausforderung nach einer sehr, sehr langen Zeit erneut anzunehmen. 𝔼𝕊𝕄𝕚𝕟 ist so viel besser geworden.
Der Grund, warum dies eine separate Antwort ist, ist, dass die beiden Versionen fast völlig unterschiedlich sind.
Erläuterung
Konvertiert Eingaben in Binärdaten, ersetzt rekursiv Instanzen von 10 und prüft dann, ob das Ergebnis eine leere Zeichenfolge ist.
quelle
C # 98 Bytes
offen für Vorschläge. Ich mag diese Herausforderung, obwohl sie altmodisch ist
quelle