W tym wyzwaniu wyliczysz liczby z osobliwej sekwencji.
Dane wejściowe są liczbą całkowitą nieujemną dziesiętną. Odwróć bity w tej liczbie całkowitej, a następnie kwadrat, aby uzyskać wymaganą moc wyjściową.
Podczas odwracania bitów nie wolno używać żadnych początkowych zer na wejściu. Na przykład:
26 (base 10) = 11010 (base 2) -> 01011 (base 2) = 11 -> 11*11 = 121
Pierwsze 25 wejść / wyjść tej sekwencji:
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
Twoje rozwiązanie powinno działać na liczbach całkowitych o dowolnym rozmiarze. Jeśli w Twoim języku nie ma wygodnej wbudowanej metody korzystania z nich, zaimplementuj swoją odpowiedź tak, jakby miała. Jesteś wtedy usprawiedliwiony, jeśli twoja odpowiedź załamie się w przypadku dużych liczb. Nie należy jednak używać sztuczek / ograniczeń, które działają tylko w przypadku ograniczonej domeny (takiej jak tabela odnośników).
Twój wynik to liczba bajtów kodu źródłowego.
-50% bonusu, jeśli nigdy nie zmienisz numeru na / z binarnego. Nie ogranicza się to do poleceń wbudowanych, jeśli liczba zostanie zapętlona krok po kroku (poprzez przesunięcie, maskowanie lub inną metodę), będzie również liczona jako konwersja. Nie wiem, czy jest to faktycznie możliwe, ale zachęca to do wykrycia wzoru w sekwencji.
Najmniejszy wynik wygrywa.
Odpowiedzi:
Par , 5 bajtów
To jest read-binary-reverse-binary-square.
źródło
Mathematica,
4221 bajtówDzięki alephalpha za zmniejszenie o połowę wyniku.
Rzeczywistym powodem, dla którego to zrobiłem w Mathematica, było to, że chciałem spojrzeć na fabułę ... z pewnością wygląda śmiesznie:
źródło
Minkolang 0,14 , 43 bajty
Dzięki Mego za inspirację.
Przetestuj kod tutaj i sprawdź wszystkie przypadki testowe tutaj .
Wyjaśnienie
Używa tej relacji powtarzalności:
Jeśli
n
jest wejściem, toa(n)
jest liczbą wynikową po odwróceniu jego sekwencji binarnej. 0 i 1 są oczywiste. Weźa(2n) = a(n)
pod uwagę, żex0
(gdziex
jest jakakolwiek sekwencja cyfr binarnych) jest odwrócone0x
, co jest takie samo jakx
. Dlaa(2n+1)
rozumowanie jest nieco bardziej skomplikowana.x1
jest odwrócony1x
, cox + 2^k
dla niektórych jest równek
. Jestk
to o jeden więcej niż liczba cyfrx
, czylifloor(log_2(n))+1
. Następuje pełna formuła, z tą różnicą, że jest nieco zmodyfikowana. Oto, co właściwie koduję:Jak Mego i pracowałem w czacie
floor(n/2) = (n - n%2)/2
. Tak więclog_2(floor(n/2))+1 = log_2(n - n%2)
. Co więcej, mnożenie przez(n%2)
zrzuca zarówno nieparzyste, jak i parzyste części w jedno wyrażenie.Wreszcie, bez zbędnych ceregieli, oto kod wyjaśniony.
źródło
2n
i2n+1
w związku z nawrotem powinieneś natychmiast pomyśleć o tym jako o zapętlaniu bitów.Japt ,
2928117 bajtów(Możesz zapisać program jako 7-bajtowy plik zakodowany w IEC_8859-1, a następnie przesłać go do tłumacza .)
Japt to skrócony JavaScript stworzony przez ETHproductions .
Wypróbuj online!
Wyjaśnienie:
¢
to skrót doUs2
, który się kompilujeU.s(2)
.U
jest wejściem (niejawnym),.s(2)
wywoływanym przez liczbę, wywołuje.toString(2)
(konwertuje na binarny, analizuje jako ciąg znaków).w
kompiluje do.w()
, co odwraca string (.split('').reverse().join('')
).n2
działa jakoparseInt(<number>,2)
, tzn. konwertuje wartość binarną na dziesiętną.²
wywołujeMath.pow(<number>,2)
, tzn. podnosi liczbę do kwadratu.źródło
n
, abyś mógł to zrobićUs2 a w a n2 p2
. Dobra robota!w
działa tak samo na sznurkach jak to robi na macierzach, więc nie trzeba dwaa
s :)Us2
=¢
ip2
=²
sprowadzenie do 7 bajtów:¢w n2 ²
Python, 32 bajty
Wypróbuj online.
Kod jest dość prosty:
bin(6)
na przykład daje0b110
, binarna reprezentacja 6.[:1:-1]
odwraca ciąg i usuwa0b
.int
konwertuje ciąg z liczb binarnych na liczbę całkowitą i**2
obciąża go.źródło
Jolf , 7 bajtów
Po prostu uruchom. Dane wejściowe na stronie nie działają.
Wyjaśnienie
Dodałem
Q
polecenie, które tworzy te 6 bajtów:QC_Bj2
źródło
TeaScript , 9 bajtów
11TeaScript to JavaScript do gry w golfa
Będę grał w golfa po powrocie do komputera
Wypróbuj online!
Przetestuj wszystko
źródło
Poważnie ,
87 bajtówTakie wyzwania są idealne na poważnie :)
Wypróbuj online
Wyjaśnienie:
źródło
J,
109 bajtówTo jest milczący, monadyczny czasownik. Wypróbuj online!
Dzięki @randomra za grę w golfa na 1 bajcie!
Jak to działa
źródło
CJam, 10 bajtów
Wypróbuj online
źródło
JavaScript,
64635653 bajtówZdaję sobie sprawę, że jestem wyjątkowo długi, ale hej, mogę to zrobić: P.
Próbny
źródło
parseInt(
możesz zrobić+("0b"+
[...n.toString(2)]
oraz.join``
n=>+("0b"+[...n.toString(2)].reverse().join``)**2
. Nie działa jeszcze w żadnej przeglądarcePerl 6 , 21 bajtów
Przykładowe użycie:
źródło
PHP, 45 bajtów
źródło
Shell, 25
Wejście / wyjście przez STDIN / STDOUT:
źródło
Pyth - 9 bajtów
Proste konwersje. Właściwie przypisałem 2 do var, co jest dość dziwne.
Pakiet testowy .
źródło
Pyth, 9 bajtów
Jest to bardzo prosta odpowiedź oparta na pyth, podobna do odpowiedzi w Pythonie
źródło
𝔼𝕊𝕄𝕚𝕟, 12 znaków / 21 bajtów
Try it here (Firefox only).
Odpowiedź niekonkurencyjna, 9 znaków / 18 bajtów
Try it here (Firefox only).
źródło
Rubin, 35 bajtów
źródło
TI-Basic (TI-84 Plus CE), 42 bajty
źródło