Biorąc pod uwagę liczbę od 1 do 24, wyślij liczbę całującą zgodnie z najlepszą obecną wiedzą (niektóre liczby będą miały więcej niż jeden akceptowalny wynik). Znajomość geometrii nie jest niezbędna, ponieważ wszystkie wyniki są wymienione poniżej.
Ze strony Wikipedii dotyczącej problemu Całowanie liczb :
liczba całująca jest zdefiniowana jako liczba nie nakładających się sfer jednostkowych, które mogą być ustawione tak, aby każda dotykała innej danej kuli jednostkowej
To znaczy, biorąc pod uwagę jedną kulę jednostkową, ile więcej kul jednostkowych może ją dotknąć bez nakładania się żadnej z nich? Pytanie zostanie zadane w przestrzeni N-wymiarowej, gdzie sfera jest rozumiana jako sfera wymiarowa N-1.
Na przykład:
- w przestrzeni dwuwymiarowej koło jednostki może dotykać 6 innych okręgów jednostki.
- w przestrzeni trójwymiarowej sfera jednostkowa może dotykać 12 innych sfer jednostkowych.
Strona Wikipedia zawiera wartości dla przestrzeni od 1 do 24 wymiarów. Jednak niektóre z nich nie są jeszcze dokładnie znane, dlatego podano tylko dolną i górną granicę. Tabela jest tutaj odtworzona, aby pozostała stała, niezależnie od przyszłego zawężenia zakresów z powodu nowych dowodów. Rozwiązania są oceniane na podstawie tej ustalonej tabeli, nawet jeśli strona Wikipedii zostanie w przyszłości zmodyfikowana.
Tabela granic
Dimension Lower bound Upper bound
1 2 2
2 6 6
3 12 12
4 24 24
5 40 44
6 72 78
7 126 134
8 240 240
9 306 364
10 500 554
11 582 870
12 840 1357
13 1154 2069
14 1606 3183
15 2564 4866
16 4320 7355
17 5346 11072
18 7398 16572
19 10668 24812
20 17400 36764
21 27720 54584
22 49896 82340
23 93150 124416
24 196560 196560
Wkład
Wymiar: Liczba całkowita od 1 do 24 (włącznie).
Tutaj „całkowita” oznacza, że wejście nie będzie mieć część ułamkową - może to być 2
albo 3
ale nigdy 2.5
. Rozwiązanie może na przykład pobierać dane wejściowe jako zmiennoprzecinkowe lub ciąg znaków.
Wydajność
Liczba w odpowiednim zakresie, od dolnej granicy do górnej granicy dla tego wejścia (włącznie).
Wynik musi być deterministyczny (zawsze taki sam dla tego samego wejścia).
Dane wyjściowe muszą być liczbą całkowitą. Na przykład, do wprowadzania 5
możliwych wyjść są ważne 40
, 41
, 42
, 43
, 44
. Uwaga: jest to ograniczenie wartości, a nie typu. Dopuszczalne jest zwracanie liczby zmiennoprzecinkowej, pod warunkiem że ma zerową część ułamkową. Na przykład 41.5
nie byłby ważny, ale 41.0
byłby ważny.
Punktacja
To jest golf golfowy . Twój wynik to liczba bajtów w kodzie. Dla każdego języka zwycięzcą jest rozwiązanie o najniższym wyniku.
źródło
Odpowiedzi:
Julia 0.6 , 52 bajty
Wypróbuj online!
W jaki sposób?
Nauczanie maszynowe! (Trochę. Może. Nie bardzo. )
c
ceil
źródło
MLBase
!!! J / k, linie wokół ML są rozmyte jak zawsze, ale prawdopodobnie jest to zbyt podstawowe, aby zasłużyć na uczenie maszynowe etykiet. Z drugiej strony zawsze przydatne jest wprowadzenie modnego hasła!x86,
62595350 bajtówMoje rozwiązanie wykorzystuje bajtową tablicę odnośników i przesuwa się o 2 (bez obliczeń FP). Wymiary od 9 do 23 zapewniają wystarczającą swobodę zmiany biegów. Wejście
eax
i wyjścieecx
.-3 przez zamianę,
eax
aecx
ponieważcmp $imm, %al
jest on krótszy niżcmp $imm, %cl
.-4, nie traktując oddzielnie sprawy N = 24, ale stosując korektę do wszystkich przypadków 1024.
-2 nie wracając wcześniej (głupio)
-3 przy użyciu tabeli jako przesunięcia i
movzbl
zamiast zerowania za pomocąxor
Hexdump (tabela
.text
zamiast.data
)źródło
.rodata
nie.data
tak. (Lub najwyraźniej w systemie Windows.rdata
)..rodata
Sekcja zostanie połączone w ramach segmentu tekstu.shl
, szczególnie gdy twój numer jest niepodpisany (używałeśmovzbl
go, niemovsbl
). Oczywiściesal
to tylko inna nazwa tego samego kodu operacyjnego. gcc emitujesal
, ale rzadko widuje się go w kodzie odręcznym.JavaScript (ES6), 60 bajtów
Wypróbuj online!
W jaki sposób?
Wszystkie pozostałe warunki są obliczane rekurencyjnie przy użyciu:
prowadząc do następujących wskaźników:
Ostateczny wynik jest ostatecznie wyświetlany i zwracany.
Podsumowanie wyników
Przybliżone wyniki podano z dokładnością do 2 miejsc po przecinku.
źródło
Galaretka ,
2926 bajtówWypróbuj online!
Jak to działa
źródło
JavaScript (Node.js) ,
12099 bajtówUsunięto 21 bajtów. Duża redukcja dzięki sugestii tsh, aby dodać dziurę na początku tablicy (oszczędzając dwa bajty przechodząc od
n-1
don
i dążąc do okrągłych liczb w dolnej i górnej granicy, zmniejszając je w ten sposób od notacji stałoprzecinkowej, jak1154
notacja wykładnicza jak2e3
.Ponownie moim pierwotnym celem było pokazanie, jak lekki byłby „głupi” sposób (np. Nie używanie żadnej prawdziwej matematyki, jak odpowiedź Arnaulda. Imponujące jest to, że wciąż było miejsce, aby ją zmniejszyć bez żadnych przekształceń lub obliczeń.
Wypróbuj online!
Dwa razy więcej niż odpowiedź Arnaulda, 0 stopień złożoności.
JavaScript (Node.js) ,
129128 bajtów(-1 bajt dzięki sugestii użycia przesunięcia bitów)
Wypróbuj online!
Aby spełnić wymagania bycia ciekawym, ukradłem logikę z odpowiedzi x86 i zbudowałem z niej tablicę. Dzięki temu jest o 9 bajtów dłuższy. Ale nieco bardziej interesujący.
źródło
f=
, zmian(x)
dox
, dodać dziurę i zmianyx-1
dox
. TIO ; a może zaokrąglić w górę 99 bajtów TIORuniczne, 173 bajty
(Zauważ, że prawy dolny róg powinien być liczony jako bajty: są one domyślnie wypełnione spacjami).
Exe TIO potrzebuje aktualizacji, na której opiera się ta odpowiedź (i usuwam kilka innych dziur, zanim poproszę Dennisa o odbudowę). Ale podłączenie wartości (pamiętaj, aby dodać białe znaki w wierszach 2 i 3, jeśli używasz więcej niż jednego znaku dla wartości w pierwszym wierszu). Oto najprostszy sposób na zapisanie potrzebnych wartości:
Wypróbuj online!
Funkcjonalnie jest to port odpowiedzi Julii z Sundara (ale Runiczna nie ma komendy wypychania
e
na stos (lub, właściwie, żadnej wartości dziesiętnej), więc potrzebne było przybliżenie). Przybliżenie dlae
danych wejściowych mniejszych niż 8 jest bardziej precyzyjne, ponieważ utrata precyzji spowodowała, że wartości leżą poza dopuszczalnym zakresem wyników (np.7
Dałoby 125).Ceil()
zostało osiągnięte przez konwersję na znak, a następnie z powrotem na liczbę (to nie powiodło się dla wyjątkowo dużych wartości, więc przy 40k miałem go podzielić przez 100, wykonaj konwersję do iz powrotem, a następnie pomnóż ponownie przez 100).Prawdopodobnie jest miejsce na uproszczenie aranżacji (np. Uruchomienie punktu wejścia w pionie, poniżej lub znalezienie sposobu kompresji przybliżeń
e
), ale cieszę się, że mogę wykonać obliczenia.161 bajtów.
Aktualizacja tłumacza:
Dzięki odczytowi wejścia ustalania push Runic ma teraz kilka funkcji matematycznych i zdolność do parsowania łańcuchów jako podwójnych. To znacznie uprości tę odpowiedź, ale zostawię ją tak, aby pochwalić się wysiłkiem, jaki w nią włożyłem (dodałem funkcje matematyczne z jednym argumentem i analizę ciągów znaków wkrótce po opublikowaniu: miałem już Sin / Cos / Tan moja lista rzeczy do zrobienia, ale nie brałem pod uwagę Exp, Abs, Log itp. i brakowało znaków) TIO powinno zaktualizować się w ciągu 24-48 godzin, w zależności od tego, kiedy Dennis to zobaczy.
212,+16,+1c2*,+1cX,+
zmniejszyłby się do ->1'eA
dzięki tej aktualizacji interpretera.A
wyskakuje znak i wartość i wykonuje operację matematyczną na tej wartości na podstawie wyskakującego znaku (e
w tym przypadku jestExp()
iExp(1)
zwraca e ).źródło