Biorąc pod uwagę liczbę całkowitą N, wykonaj następujące czynności: (używając 9 jako przykładu).
- Odbierz wejście N. (
9
) - Przelicz N z base10 na base2. (
1001
) - Zwiększaj każdy bit o 1. (
2112
) - Traktuj wynik jako base3 i przekonwertuj go z powrotem na base10. (
68
) - Zwróć / wyślij wynik.
Wkład
Może być odbierany w dowolnym rozsądnym formacie liczbowym.
Musisz obsługiwać tylko przypadki, w których N> 0.
Wydajność
Zwróć jako liczbę lub ciąg znaków lub wydrukuj do stdout
.
Zasady
- To jest code-golf , wygrywa najkrótszy kod w bajtach.
- Domyślne luki są zabronione.
Przypadki testowe
1 -> 2
2 -> 7
5 -> 23
9 -> 68
10 -> 70
20 -> 211
1235 -> 150623
93825 -> 114252161
code-golf
number
base-conversion
Ian H.
źródło
źródło
+n%2+1
dodaje do wartości zwracanej bit binarny najbardziej wysunięty w prawo plus 1,n/2
przesuwa w prawon
o 1 bit binarny,3*f(n/2)
rekurencyjnie dodaje 3-krotność tego obliczenia dla bitów przesuniętych w prawo in and
kończy rekurencję, gdyn
wynosi 0JavaScript (Node.js) , 23 bajty
Wypróbuj online!
źródło
x>>1
jest taki sam jakx/2
nie jest?Infinity
w JS .. Wypróbuj online. (Możesz dodać link TIO do swojej odpowiedzi, I4m2 )1>>1=0
while1/2=0.5
n/2
działa i dlatego zasugerowałem to tutaj.Java (JDK 10) , 44 bajty
Wypróbuj online!
źródło
-~
pomoże?long
? :) A tutaj myślałem, że moje podejście sekwencyjne jest inteligentne ..Galaretka , 4 bajty
Wypróbuj online!
źródło
J , 7 bajtów
Wypróbuj online!
Dzięki Galen Iwanow za -4 bajty! Naprawdę muszę poprawić swoje umiejętności gry w golfa J ...
źródło
3#.1+#:
TIO: 0
.R ,
5543 bajtówWypróbuj online!
Używa standardowej podstawowej sztuczki konwersji w R, inkrementuje, a następnie używa iloczynu kropkowego z mocami
3
konwersji z powrotem na liczbę całkowitą.Dzięki @ user2390246 za upuszczenie 12 bajtów!
źródło
05AB1E , 5 bajtów
Wypróbuj online!
05AB1E , 5 bajtów
Wypróbuj online!
źródło
S
też działa€
.Java 10,
8152 bajtów (konwersja podstawowa)Wypróbuj online.
-29 bajtów dzięki @Holger .
Wyjaśnienie:
Java 10,
171167151150149 bajtów (sekwencja)-16 bajtów dzięki @ musicman523 , zmiana
(int)Math.pow(2,t)
na(1<<t)
.-1 bajt dzięki @Holger , zmiana
(int)(Math.log(n)/Math.log(2))
na31-n.numberOfLeadingZeros(n)
.Wypróbuj online.
Wyjaśnienie:
Kiedy spojrzymy na sekwencję:
Widzimy wiele podciągów:
Pytana sekwencja to:
Ssę w poszukiwaniu wzorców, więc jestem dumny z tego, co znalazłem powyżej. Powiedziawszy to, @ user202729 znalazł lepsze i krótsze podejście w Javie w ciągu kilku minut ..: '(
źródło
n.toString(n,2).getBytes()
... Myślę, że ręczna konwersja może być krótsza.long
i nieint
?(int)Math.pow(2,t)
na1<<t
..., a następnie wstawić to wyrażenie i upuścić zmienną i ( 152 bajty )31-Integer.numberOfLeadingZeros(n)
zamiast tego(int)(Math.log(n)/Math.log(2))
, ale nie jest on krótszy. Chyba że użyjeszimport static
w nagłówku, co może zbytnio rozciągnąć reguły.n -> n.toString(n,2).chars().reduce(0,(r,c)->r*3+c-47)
APL (Dyalog) , 10 bajtów
Wypróbuj online!
źródło
Brachylog , 7 bajtów
Wypróbuj online!
Wyjaśnienie
Nie to, że naprawdę potrzebujesz, ale…
źródło
Rubinowy , 27 bajtów
Wypróbuj online!
źródło
Python 2 ,
5655 bajtówWypróbuj online!
źródło
Attache , 19 bajtów
Wypróbuj online!
Jest to kompozycja trzech funkcji:
FromBase&3
1&`+
Bin
Najpierw konwertuje na binary (
Bin
), inkrementuje go (1&`+
), a następnie konwertuje na ternary (FromBase&3
).Alternatywy
Bez punktów, 21 bajtów:
{FromBase[Bin!_+1,3]}
Bez wbudowanych 57 bajtów:
Sum@{_*3^(#_-Iota!_-1)}@{If[_>0,$[_/2|Floor]'(1+_%2),[]]}
źródło
Retina 0.8.2 , 36 bajtów
Wypróbuj online! Wyjaśnienie:
Konwertuj z dziesiętnego na jednoargumentowy.
Kilkakrotnie divmod o 2 i dodaj 1 do wyniku modulo.
Dodaj również 1 do pierwszej cyfry.
Konwertuj z unary-coded base 3 na unary.
Konwertuj na dziesiętny.
źródło
Japt , 6 bajtów
Pobiera dane wejściowe jako liczbę, zwraca liczbę.
Wypróbuj online!
źródło
MATL ,
1276 bajtówWypróbuj online!
Zaoszczędzono 5 bajtów dzięki Giuseppe i kolejny dzięki Luisowi Mendo.
Stara 7-bajtowa odpowiedź:
Wypróbuj online!
Wyjaśnienie:
Stary na 12 bajtów:
Wypróbuj online!
Ojej, to było niechlujne ... Tak też jest: `BQ3GBn: q ^! Y *.
Wyjaśnienie:
źródło
C # (kompilator Visual C #) , 128 bajtów
Wypróbuj online!
Liczę,
System
bo używamConvert
iMath
.źródło
z
zmiennej. Również w organizmie ekspresji można pozbyć się{
,}
ireturn
sprawozdania. Więc coś takiegon=>Convert.ToString(n,2).Reverse().Select((x,i)=>(x-47)*Math.Pow(3,i)).Sum();
Python 2 ,
5654 bajtówWypróbuj online!
źródło
C,
3227 bajtówNa podstawie odpowiedzi Java użytkownika user202729 . Wypróbuj online tutaj . Dzięki Kevin Cruijssen za grę w golfa 5 bajtów.
Wersja bez golfa:
źródło
return
jex=
i odwracając trójskładnik, aby!
nie było już konieczne:n(x){x=x?x%2+1+3*n(x/2):0;}
Łuska , 5 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
Oktawa z zestawem narzędzi komunikacyjnych,
3332 bajtyWypróbuj online!
Konwertuje dane wejściowe na wektor binarny, używając
de2bi
i zwiększając wszystkie liczby. Czy mnożenie macierzy z wektorem pionowym 3 podniesionym do odpowiednich mocy:1, 3, 9, ...
w ten sposób uzyskuje się sumę bez wyraźnego wezwania dosum
.źródło
@(x)base2dec(de2bi(x)+49,3)
za 27 (rzadka okazja, gdy MATLAB jest bardziej łagodny niż Octave)PHP,
8464 bajtówWypróbuj online !!
ORYGINALNY Kod
Wypróbuj online !!
Dzięki Cristophowi mniej bajtów, jeśli uruchomiono z php -R
Wyjaśnienie
źródło
strtr
<?="Will do!!"
CJam , 8 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
:)
...Biała spacja , 117 bajtów
Litery
S
(spacja),T
(tab) iN
(nowa linia) dodane tylko jako wyróżnienia.[..._some_action]
dodano tylko jako wyjaśnienie.Wypróbuj online (tylko z surowymi spacjami, tabulatorami i nowymi wierszami).
Objaśnienie w pseudo-kodzie:
Najpierw przekonwertowałem funkcję rekurencyjną
int f(int n){return n<1?0:n%2+1+3*f(n/2);}
na jej iteracyjną formę (w pseudokodzie):Następnie zaimplementowałem to iteracyjne podejście w języku Whitespace opartym na stosie, używając domyślnego stosu.
Przykładowe przebiegi:
Wkład:
1
Wypróbuj online (tylko z surowymi spacjami, tabulatorami i nowymi wierszami).
Zatrzymuje się z błędem: nie zdefiniowano wyjścia.
Wkład:
4
Wypróbuj online (tylko z surowymi spacjami, tabulatorami i nowymi wierszami).
Zatrzymuje się z błędem: nie zdefiniowano wyjścia.
źródło
n < 1
kontroli, przesuwając wartości, aż n wyniesie 0, a następnie przesuwając je, aż osiągniesz wartość graniczną (0). Głębokość stosu nie musi być zapisywana jawnie i nie powinno nawet być potrzeby zamiany (jeśli masz na myśli zamianę dwóch najwyższych wartości jak w lisp)n < 1
(lubn == 0
) pcha wartości, dopókin
nie wyniesie 0 .. Czy też źle coś interpretuję tutaj: S „ Głębokość stosu nie musi być zapisywana jawnie ” W Javie tak, inaczej nie mogę utworzyć tablicy. Mógłbymjava.util.Stack
zamiast tego użyć , ale po prostu użyłem tablicy, aby była mniej gadatliwa. W przypadku białych znaków stos ma nieokreślony rozmiar.Brain-Flak , 74 bajty
Wypróbuj online!
Wersja „czytelna”
źródło
Dodaj ++ , 14 bajtów
Wypróbuj online!
źródło
Japt , 7 bajtów
Wypróbuj tutaj
źródło
Haskell , 32 bajty
Wypróbuj online!
źródło
Perl 5 , 36 bajtów
Wypróbuj online!
źródło
Pyth, 8
Jak wyeliminować przestrzeń i zrobić coś
Q
niejawnego?Pyth online .
źródło
Q
niejawnego? Nie sądzę, że możesz.