Jest to problem matematyczny, który poddaje w wątpliwość wiele rzeczy, co sprawia, że jest to dość trudne, a jak można się domyślić, jest to golf golfowy, więc powinien być jak najkrótszy.
Wejście , n
to dowolny całkowita liczba (powinien przynajmniej całkowite wsparcie, ale nie muszą być ograniczone do). Wyjściowa jest średnią z:
n
- Kwadrat z
n
- Najbliższa liczba pierwsza do
n
- Najbliższa liczba
n
w sekwencji Fibonacciego
Krótko, program powinien wydrukować na standardowe wyjście kanał ten wynik z (n+(n*n)+closestPrime(n)+closestFib(n))/4
.
Ty nie musisz się martwić o ewentualne przelewy itd. Normalne zmiennoprzecinkową dokładność jest również ok.
Sposób wprowadzania danych zależy wyłącznie od Ciebie. Najkrótszy program (w postaci znaków) wygrywa, jak zawsze w golfach kodowych.
W przypadku remisu, gdy szukasz najbliższego, wybierz jedną z następujących opcji:
- Wchodzić
- Spadać
- Wybierz jeden losowo
Odpowiedzi:
Python 160 znaków
Małe wyjaśnienie na temat najbliższej części Fib:
źródło
[b,a][2*N-a-b<0]
:)GolfScript, 59 znaków
Ten skrypt nie spełnia niektórych wymagań:
n >= 2
, w przeciwnym razie ulega awarii.n
Krótki przewodnik po kodzie:
~:N..*
Dane wejściowe są przechowywane w N, a my od razu popychamy oban
i kwadratn*n
..,2>
Wygenerujemy listę liczb pierwszych, filtrując tablicę[2..n*n]
. Używamy naszych poprzednich obliczeńn*n
jako (bardzo źle!) Górnej granicy do znalezienia liczby pierwszej większej niż n.{:P{(.P\%}do(!},
Nasza poprzednia tablica jest filtrowana według podziału próbnego. Każda liczba całkowita P jest testowana z każdą liczbą całkowitą [P-1..1].{{N-.*}$0=}:C~
Sortuje poprzednią tablicę na podstawie odległości don
i pobiera pierwszy element. Teraz mamy najbliższą liczbę pierwszą.[1.{.@+.N<}do]C
Generujemy Fibonnacis, dopóki nie otrzymamy jednego większego niżn
. Na szczęście ten algorytm naturalnie śledzi poprzednie Fibonnaci, więc rzucamy je zarówno do tablicy, jak i używamy naszego wcześniejszego sortowania odległości. Teraz mamy najbliższy Fibonnaci.+++4/
Średni. Zauważ, że GolfScript nie obsługuje pływaków, więc wynik jest obcinany.GolfScript, 81 znaków
Oto wariant, który spełnia wszystkie wymagania.
Aby zapewnić prawidłowe zachowanie
n<2
, unikam2<
(ulega awarii, gdy tablica jest mała), a zamiast tego używam3,|2,^
. To gwarantuje, że główna tablica kandydująca jest właśnie[2]
wtedyn < 2
. Zmieniłem górną granicę następnej liczby pierwszej zn*n
na2*n
( postulat Bertranda ). Również 0 jest uważane za liczbę Fibonnaci. Wynik jest obliczany w matematyce punktu końcowego na końcu. Co ciekawe, wydaje się, że wynik jest zawsze w czwartych (0, .25, .5, .75), więc mam nadzieję, że 2 miejsca dziesiętne dokładności wystarczą.Mój pierwszy błąd w korzystaniu z GolfScript, jestem pewien, że jest miejsce na ulepszenia!
źródło
JavaScript, 190
[257]
Nieskompresowane:
źródło
a=0
i zwiększysz dodatnio. Zamiast sprawdzaćisPrime
naa
ib
, po prostu sprawdzićisPrime(n+a)
iisPrime(n-a)
. Prawdopodobnie możesz to wszystko połączyć w jedno zwariowane oświadczenie trójkowe, ale ja jestem okropny z javascript.function closestPrime(n,o){return isPrime(n+o)?n+o:isPrime(n-o)?n-o:closestPrime(n,o+1);}
. Nazwij to jakclosestPrime(n,0)
i to się ułoży. Skróć w razie potrzeby.Mathematica,
7069 bajtówJeden bajt zaoszczędzony dzięki Sp3000 (czasem wbudowane nie są najlepszym sposobem na przejście).
Definiuje to nienazwaną funkcję przyjmującą liczbę całkowitą i wytwarzającą dokładną średnią jako liczbę wymierną. W przypadku więzi wybierana jest mniejsza liczba pierwsza / liczba Fibonacciego.
Jest to bardzo nieefektywne w przypadku dużych nakładów, ponieważ w rzeczywistości generuje pierwsze
2n
liczby pierwsze i liczby Fibonacciego przed wybraniem najbliższego.źródło
#&@@#
.. co?#
jest argumentem funkcji czysto (zf
). W tym przypadku jest to właściwie sama funkcja, ponieważf
jest stosowana doPrime
iFibonacci
. To#@Range@...
stosuje daną funkcję do każdej liczby całkowitej w zakresie. Wtedy#&@@
to właśnie golfed sposób wyodrębnić pierwszy element listy. Działa poprzez zastosowanie#&
do listy, która jest funkcją, która jedynie zwraca swój pierwszy argument.Q, 119
Nie najbardziej wydajny.
źródło
MATLAB 88 znaków
n jest twoją liczbą całkowitą
Działa z liczbami niecałkowitymi, o ile testowałem, działa również z bardzo dużymi liczbami, działa też cholernie szybko.
źródło
Scala 299
Test i wywołanie:
Pytanie mówi,
any Integer
ale problem nie jest interesujący dla wartości poniżej 0. Jednak - jak zacząć? 0? O 1? A jaka jest następna liczba pierwsza dla 11? 11 samo?Pomysł, aby pozwolić na następny większy lub niższy w przypadku remisu, jest zły, ponieważ utrudnia porównywanie niepotrzebnych. Jeśli twoje wyniki się różnią, mogą wybrać inne włókno, drugie włókno, inne włókno i inne ziarno, lub twoje są złe, lub wynik drugiej osoby jest zły, lub jest to kombinacja: inny wybór, ale źle, ale może oba źle.
źródło