Mamy wiele wyzwań w oparciu o bazę 10, bazę 2, bazę 36, a nawet bazę -10 , ale co z wszystkimi innymi racjonalnymi bazami?
Zadanie
Biorąc pod uwagę liczbę całkowitą w podstawie 10 i bazę wymierną, zwróć liczbę całkowitą w tej podstawie (jako tablicę, łańcuch itp.).
Proces
Trudno wyobrazić sobie racjonalną bazę, więc wyobraźmy ją sobie za pomocą Exploding Dots :
Rozważ tę animację, wyrażając 17 w bazie 3:
Każda kropka reprezentuje jednostkę, a pola reprezentują cyfry: skrajne pole po prawej to miejsce jednego, pole środkowe to miejsce 3 ^ 1, a skrajne pole po lewej to 3 ^ 2.
Możemy zacząć od 17 kropek w jednym miejscu. Jest to jednak podstawa 3, więc miejsce musi być mniejsze niż 3. Dlatego „eksplodujemy” 3 kropki i tworzymy kropkę na polu po lewej stronie. Powtarzamy to, dopóki nie osiągniemy stabilnej pozycji bez punktów wybuchowych (tj. 3 kropki w tym samym polu).
Zatem 17 w podstawie 10 wynosi 122 w podstawie 3.
Podstawa ułamkowa jest analogiczna do rozbijania pewnej liczby kropek na więcej niż jedną kropkę. Baza 3/2 eksplodowałaby 3 kropkami, tworząc 2.
Wyrażanie 17 w bazie 3/2:
Zatem 17 w podstawie 10 to 21012 w podstawie 3/2.
Zasady ujemne działają podobnie, ale musimy śledzić znaki (używając tak zwanych anty-kropek, równych -1; reprezentowanych przez otwarte koło).
Wyrażanie 17 w bazie -3:
Uwaga: istnieją dodatkowe eksplozje, aby znak wszystkich pól był taki sam (ignorując zera).
Zatem 17 w podstawie 10 wynosi 212 w podstawie -3.
Negatywne racjonalne podstawy działają podobnie, w kombinacji dwóch powyższych przypadków.
Zasady
- Brak standardowych luk.
- Znak każdej „cyfry” na wyjściu musi być taki sam (lub zero).
- Wartość bezwzględna wszystkich cyfr musi być mniejsza niż wartość bezwzględna licznika podstawy.
- Możesz założyć, że wartość bezwzględna podstawy jest większa niż 1.
- Możesz założyć, że racjonalna podstawa jest w najniższej zredukowanej formie.
- Możesz wziąć licznik i mianownik podstawy osobno na wejściu.
- Jeśli liczba ma wiele reprezentacji, możesz wypisać dowolną z nich. (przykład 12 w bazie 10 można
{-2, -8}
i{1, 9, 2}
w bazie -10)
Przypadki testowe:
Format: {in, base} -> result
{7, 4/3} -> {3, 3}
{-42, -2} -> {1, 0, 1, 0, 1, 0}
{-112, -7/3} -> {-6, -5, 0, -1, 0}
{1234, 9/2} -> {2, 3, 6, 4, 1}
{60043, -37/3} -> {-33, -14, -22, -8}
Ponieważ niektóre dane wejściowe mogą mieć wiele reprezentacji, zalecam testowanie danych wyjściowych przy użyciu tego fragmentu kodu Mathematica w TIO.
To jest golf golfowy , więc wygrane z najkrótszą liczbą bajtów w każdym języku wygrywają!
Aby uzyskać więcej informacji na temat eksplodujących kropek, odwiedź stronę globalnego projektu matematycznego ! Mają mnóstwo fajnych rzeczy matematycznych!
źródło
Odpowiedzi:
Python 2 ,
4239 bajtówWypróbuj online!
Dzięki @xnor za znalezienie krótszej formy.
Przestarzała wersja (42 bajty):
Wypróbuj online!
Parametry: wejście, licznik (ze znakiem) i mianownik.
Zwraca tablicę, zaczynając od najniższej cyfry.
To po prostu działa, ponieważ podział i modulo w Pythonie podąża za znakiem mianownika, więc nie musimy wyraźnie przejmować się tymi samymi znakami.
Dane wyjściowe przypadku testowego:
źródło
Aheui (esotop) , 91 bajtów
Wypróbuj online!
Trwa
integer
,numerator of base
idenominator of base
.Ze względu na ograniczenia interpretera TIO każde wejście musi kończyć się nową linią.
Implementacja odpowiedzi na pytanie Python 2 w Bubbler . Na szczęście ten interpretator Aheui jest napisany w Pythonie, więc możemy użyć tej samej sztuczki.
źródło
05AB1E ,
1110 bajtówWypróbuj online!
Trwa
integer
,numerator of base
idenominator of base
jak wszystkie odpowiedzi. Ponieważ interpreter 05AB1E jest napisany w Pythonie (?), Sztuczka odpowiedzi w Pythonie 2 w Bubbler może być również używana w 05AB1E.Wyjaśnienie
Więc program działa mniej więcej tak samo jak ten kod Pythona:
11> 10 Dzięki Neil
źródło
_
zamiast0Q
tutaj.