Wenn eine positive ganze Zahl n gegeben ist, schreibe einen Code, um seine Primfaktorisierung zu nehmen und alle seine Faktoren von 2
durch zu ersetzen 3
.
Beispielsweise
12 = 2 * 2 * 3 -> 3 * 3 * 3 = 27
Dies ist Codegolf, daher besteht das Ziel darin, die Byteanzahl Ihrer Antwort zu minimieren.
Testfälle
1 -> 1
2 -> 3
3 -> 3
4 -> 9
5 -> 5
6 -> 9
7 -> 7
8 -> 27
9 -> 9
10 -> 15
11 -> 11
12 -> 27
13 -> 13
14 -> 21
15 -> 15
16 -> 81
17 -> 17
18 -> 27
19 -> 19
20 -> 45
21 -> 21
22 -> 33
23 -> 23
24 -> 81
25 -> 25
26 -> 39
27 -> 27
28 -> 63
29 -> 29
quelle
Python 2 , 28 Bytes
Probieren Sie es online!
Teilen Sie die Zahl rekursiv durch 2 und multiplizieren Sie das Ergebnis mit 3, solange die Zahl gerade ist. Ungerade Zahlen geben sich selbst zurück.
32 Byte alt:
Probieren Sie es online aus . Hat einen Float-Fehler. Die Konstante ist
log_2(3)-1
.Verwendet
(n&-n)
, um den größten Faktor der Zweierpotenz zu findenn
, zu dem konvertiert wird3**k
,2**k
indem er auf die Potenz von erhöht wirdlog_2(3)-1
.quelle
05AB1E , 4 Bytes
Probieren Sie es online!
Wie es funktioniert
quelle
Haskell,
2423 BytesDie Division durch zwei und multiplizieren mit 3 bis ungerade Trick in Haskell.
Probieren Sie es online!
Alternative mit Lambda anstelle einer Pointfree-Funktion und gleicher Byteanzahl:
Bearbeiten: @ ais523 hat ein Byte in der Originalversion und @ Ørjan Johansen ein Byte in der Alternativversion gespeichert, sodass beide Versionen immer noch die gleiche Länge haben. Vielen Dank!
quelle
odd`until`\x->div(x*3)2
.$
ein Klammerpaar ersetzt wird: Probieren Sie es online aus!()
aus der Lambda-Version zu entfernenJavaScript (ES6), 19 Byte
Während die Eingabe durch zwei teilbar ist, multipliziert man sie mit 1,5, was einer Division durch 2 und einer Multiplikation mit 3 entspricht.
quelle
x*3/2
hat das gleiche bytecountf=
wird normalerweise nicht für js benötigt.f(x*1.5)
, muss es den Namen habenf
, weshalb dasf=
enthalten ist.Brain-Flak , 76 Bytes
Probieren Sie es online!
Erläuterung
Bei diesem Programm wird die Zahl durch zwei geteilt und verdreifacht, bis der Rest der Teilung eins ergibt. Dann stoppt es die Schleife und verdoppelt sich und addiert eins zur endgültigen Zahl.
Ausführlichere Erklärung schließlich ...
quelle
Mathematica,
2219 BytesDanke an lanlock4 für das Speichern von 3 Bytes!
Reine Funktion, die den Austausch wiederholt, jeweils um den Faktor 2. Funktioniert mit allen positiven ganzen Zahlen unter 2 65537 .
quelle
x_?EvenQ
arbeiten stattx_/;EvenQ@x
?MATL ,
7, 6 BytesProbieren Sie es online!
1 Byte gespart dank Dennis 'genialer Beobachtung
Der beste Weg, dies zu erklären, besteht darin, den Stapel an verschiedenen Stellen zu zeigen.
Alternative Lösung:
quelle
Yf3H$X>p
für 8 Bytes05AB1E ,
65 BytesDank Adnan ein Byte gespeichert .
Probieren Sie es online!
Erläuterung
quelle
ÒDÈ+P
sollte ein Byte speichernAlice , 9 Bytes
Probieren Sie es online!
Alice hat eine eingebaute, um einen Teiler einer Zahl durch eine andere zu ersetzen. Ich hätte nicht gedacht, dass ich so bald davon Gebrauch machen könnte ...
Mit Hilfe der Codepunkte der Zeichen für I / O, wird auf 6 Bytes:
I23SO@
.Erläuterung
quelle
Gelee ,
85 BytesProbieren Sie es online!
-3 Bytes dank eines Hinweises von @Dennis!
quelle
Pyth -
14109 BytesZählt die Anzahl der 2s in der Primfaktorisierung (/ PQ2). Multipliziert die Eingabe mit 1,5 ^ (# von 2s)
Versuch es
quelle
Java , 38 Bytes
Probieren Sie es online!
Bisherige 43-Byte-Lösung:
Probieren Sie es online!
quelle
Hexagony ,
11291 BytesRastergröße 6 (91 Bytes)
Kompakte Version
Rastergröße 7 (112 Bytes)
Probieren Sie es online!
Kompakte Version:
Ungolfed Version für bessere Lesbarkeit:
Ungefähre Speicheranordnung
Gray Path (Speicherinitialisierung)
Loop-Eintrag
Grüner Pfad (Wert ist noch durch 2 teilbar)
Roter Pfad (Wert ist nicht mehr teilbar durch 2)
quelle
%2
und:2
beides in die "Modulo" -Kante hineinrechnest? (Sie können also einfach die beiden oberen Kanten loswerden.) Und könnten Sie dann den "Multiplikator" -Zweig an der "Modulo" -Kante anstelle der "Divisor" -Kante anbringen, sodass Sie nach jeder Verzweigung weniger Bewegung benötigen? (Möglicherweise können Sie diesen Bereich sogar drehen, sodass "result" oder "temp 2" "modulo" berührt. Dies bedeutet, dass Sie das Endergebnis nur einmal kopieren müssen, bevor Sie das Produkt berechnen können.)Netzhaut , 23 Bytes
Probieren Sie es online!
quelle
Brachylog , 7 Bytes
Probieren Sie es online!
Wie es funktioniert
quelle
J , 11 Bytes
Probieren Sie es online!
[:
cap (Platzhalter, um das nächste Verb monadisch aufzurufen)*/
das Produkt vonq:
die Primfaktoren+
plus (dh mit einem hinzugefügten wo)2
zwei=
ist gleichq:
die Primfaktorenquelle
[:
ekelhaft.J ,
151210 BytesProbieren Sie es online! Funktioniert ähnlich wie unten, hat nur eine andere Logik bezüglich des Ersetzens von
2
mit3
.15 Bytes
Probieren Sie es online!
Erläuterung
quelle
roll
hier zu nutzen . :)Pyth , 9 Bytes
Ganzzahlige Ausgabe \ o /
Testsuite .
Wie es funktioniert
quelle
Japt ,
19 16 10 97 BytesProbieren Sie es online!
Erläuterung
quelle
×
ist eine Abkürzung fürr@X*Y}1
(oder nurr*1
), die sich als nützlich erweisen könnte. Es gibt auchXwY
welcheMath.max(X,Y)
.k m_w3Ã×
, um ein Byte zu speichern. Auchm_
kann auf gekürzt werden®
.PHP, 36 Bytes
Probieren Sie es online!
quelle
for($a=$argn;!1&$a;)$a*=3/2;echo$a;
Durch das Umbenennen wird$argn
ein einzelnes Byte gespeichert.CJam,
109 BytesGanz einfach.
Erläuterung:
quelle
Hexagony ,
28 2726 BytesProbieren Sie es online!
Ausgelegt:
Dies läuft im Grunde:
An dieser Stelle wird gezeigt, wie schwierig es ist, den Loop-Pfad zu finden, um Bytes zu minimieren.
quelle
Japt , 7 Bytes
Probieren Sie es online!
Erläuterung
quelle
APL (Dyalog Unicode) , 26 Byte
Probieren Sie es online!
Das ist zu wortreich, ich muss etwas falsch machen ...
quelle
R, 42 Bytes
Die einzig richtige Anzahl von Bytes in einer Antwort.
Ziemlich einfach, verwendet das
gmp
Paket zum Faktorisierenx
, ersetzt 2s durch 3s und gibt das Produkt zurück.quelle
Befunge-93 , 20 Bytes
Probieren Sie es online!
quelle
Perl 6 , 14 Bytes
lsb gibt die Position des niedrigstwertigen Bits zurück, von rechts gezählt. Das heißt, wie viele nachgestellte Nullen in der Binärdarstellung sind, was der Anzahl der Faktoren von 2 entspricht. Erhöhen Sie also 3/2 auf diese Potenz, und wir sind fertig.
quelle
Pyke , 5 Bytes
Probieren Sie es online!
quelle
Eigentlich 9 Bytes
Probieren Sie es online!
Erläuterung:
quelle