Przepraszam za tytuł.
To pytanie jest inspirowane przez Ciekawą własność 82000 . Autor zaznacza w nim, że liczba 82000 jest binarna w bazie 2, 3, 4 i 5. W odpowiedzi pojawia się pytanie „czy liczba jest binarna w bazach 2, 3, 4, 5 i 6 „? (Dla ciekawskich sprawdziłem wartości do 10 ^ 1 000 000 i jak dotąd odpowiedź brzmi nie.)
To sprawiło, że pomyślałem: biorąc pod uwagę liczbę, w jakich podstawach jest binarny?
Nasza ciekawa liczba, 82000, jest w rzeczywistości dwójkowa w sześciu bazach:
Base 2 = 10100000001010000
Base 3 = 11011111001
Base 4 = 110001100
Base 5 = 10111000
Base 81999 = 11
Base 82000 = 10
Nie wszystkie liczby będą miały sekwencje binarne. Rozważ liczbę 83521. Jest binarna w bazach 2, 17, 289, 83520 i 83521.
Wyzwanie polega na ustaleniu i wyświetleniu, w jakich podstawach liczba jest binarna.
Zasady
- Liczba jest uważana za „binarną” w danej bazie, jeśli jej reprezentacja w tej bazie składa się tylko z zer i jedynek.
110110
jest wartością binarną, chociaż12345
nieA380F
jest, zdecydowanie nie jest. - Twój numer zostanie podany na standardowym wejściu. Będzie to liczba całkowita od 2 do 2 ^ 32-1 włącznie i zostanie podana w formacie base-10.
- W porządku rosnącym wyświetl każdą bazę większą niż jedna, w której liczba jest liczbą binarną. Każda baza powinna znajdować się w osobnej linii. Jeśli włączysz wartość binarną do tej podstawy (patrz punktacja premii poniżej), oddziel podstawę i wartość binarną spacją. Tylko wyjście do standardowego wyjścia zostanie ocenione, błąd standardowy i inne źródła zostaną zignorowane.
Punktacja
Twój wynik to rozmiar programu w bajtach. Im niższy wynik, tym lepiej.
Premia :
Jeśli Twój program wyświetla również wartości binarne w znalezionych bazach, pomnóż swój wynik przez 0,75.
Wyświetlana wartość binarna nie powinna zawierać dodatkowej interpunkcji, żadnych zer zerowych, żadnych kropek dziesiętnych, tylko zer i jedynek.
Przykłady
Wkład:
82000
Wyjście (otrzymuje bonus):
2 10100000001010000
3 11011111001
4 110001100
5 10111000
81999 11
82000 10
Wkład:
1234321
Wyjście (bez premii):
2
1111
1234320
1234321
źródło
n
zawsze co najmniej binarny zasad1
(nie liczy)2
,n-1
in
.[1, 0, 1, 1, 0]
dobrze, czy też liczby muszą być połączone, tak jak10110
?Odpowiedzi:
Pyth,
1413Dzięki Jakube za wskazanie nowej
S
funkcji.Wypróbuj tutaj.
Wersja online jest zbyt wolna
1234321
. To po prostu konwertuje dane wejściowe do każdej bazy z 2 na siebie i odrzuca wyniki zawierające wartości inne niż 0 i 1.Wyjaśnienie:
Ponadto, jest to (
nie dobrze grałemteraz dobrze grałem ponownie dzięki Jakube) wersji premiowej (20 * 0,75 = 15):Wypróbuj tutaj
źródło
VQI!-JjQK+2NU2pdKjkJ
Czasami programowanie funkcjonalne nie jest najlepszym podejściem.Julia,
7270 bajtówW rzeczywistości jest on dłuższy z bonusem, więc nie ma tu bonusu.
Odczytuje linię ze STDIN, konwertuje ją na liczbę całkowitą i wypisuje wynik. Pomimo tego, że była to metoda brutalnej siły, wejście 1234321 zajęło mi mniej niż 1 sekundę.
Niegolfowane + wyjaśnienie:
Przykłady:
UWAGA : Jeśli dane wejściowe można traktować jako argument funkcji, a nie ze STDIN (oczekuje na potwierdzenie z OP), rozwiązanie ma 55 bajtów.
źródło
CJam, 20 bajtów (lub 27 bajtów * 0,75 = 20,25)
Oto wersja bez premii, 20 bajtów:
Wypróbuj to tutaj.
Dla zabawy, oto wersja bonusowa, 27 bajtów:
Wypróbuj online tutaj
źródło
ri_,f{2+S@2$bN}4/{2=2,-!},
(19,5 bajtów)Mathematica, 59 bajtów
Ugh ...
IntegerDigits
D:Tak naprawdę nie ma wiele do wyjaśnienia na temat kodu ... 12 bajtów jest marnowanych przez wymóg używania STDIN i STDOUT.
Nie sądzę, żebym mógł odebrać bonus. Najlepsze, jakie mam, to 84 bajty (co daje wynik powyżej 60):
źródło
Python 2,
88 8680Dość proste, bez premii. Python jest przyjemny i łagodny dla zmiennych globalnych.
Najlepsze, co udało mi się uzyskać za bonus, to 118 * .75 = 87,75 :
źródło
g(N)
Zamiast tego byłoby to krótszen=N
.g(N,b)
przecinek sprawiał, że oba były równe), ale co masz na myśli, że nie potrzebowałbym zmiennej dla N?g(n/b)
na(g(n/b)+'n%b')
gdzie „reprezentuje backstick?Python 2, 90 * 0,75 = 67,5
Całkiem proste podejście iteracyjne.
Bez premii jest to 73 bajty:
źródło
SQL (PostgreSQL),
247,5255230,25 (307 * .75)Ponieważ SQL jest znany z tego, że jest wspaniały w tego rodzaju wyzwaniach, pomyślałem, że lepiej go połączyć :) Bonus był naprawdę warty tego.
Powinien być zgodny ze specyfikacją, ale nie mam łatwego sposobu na przetestowanie COPY I FROM STDIN .
Edytuj ustaloną kolejność. Zmieniono sposób obsługi kolumny R w celu użycia tablicy.
Jako test użyłem właśnie prostych wkładek do
I
stołu. Uruchomiono test i skomentowano.źródło
order by
. Teraz zobaczę, czy uda mi się odzyskać te postacieHaskell 109 * 0,75 = 81,75 bajtów
Przykład użycia (uwaga: wartości binarne są najpierw lsb):
Bez ograniczeń wejścia / wyjścia, tj. Wejście przez argument funkcji, wyjście w formacie macierzystym przez REPL):
Haskell, 67 * 0,75 = 50,25 bajtów
Zwraca listę par (podstawowa, wartość). Wartości są najpierw lsb, np. (Dodano nowe wiersze / spacje dla lepszego wyświetlania):
źródło
R, 111
Prawdopodobnie w tej chwili jest dużo miejsca, aby to poprawić
Działa z ostrzeżeniami
źródło
I%/%b
logicznejany()
klauzuli. `Java,
181155,25 (207 * .75)151,5 (202 * .75) bajtówRozszerzony z wyjaśnieniem:
Oryginał (bez premii):
3,75 bajtów dzięki Ypnypn :)
źródło
R,
948379Stosowanie:
Rdzeniem funkcji jest to
!sapply(2:n,function(x){while(n&n%%x<2)n=n%/%x;n})
, że dla każdej podstawy x od 2 do n zachowuje iloraz n / x, o ile reszta wynosi 0 i 1. Następnie wyprowadza wynik (który wynosi 0, jeśli wszystkie pozostałe były równe 1 lub 0) i neguje (0 neguje na PRAWDA, wszystko inne neguje na FAŁSZ). Dzięki zakresowi funkcji nie ma potrzeby tworzenia zmiennej zastępczej dla n. Powstały wektor booleanów jest następnie wykorzystywany do indeksowania,2:n
a zatem generuje tylko zasady, dla których działał.źródło
TI-Basic, 45 bajtów
Wyjaśnienie
Skomplikowana część
Druga linia działa w następujący sposób:
Uwaga
Program działa znacznie szybciej, jeśli nawias zamykający
)
zostanie umieszczony na końcu drugiej linii. Zobacz tutaj, aby uzyskać więcej informacji na ten temat.źródło
TI-BASIC,
3129Jest to prawdopodobnie optymalne dla TI-BASIC.
Wyjaśnienie:
randIntNoRep(1,32)
zwraca losową permutację liczb od 1 do 32 (Potrzebujemy tylko tych liczb w pewnej kolejności; TI-BASIC nie ma nic takiego jak polecenie iota APL-a). Wystarczą 32 elementy, ponieważ najmniejsza możliwa baza to 2, a największa liczba to 2 ^ 32-1.B^randIntNoRep(1,31)
podnosi tę listę do potęgi Bth, co powoduje, że lista zawiera wszystkieB^1,B^2,...,B^32
(w pewnej kolejności).Następnie dane wejściowe (w
Ans
zmiennej wer, która jest wprowadzana w formularzu[number]:[program name]
) są dzielone przez tę liczbę. Jeśli twój wkład to 42, a podstawa to 2, wynikiem będzie lista21,10.5,5.25,...,42/32,42/64,[lots of numbers less than 1/2]
, znowu w pewnej kolejności.Biorąc część ułamkową i mnożąc liczbę przez bazę, otrzymujemy cyfrę w tej pozycji w reprezentacji base-b. Jeśli wszystkie cyfry są mniejsze niż 2, wówczas największa cyfra będzie mniejsza niż 2.
Jak stwierdził Ypnypn, nawias zamykający
For
oświadczenie przyspiesza to z powodu błędu parsera.31-> 31: Zapisano bajt, ale naprawiono błędy zaokrąglania, które dodawały bajt ponownie.
31-> 29: Zapisano dwa bajty, używając
RandIntNoRep()
zamiastcumSum(binomcdf())
.źródło
seq(expression, variable, start, end[, step])
. Jeśli nie podano żadnego kroku, domyślnie jest to 1. JednakcumSum(binomcdf(31,0
ma 8 bajtów, aseq(X,X,1,32
9 bajtów.Galaretka , 9 bajtów
Wypróbuj online!
Sporządzono wraz z Cairnem coinheringaahing na czacie .
Jak to działa
źródło
JavaScript, ES6,
118 * .75 = 88,5110 * .75 = 82,5Poprzednia wersja:
Czek:
źródło
JavaScript ( ES6 ) 65
68 bajtów dla funkcji z parametrem i wyjściem konsoli.
65 bajtów z I / O poprzez wyskakujące okienko
Wniosek o premię: 88 * 0,75 => 66
źródło
Mathematica, 76 * 0,75 = 57
Początkowo zapomniałem o wymaganiach wejściowych ... Na szczęście nie dodały one zbyt wiele.
źródło
Rubinowy , 44 bajty
Wypróbuj online!
źródło
Perl 5 , 63 bajtów
Wypróbuj online!
Brak premii z tego powodu, ponieważ osiąga bardzo niewiele lepsze wyniki niż moja wersja z premią:
Perl 5 , 85 bajtów * 0,75 = 63,75
Wypróbuj online!
źródło