Wyzwanie
Biorąc pod uwagę 3 numery X
, Y
a Z
w bazie B
, znaleźć B
ASE, w którym dodawanie X
i Y
rentowności Z
. Wejścia x = 20
, Y = 12
i Z = 32
może przynieść 5
ponieważ 20 + 12 = 32
w podstawie 5.
- Możesz założyć, że zawsze będzie podstawa, w której dodanie jest poprawne (są przypadki, w których nie istnieje podstawa, dzięki @ MasonWheeler i @ Not that Charles za kilka przykładów tego).
- Najniższa możliwa podstawa to 1. Możesz użyć 1 lub 0 jako cyfr w jedności, ale nie możesz ich mieszać.
I / O
- Cyfry liczb wejściowych będą nieujemnymi liczbami całkowitymi.
- Możesz założyć, że liczby wejściowe zawierają zera wiodące, więc mają określoną (lub taką samą) długość.
- Możesz wziąć liczby w najwygodniejszym formacie, o ile nie są one wstępnie przetworzone. Obejmuje to ogólny format trzech liczb wejściowych i format cyfr każdej z tych liczb. Wyjaśnij, którego formatu używasz.
- Jeśli istnieje wiele możliwych zasad, możesz wypisać wszystkie lub tylko jedną z nich.
- Możesz założyć, że numery bazowe i wejściowe mieszczą się w granicach liczbowych twojego języka.
Zasady
- Dozwolona funkcja lub pełny program.
- Domyślne reguły wejścia / wyjścia.
- Obowiązują standardowe luki .
- To jest golf golfowy , więc wygrywa najmniej bajtów. Tiebreaker to wcześniejsze zgłoszenie.
Przypadki testowe
Format wejściowy to lista liczb całkowitych reprezentujących każdą liczbę. Trzy listy są oddzielone przecinkami.
Pamiętaj, że czasami istnieje wiele baz. Wyświetlane jest tylko jedno (losowe) rozwiązanie.
[12, 103], [4, 101], [16, 204] -> 349 [4, 21, 25], [5, 1, 20], [9, 23, 17] -> 28 [16, 11], [25, 94], [41, 105] -> 147 [2, 140], [21, 183], [24, 100] -> 223 [8, 157], [1, 28], [9, 185] -> 227 [2, 158], [88], [3, 12] -> 234 [8, 199], [1, 34], [9, 233] -> 408 [3, 247], [7, 438], [11, 221] -> 464 [3, 122], [3, 2], [6, 124] -> 480 [6, 328], [3, 31], [9, 359] -> 465 [2, 1, 0, 0, 0, 0], [1, 2, 0, 0, 1, 0, 1, 0], [1, 2, 2, 1, 1, 0, 1, 0] - > 3 [16, 105], [16, 120], [33, 84] -> 141 [15, 60], [9, 30], [24, 90] -> 268 [2, 0], [1, 2], [3, 2] -> 5 [1, 3, 3, 7], [1, 2, 3], [1, 4, 6, 0] -> 10 [0], [1, 12, 8], [1, 12, 8] -> 16 [1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1], [1, 0, 0, 1, 0, 1, 1, 1, 0, 0 , 1], [1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0] -> 2 [1], [1], [1,1] -> 1
Za pomocą tego programu Pyth można generować dodatkowe przypadki testowe . Wpisz bazę na pierwszej linii i wartości dziesiętnych X
i Y
na dwóch liniach.
Możesz także użyć tego programu Pyth do tworzenia wielu przypadków testowych jednocześnie przy użyciu losowych wartości. Wystarczy wprowadzić żądaną liczbę przypadków testowych w danych wejściowych.
Happy Coding!
Odpowiedzi:
Galaretka,
16117 bajtówTo podejście jest w dużej mierze oparte na odpowiedzi Octave @ zlewki .
Format wejściowy to Z, Y, X , z kolejnością cyfr little-endian, przy użyciu cyfry 0 dla jedności.
Wypróbuj online! lub uruchom wszystkie przypadki testowe .
Jak to działa
Zamiast stopniowo testowania potencjalnych zasady, to rozwiązuje wielomianu który odpowiada tablicy P: = X + Y - . Zwraca albo największy współczynnik P ≠ 0 - który musi być pierwiastkiem, ponieważ istnieje co najmniej jedna ważna podstawa - lub najwyższą cyfrą X , Y i Z , zwiększoną o 1 .
źródło
Pyth, 13 bajtów
Oczekuje Z, a następnie X i Y.
Zestaw testowy
Zasadniczo testujemy każdą możliwą bazę, zaczynając od jednej więcej niż największej cyfry. Test polega na tym, że konwertujemy każdą liczbę na daną podstawę, a następnie rozkładamy odejmowanie na liczbach i logicznie negujemy wynik.
źródło
Oktawa,
67753832 bajtyPonieważ „zapętlenie WSZYSTKICH rzeczy” to zbyt wiele pracy.
Wymaga wypełnienia 0, aby tablice wejściowe miały ten sam rozmiar, np .:
Ponieważ
0
jest używany do wypełniania,1
służy jako token dla unary.(Podziękowania dla @DenkerAffe za wyjaśnienie w pytaniu.)
Próbka uruchomiona na ideone .
Krótkie wyjaśnienie:
Weź sprawę bez noszenia:
W takim przypadku nie ma żadnych ograniczeń bazowych, o ile jest ona większa niż jakakolwiek „cyfra”. Po prostu weź maksymalny element
z
(asz >= x,y
) i dodaj 1 (lub dowolną dodatnią liczbę całkowitą).W przypadku przeprowadzenia (bez przeniesienia) przekroczyliśmy bazę w jednej z kolumn, a różnica między
x+y
iz
jest bazą:Gdyby suma drugiej kolumny również przekroczyła podstawę, wymagając zarówno przeniesienia, jak i przeniesienia, jego wartość wyniosłaby
base+(-1)
. Będziemy mieć kolumnę gdzieś po prawej stronie z przeprowadzeniem i żadne przeniesienie, które ma poprawną (większą) wartość bazową.źródło
Haskell,
9073 bajtówPrzykład użycia:
f [[3, 247],[7, 438],[11, 221]]
->464
.Po prostu wypróbuj wszystkie zasady
b
(gdzieb
jest większa niż maksymalna liczba cyfr). Wybierz pierwszy gdziex+y==z
.Edycja: @xnor zapisał wiele bajtów, przede wszystkim pozbywając się
import Data.Digits
.źródło
unDigits b
zrobi to, co myślę, wdrożenie powinno być krótszefoldl(\x y->b*x+y)0
lub równoważnefoldl((+).(b*))0
.maximum
po spłaszczeniu:b<-[1+(maximum$id=<<l)..]
.maximum
jakb<-[1..],all(<b)$id=<<l
.d
podstawowego nie powinnyb
być0 <= d < b
, więc dla podstawy1
jedyną możliwą cyfrą jest0
?f [[0],[0],[0,0]]
ocenia na1
.MATL , 20 bajtów
Dane wejściowe mają format (zwróć uwagę na zewnętrzne nawiasy klamrowe):
Działa to w aktualnej wersji (15.0.0) .
Wypróbuj online!
Wyjaśnienie
źródło
MATL,
1312 bajtówTłumaczenie mojej odpowiedzi Octave na MATL. (Moja pierwsza odpowiedź MATL!)
Z, X, Y
(lubZ, Y, X
jeśli wolisz, jestem łatwa)Wypróbuj online!
Wyjaśnienie
źródło