Wenn eine ganze Zahl N gegeben ist, führen Sie die folgenden Schritte aus: (am Beispiel von 9).
- Eingang N erhalten. (
9
) - Konvertiere N von base10 nach base2. (
1001
) - Erhöhen Sie jedes Bit um 1. (
2112
) - Behandle das Ergebnis als base3 und konvertiere es zurück in base10. (
68
) - Ergebnis zurückgeben / ausgeben.
Eingang
Kann in jedem vernünftigen Zahlenformat empfangen werden.
Sie müssen nur Fälle behandeln, in denen N> 0 ist.
Ausgabe
Entweder als Zahl oder als Zeichenfolge zurückgeben oder auf drucken stdout
.
Regeln
- Dies ist Code-Golf , der kürzeste Code in Bytes gewinnt.
- Standardlücken sind verboten.
Testfälle
1 -> 2
2 -> 7
5 -> 23
9 -> 68
10 -> 70
20 -> 211
1235 -> 150623
93825 -> 114252161
code-golf
number
base-conversion
Ian H.
quelle
quelle
+n%2+1
Addiert das am weitesten rechts stehende Binärbit plus 1 zum Rückgabewert,n/2
verschiebt esn
nach rechts um 1 Binärbit,3*f(n/2)
addiert rekursiv das Dreifache dieser Berechnung für diese nach rechts verschobenen Bits undn and
beendet die Rekursion, wennn
0JavaScript (Node.js) , 23 Byte
Probieren Sie es online!
quelle
x>>1
ist das gleiche wiex/2
nicht?Infinity
in JS .. Probiere es online aus. (Vielleicht möchten Sie Ihrer Antwort einen TIO-Link hinzufügen, I4m2 )1>>1=0
while1/2=0.5
n/2
das so ist, und der Grund, warum ich es hier vorgeschlagen habe.Java (JDK 10) , 44 Byte
Probieren Sie es online!
quelle
-~
hilft?long
? :) Und hier dachte ich, mein Sequenzansatz wäre klug. Du hast ihn in weniger als 5 Minuten aus dem ParkGelee , 4 Bytes
Probieren Sie es online!
quelle
J , 7 Bytes
Probieren Sie es online!
Danke Galen Ivanov für -4 Bytes! Ich muss wirklich meine J-Golf-Fähigkeiten verbessern ...
quelle
3#.1+#:
TIO: 0
.R ,
5543 BytesProbieren Sie es online!
Verwendet den Standard-Basiskonvertierungstrick in R-Schritten und verwendet dann ein Skalarprodukt mit Potenzen von
3
, um zurück in eine Ganzzahl zu konvertieren.Vielen Dank an @ user2390246 für das Löschen von 12 Bytes!
quelle
05AB1E , 5 Bytes
Probieren Sie es online!
05AB1E , 5 Bytes
Probieren Sie es online!
quelle
S
funktioniert auch für€
.Java 10,
8152 Bytes (Basisumwandlung)Probieren Sie es online aus.
-29 Bytes dank @Holger .
Erläuterung:
Java 10,
171167151150149 Bytes (Sequenz)-16 Bytes dank @ musicman523 , wechsel
(int)Math.pow(2,t)
zu(1<<t)
.-1 Byte dank @Holger , wechselt
(int)(Math.log(n)/Math.log(2))
zu31-n.numberOfLeadingZeros(n)
.Probieren Sie es online aus.
Erläuterung:
Wenn wir uns die Sequenz ansehen:
Wir können mehrere Untersequenzen sehen:
Die Reihenfolge, in der gefragt wird, lautet also:
Ich finde es nicht gut, Muster zu finden, also bin ich stolz auf das, was ich oben gefunden habe. Allerdings fand @ user202729 innerhalb weniger Minuten einen besseren und kürzeren Ansatz in Java .
quelle
n.toString(n,2).getBytes()
... Ich denke, die manuelle Konvertierung kann kürzer sein.long
und nichtint
?(int)Math.pow(2,t)
für1<<t
...31-Integer.numberOfLeadingZeros(n)
anstatt verwenden(int)(Math.log(n)/Math.log(2))
, aber es ist nicht kürzer. Es sei denn, Sie verwendenimport static
in der Kopfzeile, was die Regeln zu weit strecken könnte.n -> n.toString(n,2).chars().reduce(0,(r,c)->r*3+c-47)
APL (Dyalog) , 10 Bytes
Probieren Sie es online!
quelle
Brachylog , 7 Bytes
Probieren Sie es online!
Erläuterung
Nicht dass du wirklich einen brauchst, aber ...
quelle
Ruby , 27 Bytes
Probieren Sie es online!
quelle
Python 2 ,
56-55BytesProbieren Sie es online!
quelle
Attache , 19 Bytes
Probieren Sie es online!
Dies ist eine Komposition aus drei Funktionen:
FromBase&3
1&`+
Bin
Dieser konvertiert zuerst nach binary (
Bin
), inkrementiert es (1&`+
) und konvertiert dann nach ternary (FromBase&3
).Alternativen
Nicht punktfrei, 21 Bytes:
{FromBase[Bin!_+1,3]}
Ohne Builtins, 57 Bytes:
Sum@{_*3^(#_-Iota!_-1)}@{If[_>0,$[_/2|Floor]'(1+_%2),[]]}
quelle
Retina 0,8,2 , 36 Bytes
Probieren Sie es online! Erläuterung:
Konvertiert von dezimal zu unär.
Wiederholt divmod durch 2 und addiere 1 zum Ergebnis des Modulos.
Addiere auch 1 zur ersten Ziffer.
Konvertiert von unärkodierter Basis 3 nach unärkodiert.
In Dezimalzahl konvertieren.
quelle
Japt , 6 Bytes
Nimmt Eingaben als Zahl und gibt eine Zahl aus.
Probieren Sie es online!
quelle
MATL ,
1276 BytesProbieren Sie es online!
Gespeichert 5 Bytes dank Giuseppe und einen anderen dank Luis Mendo.
Alte 7-Byte-Antwort:
Probieren Sie es online!
Erläuterung:
Altes für 12 Bytes:
Probieren Sie es online!
Oh mein Gott, das war chaotisch ... Also ist dies: `BQ3GBn: q ^! Y *.
Erläuterung:
quelle
C # (Visual C # -Compiler) , 128 Byte
Probieren Sie es online!
Ich zähle,
System
weil ichConvert
und benutzeMath
.quelle
z
Variable loswerden . Auch im Ausdruck Körper könnten Sie loswerden der{
,}
undreturn
Aussagen. So etwas in der Artn=>Convert.ToString(n,2).Reverse().Select((x,i)=>(x-47)*Math.Pow(3,i)).Sum();
Python 2 ,
5654 BytesProbieren Sie es online!
quelle
C
3227 BytesBasierend auf der Java- Antwort von user202729 . Probieren Sie es hier online aus . Vielen Dank an Kevin Cruijssen für das Golfen mit 5 Bytes.
Ungolfed-Version:
quelle
return
mitx=
und Umkehr des ternären so das!
ist nicht mehr notwendig:n(x){x=x?x%2+1+3*n(x/2):0;}
Schale , 5 Bytes
Probieren Sie es online!
Erläuterung
quelle
Oktave mit der Kommunikations-Toolbox,
3332 BytesProbieren Sie es online!
Konvertiert die Eingabe mit
de2bi
und inkrementiert alle Zahlen in einen binären Vektor . Wird die Matrixmultiplikation mit einem vertikalen Vektor von 3 auf die entsprechenden Potenzen angehoben:1, 3, 9, ...
und damit die Summe ohne expliziten Aufruf vonsum
.quelle
@(x)base2dec(de2bi(x)+49,3)
27 machen (eine seltene Gelegenheit, in der MATLAB milder ist als Octave)PHP,
8464 BytesProbieren Sie es online!
ORIGINAL Code
Probieren Sie es online!
Dank Cristoph , weniger Bytes, wenn mit PHP-R ausgeführt
Erläuterung
quelle
strtr
<?="Will do!!"
CJam , 8 Bytes
Probieren Sie es online!
Erläuterung
quelle
:)
..Leerzeichen , 117 Bytes
Buchstaben
S
(Leerzeichen),T
(Tabulator) und (Zeilenvorschub) werdenN
nur als Hervorhebungen hinzugefügt.[..._some_action]
nur als Erklärung hinzugefügt.Probieren Sie es online aus (nur mit Leerzeichen, Tabulatoren und Zeilenumbrüchen).
Erklärung im Pseudocode:
Ich habe zuerst die rekursive Funktion
int f(int n){return n<1?0:n%2+1+3*f(n/2);}
in ihre iterative Form (in Pseudocode) konvertiert :Und dann habe ich diesen iterativen Ansatz in der stapelbasierten Sprache Whitespace implementiert und dabei den Standardstapel verwendet.
Beispiel läuft:
Eingang:
1
Probieren Sie es online aus (nur mit Leerzeichen, Tabulatoren und Zeilenumbrüchen).
Stopps mit Fehler: Exit nicht definiert.
Eingang:
4
Probieren Sie es online aus (nur mit Leerzeichen, Tabulatoren und Zeilenumbrüchen).
Stopps mit Fehler: Exit nicht definiert.
quelle
n < 1
Scheck loswerden können, indem Sie Werte drücken, bis n 0 ist, und sie dann platzen, bis Sie Ihren Grenzwert (0) erreichen. Die Stapeltiefe muss nicht explizit gespeichert werden, und es sollte nicht einmal ein Tausch erforderlich sein (wenn Sie die oberen beiden Werte wie inn < 1
(odern == 0
) IS - Werte drücken , bisn
0 .. Oder bin ich etwas falsch interpretiert hier ..: S " Die Stapeltiefe muss nicht explizit gespeichert werden " In Java, sonst kann ich das Array nicht erstellen. Ich hättejava.util.Stack
stattdessen a verwenden können, aber ich habe nur ein Array verwendet, um es weniger ausführlich zu gestalten. In Whitespace hat der Stapel eine undefinierte Größe.Brain-Flak , 74 Bytes
Probieren Sie es online!
"Lesbare" Version
quelle
Addiere ++ , 14 Bytes
Probieren Sie es online!
quelle
Japt , 7 Bytes
Probieren Sie es hier aus
quelle
Haskell , 32 Bytes
Probieren Sie es online!
quelle
Perl 5 , 36 Bytes
Probieren Sie es online!
quelle
Pyth, 8
Wie man den Raum beseitigt und das
Q
implizite macht?Pyth online .
quelle
Q
implizite macht? Ich glaube nicht, dass du kannst.