Gestern habe ich beim Spielen mit meinem Kind die Nummer in seiner Spielzeugeisenbahn bemerkt:
Wir haben also , die sich in oder
Einfache Herausforderung: Geben Sie bei einer nicht negativen Zahl als Eingabe konsistente Wahrheits- und False-Werte zurück, die angeben, ob die Zeichenfolgendarstellung der Zahl (in Basis 10 und ohne führende Nullen) in Zahlen mit Zweierpotenzen aufgeteilt werden kann .
Beispiele:
4281 truthy (4-2-8-1)
164 truthy (16-4 or 1-64)
8192 truthy (the number itself is a power of 2)
81024 truthy (8-1024 or 8-1-02-4)
101 truthy (1-01)
0 falsey (0 cannot be represented as 2^x for any x)
1 truthy
3 falsey
234789 falsey
256323 falsey (we have 256 and 32 but then 3)
8132 truthy (8-1-32)
Tests for very large numbers (not really necessary to be handled by your code):
81024256641116 truthy (8-1024-256-64-1-1-16)
64512819237913 falsey
Das ist Code-Golf , also kann der kürzeste Code für jede Sprache gewinnen!
code-golf
string
number
decision-problem
Charlie
quelle
quelle
int
(4 Bytes) zu beschränken, aber eigentlich macht es mir nichts aus, wenn Ihr Code keine sehr großen Zahlen unterstützt. Geben Sie in Ihrer Antwort einfach die Einschränkungen Ihres Codes an.101
(falsch wegen der 0) ... oder sollte das noch stimmen (1 - 01
)?101
Fall mit den aktuellen Antworten getestet und sie alle kehren zurücktrue
, weil es in1-01
zwei Potenzen aufgeteilt werden kann. Daher halte ich diesen Fall für wahr.log2(n)
nach dem Komma keine Dezimalstellen stehen. 2) Überprüfen Sie, obn AND (n-1) == 0
. 3) Erstellen Sie eine Liste mit Quadraten und prüfen Sie, ob sien
in dieser Liste enthalten sind.Antworten:
05AB1E ,
98 Bytes-1 Byte danke an @Emigna mit
Z
(max) für die Liste der Nullen und Einsen, um einenany
Befehl für1
(truthy) nachzuahmen.Probieren Sie es online aus oder überprüfen Sie alle Testfälle . (HINWEIS: Im
т
Header werden100
nur die ersten 100 Potenzen von 2 Zahlen anstelle der ersten eingegebenen Potenz von 2 Zahlen angezeigt. Dies funktioniert auch mit der eingegebenen Potenz von 2, ist jedoch ziemlich ineffizient und kann zu Problemen führen Timeout bei TIO, wenn der Eingang groß genug ist.)Erläuterung:
quelle
.œ.²1%O0å
(auch 9 Bytes). Meins schlug0
jedoch fehl ..²1%O0
ist auch ziemlich schlau. Ich habe darüber nachgedacht,log2
dies zu verwenden.²DïQ
, aber es würde eine Karte erfordern, um dies für jede Zahl zu tun, und es funktionierte in der Tat nicht für Edge-Case0
.JavaScript (Node.js) , 54 Byte
Probieren Sie es online!
quelle
JavaScript (Node.js) ,
696458 ByteProbieren Sie es online!
Eingabe als Nummer. Der logische Teil ist ziemlich verworren, also keine Ahnung, wie man ihn entwirrt und loswird
q
.-11 Bytes durch Golfen des Power-of-2-Checks.
quelle
JavaScript (Node.js) ,
75 bis69 Byte-6 Bytes danke @Arnauld. Höchstens 32-Bit-Unterstützung
Probieren Sie es online!
Eingabe als String.
quelle
Gelee , 9 Bytes
Schauen Sie sich die Testsuite an!
Alternative
Funktioniert aufgrund von Genauigkeitsproblemen nicht für große Testfälle.
Schauen Sie sich die Testsuite an!
Wie?
Programm I
Programm II
quelle
Python 2 ,
72-70BytesProbieren Sie es online!
quelle
JavaScript, 59 Bytes
Probieren Sie es online!
Erstellt einen regulären Ausdruck
/^(1|0*2|0*4|0*8|0*16|0*32|…|0*1)+$/
mit Potenzen von 2 und testet ihns
.Funktioniert natürlich nur bis zur Genauigkeit von JavaScript-Zahlen: Irgendwann sehen die Begriffe in der Regex wie
1.2345678e30
(oderInf
) aus. Aber da Potenzen von 2 im Gleitkomma leicht genau darzustellen sind, werden sie niemals falsche ganze Zahlen sein, was disqualifizierender wäre, denke ich.@tsh sparte 14 Bytes. Neato!
quelle
Python 2 , 85 Bytes
Probieren Sie es online!
quelle
Perl 6 ,
282423 Bytes-4 Bytes dank Jo King
Probieren Sie es online!
Behandelt Kräfte bis zu 2 31 .
quelle
0*
aus dem interpolierten TeilAPL (NARS), 154 Zeichen, 308 Byte
Die Funktion für die Übung ist h. Der Algorithmus scheint nicht exponentiell oder faktoriell zu sein ...
quelle
Python 2 , 57 Bytes
Probieren Sie es online!
quelle
Python 2 , 86 Bytes
Probieren Sie es online!
quelle
Ruby , 55 Bytes
Probieren Sie es online!
Ausgabe ist
0
wenn wahr undnil
wenn falsch.quelle
Ruby , 49 Bytes
Probieren Sie es online!
Funktioniert nur in der Theorie. Dauert ewig für große Werte von
n
quelle
PHP, 101 Bytes
Kann nicht unter 100 kommen; aber ich könnte es auf 100 bringen, wenn
101
es ein falscher Fall wäre.Variationen:
PHP 5 oder älter, 95 Bytes
quelle
Rot ,
212211 BytesProbieren Sie es online!
Noch eine lange Einreichung, aber ich bin nicht völlig unzufrieden, da es keine eingebaute Funktion gibt, um alle Teilzeichenfolgen in Rot zu finden.
Besser lesbar:
quelle
Axiom, 198 Bytes
ungolf und test
quelle
Japt
-!
, 12 BytesÜbernimmt die Eingabe als Zeichenfolge.
Versuch es
quelle
0
Fall gibt austrue
und damit Fälle wie1010
auch austrue
.C # 157 Bytes
Sie können es online ausprobieren
quelle
APL (NARS), 70 Zeichen, 140 Byte
Prüfung:
Ich versuche nicht, andere größere Zahlen zu machen ... Ich muss beachten, dass P keine normale Partition ist, sondern eine Partition, in der alle Elemente Teilmengen sind, deren Mitglieder beispielsweise alle aufeinanderfolgend sind
Beachten Sie, dass das Element ((ac) (b)) oder besser ,, ¨ ('ac') 'b' fehlt
quelle
POSIX ERE, 91 Byte
Dies ist völlig betrügerisch, basierend auf den großen Textzahlen (die von Ihrem Code nicht wirklich verarbeitet werden müssen) in der Frage. Es behandelt alle Werte im Größenbereich der Beispiele. Kann natürlich auf Kosten der Größe auf den gesamten Bereich von 32- oder 64-Bit-Integer-Typen erweitert werden. Ich habe es hauptsächlich als Demonstration geschrieben, wie das Problem natürlich zum Werkzeug passt. Eine unterhaltsame Übung wäre, sie als Programm umzuschreiben, das die ERE für einen beliebigen Bereich generiert und dann mit dieser übereinstimmt.
quelle
C (gcc) ,
-DA=asprintf(&c,
+ 108 = 124 BytesProbieren Sie es online!
Dadurch wird ein regulärer Ausdruck der Potenzen von 2 bis 2 ** 32 erstellt und dann die Eingabezeichenfolge mit dieser verglichen.
quelle
Powershell, 56 Bytes
Testskript:
Ausgabe:
Erläuterung:
Erstellt einen regulären Ausdruck
^(0*1|0*2|0*4|0*8|0*16|0*32|…)+$
mit Potenzen von 2 und testet ihn anhand von Argumenten.quelle
JavaScript (Node.js) , 56 Byte
Probieren Sie es online!
quelle