Biorąc dodatnią liczbę całkowitą n napisać kod do podjęcia jej na czynniki pierwsze i wymienić wszystkie jej czynniki 2
z 3
.
Na przykład
12 = 2 * 2 * 3 -> 3 * 3 * 3 = 27
To jest golf golfowy, więc celem jest zminimalizowanie liczby bajtów odpowiedzi.
Przypadki testowe
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
źródło
Python 2 , 28 bajtów
Wypróbuj online!
Rekurencyjnie dziel liczbę przez 2 i mnoży wynik przez 3, o ile liczba jest parzysta. Dziwne liczby same się zwracają.
32 bajty alt:
Wypróbuj online . Ma jakiś błąd pływaka. Stała jest
log_2(3)-1
.Używa
(n&-n)
do znalezienia największego współczynnika potęgi-2 zn
, konwertuje3**k
do2**k
, podnosząc go do potęgilog_2(3)-1
.źródło
05AB1E , 4 bajty
Wypróbuj online!
Jak to działa
źródło
Haskell,
2423 bajtyPodziel przez dwa i pomnóż przez 3, aż do uzyskania dziwnej lewy w Haskell.
Wypróbuj online!
Alternatywnie z funkcją lambda zamiast z funkcją point-free i z tą samą liczbą bajtów:
Edycja: @ ais523 zapisał bajt w oryginalnej wersji, a @ Ørjan Johansen w alternatywnej wersji, więc obie wersje mają wciąż tę samą długość. Dzięki!
źródło
odd`until`\x->div(x*3)2
.$
pary nawiasów: Wypróbuj online!()
z wersji lambdaJavaScript (ES6), 19 bajtów
Podczas gdy dane wejściowe są podzielne przez dwa, mnoży je przez 1,5, co jest równoważne dzieleniu przez 2 i mnożeniu przez 3.
źródło
x*3/2
ma tę samą liczbę bajtówf=
zwykle nie jest potrzebny dla js.f(x*1.5)
, musi mieć nazwęf
, dlatego teżf=
jest uwzględniona.Brain-Flak , 76 bajtów
Wypróbuj online!
Wyjaśnienie
Ten program działa poprzez podzielenie liczby przez dwa i potrojenie, aż otrzyma resztę jednego z podziału. Następnie przestaje się zapętlać, podwaja się i dodaje jeden do ostatecznej liczby.
Bardziej szczegółowe wyjaśnienie ostatecznie ...
źródło
Mathematica,
2219 bajtówDzięki lanlock4 za oszczędność 3 bajtów!
Czysta funkcja, która dokonuje wymiany wielokrotnie, jeden czynnik 2 na raz. Działa na wszystkich dodatnich liczbach całkowitych mniejszych niż 2 65537 .
źródło
x_?EvenQ
działałby zamiastx_/;EvenQ@x
?MATL ,
7, 6 bajtówWypróbuj online!
1 bajt zapisany dzięki genialnej obserwacji Dennisa
Najlepszym sposobem na wyjaśnienie tego jest pokazanie stosu w różnych punktach.
Alternatywne rozwiązanie:
źródło
Yf3H$X>p
8 bajtów05AB1E ,
65 bajtówOszczędność bajtu dzięki Adnanowi .
Wypróbuj online!
Wyjaśnienie
źródło
ÒDÈ+P
powinien oszczędzić bajtAlice , 9 bajtów
Wypróbuj online!
Alicja ma wbudowaną funkcję zastępowania dzielnika liczby innym. Nie sądziłem, że będę mógł z niego skorzystać tak szybko ...
Używając punktów kodowych znaków dla We / Wy, staje się to 6 bajtów:
I23SO@
.Wyjaśnienie
źródło
Galaretka ,
85 bajtówWypróbuj online!
-3 bajty dzięki podpowiedzi @Dennis!
źródło
Pyth -
14109 bajtówLiczy liczbę 2 sekund w rozkładzie na czynniki pierwsze (/ PQ2). Mnoży wartość wejściową przez 1,5 ^ (# z 2s)
Spróbuj
źródło
Java , 38 bajtów
Wypróbuj online!
Poprzednie 43-bajtowe rozwiązanie:
Wypróbuj online!
źródło
Sześciokąt ,
11291 bajtówRozmiar siatki 6 (91 bajtów)
Wersja kompaktowa
Rozmiar siatki 7 (112 bajtów)
Wypróbuj online!
Wersja kompaktowa:
Wersja bez golfa dla lepszej czytelności:
Przybliżony układ pamięci
Gray Path (inicjalizacja pamięci)
Wpis w pętli
Zielona ścieżka (wartość jest nadal podzielna przez 2)
Czerwona ścieżka (wartości nie można już podzielić przez 2)
źródło
%2
i:2
jedno i drugie do krawędzi „modulo”? (Więc możesz po prostu pozbyć się dwóch górnych krawędzi.) A następnie, czy możesz przymocować gałąź „mnożnika” do krawędzi „modulo” zamiast krawędzi „dzielnika”, aby po każdym odgałęzieniu był mniej ruch? (Być może możesz nawet obrócić tę sekcję, aby „wynik” lub „temp 2” dotknął „modulo”, co oznaczałoby, że musisz tylko skopiować wynik końcowy, zanim będziesz w stanie obliczyć produkt.)Siatkówka , 23 bajty
Wypróbuj online!
źródło
Brachylog , 7 bajtów
Wypróbuj online!
Jak to działa
źródło
J , 11 bajtów
Wypróbuj online!
[:
cap (symbol zastępczy monadycznie wywołuje następny czasownik)*/
produkt zq:
czynniki pierwsze+
plus (tj. z jednym dodanym gdzie)2
dwa=
jest równy (każdemu)q:
czynniki pierwszeźródło
[:
obrzydliwie.J ,
151210 bajtówWypróbuj online! Działa podobnie jak poniżej, po prostu ma inną logikę dotycząca wymiany
2
z3
.15 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
roll
here. :)Pyth, 9 bytes
Integer output \o/
Test suite.
How it works
źródło
Japt,
19 16 10 97 bytesTry it online!
Explanation
źródło
×
is a shortcut forr@X*Y}1
(or justr*1
), which might come in handy. There's alsoXwY
which isMath.max(X,Y)
.k m_w3Ã×
to save a byte. Also,m_
can be shortened to®
.PHP, 36 Bytes
Try it online!
źródło
for($a=$argn;!1&$a;)$a*=3/2;echo$a;
renaming$argn
saves a single byte.CJam,
109 bytesReally simple.
Explanation:
źródło
Hexagony,
28 2726 bytesTry it online!
Laid out:
This basically runs:
At this point it's an exercise on how torturous I can get the loop path to minimise bytes.
źródło
Japt, 7 bytes
Try it online!
Explanation
źródło
APL (Dyalog Unicode), 26 bytes
Try it online!
This is too verbose, I must be doing something wrong...
źródło
R, 42 bytes
The only right amount of bytes in an answer.
Pretty straightforward, uses the
gmp
package to factorizex
, replaces 2s by 3s, and returns the product.źródło
Befunge-93, 20 bytes
Try it online!
źródło
Perl 6, 14 bytes
lsb returns the position of the least-significant bit, counted from the right. That is, how many trailing zeroes in the binary representation, which is the same as the number of factors of 2. So raise 3/2 to that power and we're done.
źródło
Pyke, 5 bytes
Try it online!
źródło
Actually, 9 bytes
Try it online!
Explanation:
źródło