tło
Środki metaliczne , zaczynając od słynnego złotego środka , są zdefiniowane dla każdej liczby naturalnej (dodatnia liczba całkowita), a każda z nich jest stałą nieracjonalną (ma nieskończoną, powtarzającą się ekspansję dziesiętną).
W przypadku liczby naturalnej średnia metaliczna jest pierwiastkiem równania kwadratowego
Korzenie są zawsze
ale średnia metaliczna jest zwykle podawana jako dodatni pierwiastek. Tak więc dla tego pytania zostanie zdefiniowane przez:
Na wyniku jest słynny Złoty stosunek:
Wyzwanie
Twój kod powinien przyjmować 2 dane wejściowe: nip (kolejność nie jest ważna, dopóki jest spójna)
- n jest liczbą naturalną wskazującą, który środek metaliczny
- p jest liczbą naturalną wskazującą liczbę miejsc dziesiętnych dokładności
Twój kod powinien wyświetlać n-ty metaliczny średni do p miejsc po przecinku.
Ważność
Twój kod jest poprawny, jeśli działa dla wartości nip od 1 do 65 535.
Musisz podać liczbę dziesiętną w postaci
cyfry. cyfry (bez spacji)
Na przykład złoty oznacza do 9 miejsc po przecinku
1.618033988
Wyświetl ostatnią cyfrę bez zaokrąglania, ponieważ pojawiłaby się w dłuższym rozwinięciu dziesiętnym. Następna cyfra złotego środka to 7, ale ostatnich 8 w tym przykładzie nie należy zaokrąglać w górę do 9.
Liczba cyfr dziesiętnych musi wynosić p, co oznacza, że muszą być również uwzględnione wszystkie zera końcowe.
Odpowiedzi z formularza
są niepoprawne - musisz użyć rozszerzenia dziesiętnego.
Możesz wygenerować do 1 wiodącej nowej linii i do 1 końcowej nowej linii. Nie możesz wyprowadzać spacji ani żadnych innych znaków oprócz cyfr i pojedynczego punktu / kropki / kropki.
Wynik
To jest standardowy kod golfowy: twój wynik to liczba bajtów w twoim kodzie.
Tabela liderów
(Korzystanie z fragmentu tabeli liderów Martina )
R, 116 bajtów
Odczytuje dwie liczby całkowite ze STDIN i drukuje wynik do STDOUT. Możesz spróbować online .
Niegolfowane + wyjaśnienie:
Jeśli nie masz
Rmpfr
zainstalowanej biblioteki, możeszinstall.packages("Rmpfr")
i wszystkie twoje marzenia się spełnią.źródło
Mathematica, 50 bajtów
Definiuje anonimową funkcję, która przyjmuje
n
ip
porządkuje. Używam,Floor
aby zapobiec zaokrąglaniu za pomocąSetAccuracy
, którego potrzebuję, aby uzyskać wynik dziesiętny.źródło
p>15
.CJam, 35 bajtów
Najpierw czyta p , a następnie n .
Wypróbuj online w interpretatorze CJam .
Jak to działa
Po prostu obliczamy wzór z pytania dla n × 10 p , otrzymujemy liczbę całkowitą i ułamkową wyniku podzieloną przez 10 p , wypełniamy część ułamkową wiodącymi zerami, aby uzyskać cyfry p i drukujemy części oddzielone kropką.
źródło
Python 2, 92 bajty
Gdy patrzę teraz na odpowiedzi, wygląda na to, że odpowiedź CJam używa tej samej podstawowej metody, co ta. Oblicza odpowiedź,
n*10**p
a następnie dodaje kropkę dziesiętną. Jest niewiarygodnie nieefektywny ze względu na sposób, w jaki oblicza całkowitą część pierwiastka kwadratowego (wystarczy dodać 1, aż do niego dojdzie).źródło
PHP,
8578 bajtówWykorzystuje rozszerzenie matematyczne BC Math, które w niektórych systemach może być niedostępne. Należy uwzględnić czas kompilacji , określając
--enable-bcmath
opcję wiersza poleceń. Jest zawsze dostępny w systemie Windows i wygląda na to, że jest również zawarty w wersji PHP dołączonej do OSX.Aktualizacja :
Zastosowałem wszystkie hacki sugerowane przez @blackhole w ich komentarzach (dziękuję!), A następnie ścisnąłem inicjalizację
$n
do pierwszego użycia (zapisane jeszcze 3 bajty), a teraz kod mieści się w jednym wierszu w polu kodu powyżej.źródło
echo
, po prostu zostaw po nim spację.bcscale
się powrotutrue
, możesz użyć$n=$argv[bcscale($argv[2])];
i zapisać jeszcze 2 bajty.bcpow($n,2)
zamiastbcmul($n,$n)
oszczędzać 1 bajt.J, 27 bajtów
Wyjaśnienie:
Nazwij to tak:
Kolejne, nieco chłodniejsze rozwiązanie:
Który oblicza pierwiastki wielomianu x ^ 2 - nx - 1. Niestety, sposób, w jaki J formatuje wynik, powoduje, że pobieranie pożądanego pierwiastka jest nieco dłuższe.
źródło