Repdigit jest liczbą naturalną, która może być napisany wyłącznie powtarzając tę samą cyfrę. Na przykład 777
jest repdigit, ponieważ składa się wyłącznie z cyfry 7
powtórzonej trzy razy.
Nie ogranicza się to jednak do liczb dziesiętnych (podstawa 10):
- Każda liczba Mersenne'a (w postaci M n = 2 n -1 ) jest powtórką, gdy jest zapisana w formacie binarnym (podstawa 2).
- Każda liczba jest w trywialny sposób powtórką, gdy jest zapisana jednoargumentowo (baza 1).
- Każda liczba
n
może być również trywialnie zapisana jako powtórka11
w bazien-1
(na przykład,17
gdy jest zapisana w systemie szesnastkowym (podstawa 16)11
, a3
gdy jest zapisana w formacie binarnym (podstawa 2) również11
).
Wyzwanie polega tutaj na znalezieniu innych podstaw, w których liczba wejściowa może być powtórką.
Wkład
Dodatnia liczba całkowita x > 3
, w dowolnym dogodnym formacie.
Wydajność
Dodatnia liczba całkowita, b
w (x-1) > b > 1
przypadku której reprezentacja x
w bazie b
jest repdigit.
- Jeśli takiego nie
b
ma, wartość wyjściowa0
lub pewna wartość falsey . - Jeśli
b
istnieje wiele takich , możesz wypisać jeden lub wszystkie z nich.
Zasady
(x-1) > b > 1
Ograniczeniem jest to, aby zapobiec trywialne konwersje jednoskładnikowa lub odejmowania „jeden” podstawy. Wyjście numer może być napisany w jednoargumentowego lub dowolnej wygodnej bazy, ale sama baza nie musi być jednym z błahych konwersji.- Wejście / wyjście może odbywać się dowolną odpowiednią metodą .
- Obowiązują standardowe ograniczenia dotyczące luk .
Przykłady
In --> Out
11 --> 0 (or other falsey value)
23 --> 0 (or other falsey value)
55 --> 10 (since 55 is 55 in base 10)
90 --> 14 (since 90 is 66 in base 14 ... 17, 29, 44 also allowed)
91 --> 9 (since 91 is 111 in base 9 ... 12 also allowed)
code-golf
base-conversion
AdmBorkBork
źródło
źródło
b ≤ 36
(wbudowane funkcje konwersji wielu języków nie idą wyżej)?b ≤ 36
poważnie ogranicza zakres tego problemu, a wszystkie istniejące odpowiedzi poprawnie obsługują większe bazy, więc powiem, że nie, nie możesz założyć górnej granicyb
wykraczającej poza to, co podano.Odpowiedzi:
Galaretka,
119 bajtówZwraca listę baz, która jest pusta (fałsz), jeśli nie ma żadnej. Wypróbuj online!
Jak to działa
źródło
Pyth
1110Najwyraźniej jednoosobowe Pyth
q
sprawdza listę, która ma wszystkie unikalne wartości sprzed około 10 dni. Najwyraźniej badanie błędów Pyth poprawia wyniki w golfa.Filtruje listę,
[2..input-1)
jeśli unikalny zestaw cyfr wejścia w tej bazie ma długość 1.Pakiet testowy
Wyjaśnienie:
źródło
Ruby,
876963 bajtówMusiałem zaimplementować konwersję bazy ręcznie, ponieważ wbudowane Ruby idą tylko do bazy 36 ...
Zwraca
nil
za nie znaleziono.źródło
Python, 71
7278bajtówBez rekurencji, po prostu wypróbowuje wszystkie zasady i generuje zestaw tych, które działają.
To kuszące do kodowania
b
id
w jednym szeregu, ale to zajmuje zbyt wiele wyrażeń w nawiasach, aby je wydobyć. 77 bajtów:72 bajty:
Generuje pierwszy,
b
który działa, lub0
jeśli żaden nie.Rep-unit
x
zd
cyfrc
w bazieb
ma wartośćx==c*(b**d-1)/(b-1)
. Odpowiedniox*(b-1)==c*(b**d-1)
.Wartość
c
musi byćx%b
ostatnią cyfrą. Nie widzę jednak sposobu na określenied
arytmetyczne, więc kod wypróbowuje wszystkie możliwości, aby sprawdzić, czy któraś z nich działa.Zaoszczędzono 5 bajtów, kopiując sztuczkę Dennisa, aby dać wyjście falsey, gdy
b
osiągniex-1
, biorąc moduł wyjściax-1
. Kolejny bajt ocalony od Dennisa przypominający mi, że potęgowanie w niewytłumaczalny sposób ma wyższy priorytet niż ten~
.Rozwiązanie o równej długości z
in
zamiastany
.źródło
Rubinowy, 50 bajtów
Naprawdę chciałbym usunąć tę irytującą przestrzeń, ale jako nowicjusz ruby wciąż nie jestem zaznajomiony z jego dziwactwami składniowymi.
źródło
b?
to poprawna nazwa metody, więc nie można pozbyć się miejsca.Emojicode , 214 bajtów
(77 znaków):
Wyświetla wyniki w bazie 9.
Od kilku tygodni zamierzam grać w golfa kodowego za pomocą emojicode, ale dopiero niedawno język stał się wystarczająco stabilny, aby móc z nim współpracować 😉. Jako bonus, to pytanie korzysta z jednego elementu funkcjonalności, który jest naprawdę dobry w emojicode: reprezentowanie liczb całkowitych w innych bazach.
Ungolfed (👴 jest komentarzem liniowym w emojicode)
źródło
Python 2, 79 bajtów
Wypróbuj na Ideone .
Pomysł
Każde powtórzenie x podstawy b> 1 i cyfry d <b spełnia następujące warunki.
Ponieważ d <b , mapa (b, d) ↦ cb + d jest iniekcyjna.
Ponadto, ponieważ b, x> 1 , mamy c <x , więc cb + d <cb + b = (c + 1) b ≤ xb .
Oznacza to, że aby znaleźć odpowiednie wartości c i d dla danej bazowej B , można iterację wszystkich I w [0, ..., BX) i sprawdza, czy (B - 1) x == (% B) i (B i / b - 1) .
Kod
Nazwana lambda f sprawdza, czy (b - 1) x jest w zbiorze {(i% b) (b i / b - 1) | 0 ≤ i <bx} , zaczynając od wartości b = 2 .
Jeśli test się powiedzie, zwracamy b .
Inaczej, nazywamy f ponownie, z tą samą x i b wzrasta o 1 .
Ponieważ b może ostatecznie osiągnąć x - 1 , bierzemy wynik końcowy modulo x - 1, aby zwrócić 0 w tym przypadku. Zauważ, że tak się nie stanie, jeśli b = 2 spełnia warunek, ponieważ jest zwracane bez powtarzania. Pytanie to gwarantuje jednak, że b = 2 <x - 1 w tym przypadku.
źródło
Perl 6,
454342 bajtówWyjaśnione (w pewnym sensie)
Dla porównania, zmienna
$^x
w{ ... }
jest tym samym co czynność-> $x { ... }
Polymod (TL; DR):
$n.polymod($b xx *)
daje odwróconą listę cyfr / „cyfr”$n
w bazie$b
Polymod (rzeczywisty): Metoda polymod jest prawie jak bardziej rozbudowana wersja funkcji pythona
divmod
.$n.polymod(*@args)
dzieli $ n przez każdą wartość na * @ args, dodając resztę ($n mod $x
) do zwracanej listy i używając ilorazu do następnego dzielenia. Wydaje mi się, że źle to wytłumaczyłem, więc oto kilka przykładów (napisanych w perl 6, ale wystarczająco czystych, aby być zrozumiałym dla większości):źródło
grep
metody zamiastfirst
metody.Dyalog APL , 28 bajtów
{
...⍵
...}
funkcja anonimowa, które należy stosować dox
(przedstawiciele⍵
),b←1+⍳⍵-3
liczby całkowite od 2 - ⍵-2 składowanych,b
⍵{
...}¨
dla każdego elementu b (⍵
) stosuje się funkcję{
...}
z X jako lewy argument⍺
⍵⊥⍣¯1⊢⍺
konwersji NOx do tej podstawy1=≢∪
jest 1 równy zgadzają unikalnej cyfry?b/⍨
elementy b gdzie prawda (że jest tylko jedna unikalna cyfra).Przykładowe przypadki
Jeśli nie istnieje podstawa, dane wyjściowe są puste (co oznacza falsey), co może wykazać ten program:
To drukuje „False”
źródło
Pyth,
2619 bajtówWypróbuj tutaj!
Dodam wyjaśnienie po tym, jak zagrałem w golfa.Spójrz na tę odpowiedź, aby uzyskać krótsze wdrożenie i wyjaśnienie.źródło
90
i91
w moich przykładów!MATL ,
1514 bajtówTo działa z bieżącą wersją (14.0.0) języka / kompilatora .
Jeśli nie istnieje podstawa, dane wyjściowe są puste (co oznacza falsey).
Wypróbuj online!
źródło
Mathematica, 55 bajtów
Funkcja anonimowa, niezbyt skomplikowana. Po prostu odfiltrowuje zasady w oparciu o repdigitity.
źródło
Python 2, 75 bajtów
Port mojej rubinowej odpowiedzi. Wyświetla wszystkie prawidłowe bazy, jeśli takie istnieją.
źródło
Julia, 45 bajtów
Jest to anonimowa funkcja, która przyjmuje liczbę całkowitą i zwraca tablicę liczb całkowitych. Aby go wywołać, przypisz go do zmiennej. Zwróci wszystkie odpowiednie zasady lub pustą tablicę. Nie ma problemów z dużymi bazami.
Najpierw generujemy obejmujący zakres [2, n - 2], gdzie n jest wejściem. Następnie
filter
wyświetlamy listę tylko liczb całkowitych b, dla których n w bazie b ma mniej niż 2 unikalne cyfry. Aby to zrobić, dla każdej liczby całkowitej b w zakresie otrzymujemy cyfry nw bazie b jako tablicę używającądigits
, uzyskujemy unikalne pozycje za pomocą∪
i uzyskujemy indeks ostatniego elementu (tj. Długości) za pomocąendof
.źródło
Brachylog , 12 bajtów
Wypróbuj online! (jako generator!)
Pobiera dane wejściowe przez zmienną wejściową i wysyła bazę przez zmienną wyjściową w przypadku, gdy jest to możliwe, w przeciwnym razie zawodzi. Jednocześnie działa również jako generator, który wyświetla listę wszystkich baz, przy czym lista ta może być pusta.
Idealnie mogłoby to wyglądać mniej więcej
ḃ↙.=&>>
, prawdopodobnie poświęcając funkcjonalność generatora w takiej lub podobnej formie (ponieważ w końcu stałoby się jednoargumentowe), ale na razie 12 bajtów jest najkrótszym, jaki wiem, jak go zdobyć.źródło
Ruby ,
4643 bajtówUżywa liczb całkowitych # wprowadzonej w Ruby 2.4, aby uniknąć konieczności ręcznego dzielenia.
-3 bajty dzięki @Jordan.
Wypróbuj online!
źródło
05AB1E , 7 bajtów
Zwraca wszystkie możliwe wartości lub pustą listę jako wartość falsey (chociaż technicznie ważne dane wyjściowe są również falsey, ponieważ tylko
1
prawdą jest 05AB1E, a wszystko inne to falsey).Wypróbuj online lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie:
źródło
Perl 5
-Minteger -na
, 63 bajtówWypróbuj online!
Wysyła wszystkie możliwe odpowiedzi lub nic, jeśli nie ma rozwiązania.
źródło