Rückwärts und quadratisch

19

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.

orlp
quelle
6
So nah dran
Conor O'Brien
1
Wenn der Code eine Methode aufruft, die eine Zeichenfolge ergibt, die die Bits darstellt, ist diese für den Bonus berechtigt?
Brad Gilbert b2gills
2
@ BradGilbertb2gills Nr.
Orlp
Ich nehme an, dass die Verwendung von Mathematik zum Extrahieren der Bits auch als binäre Konvertierung zählt.
Lirtosiast
2
Relevant und relevant
Mego

Antworten:

5

Par , 5 Bytes

✶Σ⌐Σ²

Das ist read-binary-reverse-binary-square.

Lynn
quelle
Ich zähle 12
Conor O'Brien
@ CᴏɴᴏʀO'Bʀɪᴇɴ Dieser Bytezähler geht von UTF-8 aus. Ich glaube, Mauris verwendet eine Codierung, die nicht UTF-8 ist, um seine Bytes zu zählen, aber er hat diese Codierung nicht angegeben.
Orlp
Par verwendet eine eigene seltsame Codierung. Seine kanonische Darstellung ist eine bestimmte Teilmenge von <256 Unicode-Zeichen. Ich bin mir nicht sicher, ob es einen Namen hat. Ich sollte warten, bis @Ypnypn hereinkommt.
Lynn
Oh, ich verstehe. @orlp
Conor O'Brien
Möglicherweise hat es ein eigenes SBCS?
HyperNeutrino
19

Mathematica, 42 21 Bytes

Dank an Alephalpha für die Halbierung der Punktzahl.

#~IntegerReverse~2^2&

Der eigentliche Grund, warum ich dies in Mathematica getan habe, war, dass ich mir eine Handlung ansehen wollte ... es sieht sicher lustig aus:

enter image description here

Martin Ender
quelle
11
Aber ich mag die Partitur! XD
Conor O'Brien
1
Warum hat diese Antwort mehr Stimmen als die Antwort mit den wenigsten Bytes? o_O
Seadrus
27
@Seadrus Du weißt was sie sagen. Ein Bild ist 7 Bytes wert.
Martin Ender
5
So ist Ihre Punktzahl 42 + 7 = 49 Bytes: P
Seadrus
3
Entschuldigung, @ CᴏɴᴏʀO'Bʀɪᴇɴ.
Martin Ender
8

Minkolang 0,14 , 43 Bytes

Vielen Dank an Mego für die Inspiration.

n1{d1`,2$3*&$z2zd2%-2l$Md1%-;z2%*z2:{+}2;N.

Testen Sie den Code hier und überprüfen Sie alle Testfälle hier .

Erläuterung

Dies verwendet diese Wiederholungsrelation:

a(0) = 0
a(1) = 1
a(2n) = a(n)
a(2n+1) = a(n) + 2^(floor(log_2(n))+1)

Wenn nist der Eingang, dann a(n)ist die resultierende Zahl, nachdem seine Binärsequenz gekippt worden ist. 0 und 1 sind offensichtlich. Man a(2n) = a(n)bedenke nämlich, dass x0(wo xeine beliebige Folge von Binärziffern ist) gespiegelt ist 0x, was dasselbe ist wie x. Denn a(2n+1)die Argumentation ist etwas komplizierter. x1gespiegelt ist 1x, was x + 2^kfür manche gleich ist k. Dies kist eine mehr als die Anzahl der Stellen in x, was ist floor(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:

a(0) = 0
a(1) = 1
a(n) = a(n//2) + (n%2) * 2^(floor(log_2(n - n%2)))

Als Mego und ich arbeitete, im Chat aus floor(n/2) = (n - n%2)/2. So ist log_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.

n                                              Take number from input
 1{                                            Start recursion that takes only one element
   d1`,                                        1 if top of stack 0 or 1, 0 otherwise
       2$3*                                    26
           &                                   Jump if top of stack is not zero
            $z                                 Store top of stack in register (z)

               zd2%-                           n - n%2
                    2l$M                       log_2(n - n%2)
                        d1%-                   floor(log_2(n - n%2))
              2             ;                  2^floor(log_2(n - n%2))
                             z2%               n%2
                                *              Multiply
                                 z2:           n//2
                                    {          Recurse
                                     +         Add
                                      }        Return
                                       2;N.    Square it, output as number, and stop.
El'endia Starman
quelle
1
Ich denke, die Wiederholung ist nur eine Neuformulierung des Iterierens über die einzelnen Bits.
Martin Ender
3
Ich fürchte, das zählt nicht. Wann immer Sie 2nund 2n+1in einer wiederkehrenden Beziehung sehen, sollten Sie sofort denken, dass es sich um eine Schleife über Bits handelt.
Orlp
1
@orlp: Nun, das ist ein Mist. Ich bin jetzt ein bisschen davon überzeugt, dass Ihr Bonus unmöglich ist.
El'endia Starman
@ El'endiaStarman Ich denke, ich habe es fast geschafft.
Conor O'Brien
8

Japt , 29 28 11 7 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 .

¢w n2 ²

Probieren Sie es online!

Erläuterung:

  1. ¢ist die Abkürzung zu Us2, die zu kompiliert U.s(2). Uwird eingegeben (implizit), .s(2)von einer Zahl aufgerufen , aufgerufen .toString(2)(in binär umgewandelt, als Zeichenfolge analysiert).

  2. wKompiliert nach .w(), was den String ( .split('').reverse().join('')) umkehrt .

  3. n2funktioniert wie parseInt(<number>,2), dh konvertiert binär in dezimal.

  4. ²ruft auf Math.pow(<number>,2), dh quadriert die Zahl.

nicael
quelle
1
Es gibt eine String-Funktion für Number n, die Sie verwenden können Us2 a w a n2 p2. Gute Arbeit!
ETHproductions
1
Funktioniert auch wauf Strings genauso wie auf Arrays, so dass Sie die beiden as nicht brauchen :)
ETHproductions
1
Eine letzte Sache: Us2 = ¢, und p2= ², um es auf 7 Bytes zu ¢w n2 ²
reduzieren
3
Der Online-Interpreter akzeptiert jetzt IEC_8859-1-codierte Dateien. (Obwohl ich nicht sicher bin, wie ich UTF-8 und UTF-16 auch machen soll ...)
ETHproductions
2
@ETHproductions - jetzt kann ich +1 dazu :)
Digital Trauma
5

Python, 32 Bytes

lambda x:int(bin(x)[:1:-1],2)**2

Probieren Sie es online aus.

Der Code ist ziemlich einfach: bin(6)Zum Beispiel gibt 0b110die binäre Darstellung von 6 [:1:-1]den String um und entfernt ihn 0b. intkonvertiert die Zeichenfolge in eine Ganzzahl aus einer Binärzahl und **2quadriert sie.

NinjaBearMonkey
quelle
5

Jolf , 7 Bytes

Lass es einfach laufen. Die Eingabe auf der Seite funktioniert nicht.

^C_Bj22

Erläuterung

^C_Bj22
    j   numeric input
   B    convert to binary (str)
  _     reverse
 C   2  parse as binary integer to base 10
^     2 square
        implicit output

Ich habe den QBefehl hinzugefügt , der diese 6 Bytes ergibt:QC_Bj2

Conor O'Brien
quelle
4
Durchgestrichene 7 sieht immer noch aus wie eine 7.
ein Spaghetto
2
@quartata Nicht so schlimm wie ein durchgestrichener 4.
orlp
4

Im Ernst , 8 7 Bytes

2;,¡R¿ª

Herausforderungen wie diese sind perfekt für Ernst :)

Probieren Sie es online aus

Erläuterung:

2;,¡    get a string representing the (decimal) input in binary, with a 2 on the bottom of the stack
R      reverse the string
¿    convert binary string to decimal int (using that extra 2 from earlier)
ª      square it
Mego
quelle
Netter Job passend zu Jolf!
Conor O'Brien
+1, wenn Ihr Dolmetscher die CP437-Codierung (oder zumindest die hexadezimale Darstellung davon) akzeptiert
Digitales Trauma
4

J 10 9 Bytes

2^~|.&.#:

Dies ist ein stillschweigendes, monadisches Verb. Probieren Sie es online!

Vielen Dank an @randomra für das Golfen ab 1 Byte!

Wie es funktioniert

2^~|.&.#:  Right argument: y

       #:  Convert y to binary.
   |.      Reverse the digits.
     &.    Dual; apply the inverse of #:, i.e., convert back to integer.
 ^~        Apply power (^) with reversed argument order (~)...
2          to 2 and the previous result.
Dennis
quelle
Der Link funktioniert nicht. Auf einer Google-Seite mit der Meldung "Die angeforderte URL /host/0B3cbLoy-_9Dbb0NaSk9MRGE5UEU/index.html wurde auf diesem Server nicht gefunden. Das ist alles, was wir wissen." Wird ein 404-Fehler angezeigt.
Bijan
2

JavaScript, 64 63 56 53 Bytes

n=>parseInt([...n.toString(2)].reverse().join``,2)**2

Mir ist klar, dass ich extra lang bin, aber hey, ich kann es schaffen: P

Demo

nicael
quelle
Stattdessen parseInt(können Sie+("0b"+
Downgoat
@ Downgoat hm, es scheint nicht die richtigen Ergebnisse zu geben.
Nicoleel
[...n.toString(2)]und.join``
Conor O'Brien
1
Noch kürzer w / ES7 (49 Byte): n=>+("0b"+[...n.toString(2)].reverse().join``)**2. Funktioniert noch nicht in allen Browsern
Downgoat
1
@ CᴏɴᴏʀO'Bʀɪᴇɴ Danke, das spart ein paar Bytes.
nicael
2

Perl 6, 21 bytes

{:2(.base(2).flip)²}

Example usage:

say {:2(.base(2).flip)²}(26); # 121

say (0..24).map: {:2(.base(2).flip)²};
# (0 1 1 9 1 25 9 49 1 81 25 169 9 121 49 225 1 289 81 625 25 441 169 841 9)

my &code = {:2(.base(2).flip)²};
say code 3; # 9

say chars code 10¹⁰⁰; # 140
Brad Gilbert b2gills
quelle
2

PHP, 45 bytes

echo pow(bindec(strrev(decbin($argv[1]))),2);
undefined
quelle
2

Shell, 25

dc -e2o?p|rev|dc -e2i?d*p

Input/output via STDIN/STDOUT:

$ echo 26|dc -e2o?p|rev|dc -e2i?d*p
121
$ 
Digital Trauma
quelle
1

Pyth - 9 bytes

Straightforward conversions. I actually assigned 2 to a var which is pretty weird.

^i_jQK2KK

Test Suite.

Maltysen
quelle
1

Pyth, 9 bytes

^i_.BQ2 2

This is a very simple pyth based answer similar to the Python one

TanMath
quelle
1

𝔼𝕊𝕄𝕚𝕟, 12 chars / 21 bytes

⦅`ᶀ`+ᴙ(ïß2)²

Try it here (Firefox only).

Noncompetitive answer, 9 chars / 18 bytes

⦅Յ+ᴙ(ïⓑ)²

Try it here (Firefox only).

Mama Fun Roll
quelle
1
Via this byte counter, gives 15 bytes (uses another encoding).
nicael
I grade using UTF-8 (until I can get Mines encoding to work).
Mama Fun Roll
The... name of the language... is boxes?
corsiKa
It's ESMin in doublestruck. The Unicode chars aren't fully supported.
Mama Fun Roll
1

Ruby, 35 bytes

->(x){x.to_s(2).reverse.to_i(2)**2}
Harsh Gupta
quelle
1

TI-Basic (TI-84 Plus CE), 42 bytes

Prompt X
0→S
While X
2S→S
If X/2≠int(X/2
S+1→S
End
S2
pizzapants184
quelle