In dieser Herausforderung berechnen Sie Zahlen aus einer merkwürdigen Folge.
Ihre Eingabe ist eine einzelne dezimale nichtnegative Ganzzahl. Kehren Sie die Bits in dieser Ganzzahl um und quadrieren Sie die Zahl, um die gewünschte Ausgabe zu erhalten.
Beim Umkehren der Bits dürfen Sie keine führenden Nullen in der Eingabe verwenden. Beispielsweise:
26 (base 10) = 11010 (base 2) -> 01011 (base 2) = 11 -> 11*11 = 121
Die ersten 25 Ein- / Ausgänge dieser Sequenz:
0: 0
1: 1
2: 1
3: 9
4: 1
5: 25
6: 9
7: 49
8: 1
9: 81
10: 25
11: 169
12: 9
13: 121
14: 49
15: 225
16: 1
17: 289
18: 81
19: 625
20: 25
21: 441
22: 169
23: 841
24: 9
Ihre Lösung sollte für Ganzzahlen beliebiger Größe funktionieren. Wenn in Ihrer Sprache keine praktische Methode zur Verwendung vorhanden ist, implementieren Sie Ihre Antwort so, als ob dies der Fall wäre. Sie werden dann entschuldigt, wenn Ihre Antwort für große Zahlen bricht. Verwenden Sie jedoch keine Tricks / Grenzen, die nur für eine begrenzte Domäne funktionieren (z. B. eine Nachschlagetabelle).
Ihre Punktzahl ist die Anzahl der Bytes des Quellcodes.
-50% Bonus, wenn Sie die Zahl nie in eine Binärzahl umwandeln. Dies ist nicht auf integrierte Funktionen beschränkt. Wenn Sie die Zahl Bit für Bit durchlaufen (entweder durch Verschieben oder Maskieren oder eine andere Methode), wird dies ebenfalls als Konvertierung gewertet. Ich weiß nicht, ob dies tatsächlich möglich ist, aber es gibt einen Anreiz, ein Muster in der Sequenz zu erkennen.
Kleinste Punktzahl gewinnt.
Antworten:
Par , 5 Bytes
Das ist read-binary-reverse-binary-square.
quelle
Mathematica,
4221 BytesDank an Alephalpha für die Halbierung der Punktzahl.
Der eigentliche Grund, warum ich dies in Mathematica getan habe, war, dass ich mir eine Handlung ansehen wollte ... es sieht sicher lustig aus:
quelle
Minkolang 0,14 , 43 Bytes
Vielen Dank an Mego für die Inspiration.
Testen Sie den Code hier und überprüfen Sie alle Testfälle hier .
Erläuterung
Dies verwendet diese Wiederholungsrelation:
Wenn
n
ist der Eingang, danna(n)
ist die resultierende Zahl, nachdem seine Binärsequenz gekippt worden ist. 0 und 1 sind offensichtlich. Mana(2n) = a(n)
bedenke nämlich, dassx0
(wox
eine beliebige Folge von Binärziffern ist) gespiegelt ist0x
, was dasselbe ist wiex
. Denna(2n+1)
die Argumentation ist etwas komplizierter.x1
gespiegelt ist1x
, wasx + 2^k
für manche gleich istk
. Diesk
ist eine mehr als die Anzahl der Stellen inx
, was istfloor(log_2(n))+1
. Die vollständige Formel folgt, mit der Ausnahme, dass sie ein wenig geändert wurde. Das ist, was ich eigentlich codiere:Als Mego und ich arbeitete, im Chat aus
floor(n/2) = (n - n%2)/2
. So istlog_2(floor(n/2))+1 = log_2(n - n%2)
. Wenn Sie mit multiplizieren, werden(n%2)
sowohl die ungeraden als auch die geraden Teile zu einem Ausdruck zusammengefasst.Schließlich, ohne weitere Umstände, hier der Code, erklärt.
quelle
2n
und2n+1
in einer wiederkehrenden Beziehung sehen, sollten Sie sofort denken, dass es sich um eine Schleife über Bits handelt.Japt ,
2928117 Bytes(Sie können das Programm als 7-Byte-IEC_8859-1-codierte Datei speichern und dann in den Interpreter hochladen .)
Japt ist ein gekürztes JavaScript von ETHproductions .
Probieren Sie es online!
Erläuterung:
¢
ist die Abkürzung zuUs2
, die zu kompiliertU.s(2)
.U
wird eingegeben (implizit),.s(2)
von einer Zahl aufgerufen , aufgerufen.toString(2)
(in binär umgewandelt, als Zeichenfolge analysiert).w
Kompiliert nach.w()
, was den String (.split('').reverse().join('')
) umkehrt .n2
funktioniert wieparseInt(<number>,2)
, dh konvertiert binär in dezimal.²
ruft aufMath.pow(<number>,2)
, dh quadriert die Zahl.quelle
n
, die Sie verwenden könnenUs2 a w a n2 p2
. Gute Arbeit!w
auf Strings genauso wie auf Arrays, so dass Sie die beidena
s nicht brauchen :)Us2
=¢
, undp2
=²
, um es auf 7 Bytes zu¢w n2 ²
Python, 32 Bytes
Probieren Sie es online aus.
Der Code ist ziemlich einfach:
bin(6)
Zum Beispiel gibt0b110
die binäre Darstellung von 6[:1:-1]
den String um und entfernt ihn0b
.int
konvertiert die Zeichenfolge in eine Ganzzahl aus einer Binärzahl und**2
quadriert sie.quelle
Jolf , 7 Bytes
Lass es einfach laufen. Die Eingabe auf der Seite funktioniert nicht.
Erläuterung
Ich habe den
Q
Befehl hinzugefügt , der diese 6 Bytes ergibt:QC_Bj2
quelle
TeaScript , 9 Bytes
11TeaScript ist Javascript zum Golfen
Werde mehr Golf spielen, wenn ich wieder an meinem Computer bin
Probieren Sie es online!
Testen Sie alle
quelle
Im Ernst ,
87 BytesHerausforderungen wie diese sind perfekt für Ernst :)
Probieren Sie es online aus
Erläuterung:
quelle
J
109 BytesDies ist ein stillschweigendes, monadisches Verb. Probieren Sie es online!
Vielen Dank an @randomra für das Golfen ab 1 Byte!
Wie es funktioniert
quelle
CJam, 10 Bytes
Probieren Sie es online aus
quelle
JavaScript,
64635653 BytesMir ist klar, dass ich extra lang bin, aber hey, ich kann es schaffen: P
Demo
quelle
parseInt(
können Sie+("0b"+
[...n.toString(2)]
und.join``
n=>+("0b"+[...n.toString(2)].reverse().join``)**2
. Funktioniert noch nicht in allen BrowsernPerl 6, 21 bytes
Example usage:
quelle
PHP, 45 bytes
quelle
Shell, 25
Input/output via STDIN/STDOUT:
quelle
Pyth - 9 bytes
Straightforward conversions. I actually assigned 2 to a var which is pretty weird.
Test Suite.
quelle
Pyth, 9 bytes
This is a very simple pyth based answer similar to the Python one
quelle
𝔼𝕊𝕄𝕚𝕟, 12 chars / 21 bytes
Try it here (Firefox only).
Noncompetitive answer, 9 chars / 18 bytes
Try it here (Firefox only).
quelle
Ruby, 35 bytes
quelle
TI-Basic (TI-84 Plus CE), 42 bytes
quelle