W matematyce tetracja to kolejny hiperoperator po potęgowaniu i jest definiowany jako potęgowanie iterowane.
Dodatek ( udało n razy)
Mnożenie ( dodaje się do siebie, n razy)
Potęgowanie ( mnożone przez siebie, n razy)
Tetracja ( potęgowania przez siebie, n razy)
Odwrotne relacje tetracji nazywane są super-rootem i super-logarytmem. Twoim zadaniem jest napisanie programu, który, biorąc pod uwagę A i B, wypisuje super-root B- drugiego rzędu A.
Na przykład:
- jeśli A =
65,536
i B =4
drukuje2
- jeśli A =
7,625,597,484,987
i B =3
drukuje3
A i B są dodatnimi liczbami całkowitymi, a wynik musi być liczbą zmiennoprzecinkową z dokładnością do 5 cyfr po przecinku. Wynik należy do prawdziwej domeny.
Uważaj, super-root może mieć wiele rozwiązań.
Odpowiedzi:
C - dążąc do przejrzystości, nie próbował ścisnąć kodu
Biorąc pod uwagę wkład:
Wtedy zwykle powinno być tylko jedno rozwiązanie w ℝ, co znacznie upraszcza problem.
Kod to:
Kompilować:
Biegać:
Na przykład:
4 2
3 3
3 π
n (2 ½ ) ➙ 2 as n ➙ ∞? (dobrze znany limit)
Tak!
n (e 1 / e ) ➙ ∞ as n ➙ ∞? (górne granice)
Fajne! (e 1 / e ≅ 1,44466786101 ...)
źródło
Python, 87 znaków
Proste liniowe wyszukiwanie odpowiedzi.
Nie na temat, ale co * * $ (@! Działa z
**
operatorem python ?źródło
(1e200)**2
do1e(200**2)
?OverflowError
w pierwszym przypadku byłoby to wygenerowanie .Mathematica,
3540Generuje listę wszystkich rozwiązań z dokładnością do 5 cyfr.
5 kolejnych postaci, aby uzyskać tylko prawdziwe rozwiązanie, którego wymagają zaktualizowane zasady.
źródło
Julia
Zignorowano instrukcję zmiennoprzecinkową, ponieważ pytanie określa tylko zachowanie liczb całkowitych.
źródło
Kiedy to stało się golfem kodowym? Pomyślałem, że wymyślenie najlepszego algorytmu to wyzwanie.
golf-golf
APL, 33 znaki
Jest to proste wyszukiwanie liniowe, zaczynające się od C = 1 + 10-6 i zwiększające go o 10 -6, aż do
log C log C log C ⋯ A ≤ 1,
gdy funkcja log C jest stosowana rekurencyjnie B razy.
Przykłady
Ten kod jest bardzo wolny, ale dla małych baz, takich jak 2 lub 3, kończy się w kilka sekund. Zobacz poniżej lepszą rzecz.
kod-wyzwanie
APL, złożoność logarytmiczna
Właściwie liniowa złożoność w kolejności pierwiastkowej, logarytmiczna w stosunku do wielkości wyniku i precyzji:
czas = O (B × log (C) + B × log (D))
gdzie B jest porządkiem pierwiastka, C jest pytaną o bazę tetracji, a D jest liczbą zadawanych cyfr precyzji. Ta złożoność jest moim intuicyjnym zrozumieniem, nie przedstawiłem formalnego dowodu.
Algorytm ten nie wymaga dużych liczb całkowitych, używa tylko funkcji logu na zwykłych liczbach zmiennoprzecinkowych, dlatego jest dość wydajny na bardzo dużych liczbach, aż do limitu implementacji liczb zmiennoprzecinkowych (albo podwójna precyzja, albo dowolne duże liczby FP na Implementacje APL, które je oferują).
Precyzja wyniku może być kontrolowana poprzez ustawienie
⎕CT
(tolerancji porównania) pożądanego dopuszczalnego błędu (w moim systemie domyślnie jest to 1e¯14, około 14 cyfr dziesiętnych)Nie jestem pewien, czy
1≥⍵⍟⍣n
powyższe może zawieść z błędem domeny (ponieważ dziennik argumentu ujemnego może albo zawieść natychmiast, albo dać złożony wynik, którego nie byłoby w domenie≥
), ale nie byłem w stanie znaleźć przypadek, który zawodzi.Przykłady
„3” pojawia się jako dokładna wartość, ponieważ zdarza się, że jest to jedna z wartości bezpośrednio dotkniętych przez wyszukiwanie binarne (od 2, podwojona do 4, dwusieczna do 3). W ogólnym przypadku tak się nie dzieje, więc wynik aproksymuje wartość pierwiastkową z błędem moreCT (a dokładniej, test logarytmiczny każdej kandydującej bazy przeprowadzany jest z tolerancją ⎕CT).
źródło
Rubinowy, 79 bajtów
Jest to to samo, co poniższy program, ale mniej dokładne, ponieważ uruchamia tylko 99 pętli.
Rubinowy, 87 bajtów
Wypróbuj online
To jest po prostu bisekcja. Nie golfowany:
źródło
k [52 znaki]
Zmodyfikowana wersja moim poście n -tego pierwiastka
Przykład:
źródło
Haskell
Proste wyszukiwanie liniowe, zwraca pierwsze, najmniejsze znalezione dopasowanie.
Przykład
źródło
Mathematica, 41 bajtów bez optymalizacji
Mathematica została po prostu wymyślona w celu rozwiązania takich problemów. Jednym łatwym rozwiązaniem jest skonstruowanie problemu jako zagnieżdżonej serii mocy i przekazanie go do wbudowanej
Reduce
funkcji, która szuka analitycznych rozwiązań równań. W rezultacie, oprócz tego, że kod jest niezwykle zwięzły, nie jest też brutalną siłą.Możesz usunąć to ograniczenie, aby zapewnić tylko rozwiązania liczb rzeczywistych, jeśli jesteś cierpliwy i chcesz zaoszczędzić sześć bajtów. Możesz również wyrazić niektóre z zagnieżdżonych funkcji w formie skróconej, aby zaoszczędzić jeszcze kilka bajtów. Jak podano, wraca w ten sposób
źródło
05AB1E , 16 bajtów
Port odpowiedzi Python @KeithRandall .
Wypróbuj online.
Wyjaśnienie:
ÐU²FXm}
może być równieżD²>и.»m
dla tej samej liczby bajtów:źródło