Pytanie: Biorąc pod uwagę liczbę n
≥ 2, ile par punktów na odrębne n
wymiarowej n x n x n x n x n x n ... x n
siatki, gdzie współrzędne wynosić od 0
celu n - 1
, są w odległości co najmniej n
od siebie? Pary {(2,1,3,1), (3,2,1,3)}
i {(3,2,1,3), (2,1,3,1)}
nie są uważane za odrębne od siebie, ponieważ składają się z tych samych dwóch punktów w odwrotnej kolejności. Zauważ, że całkowita liczba par rośnie bardzo szybko. Liczba wszystkich parach idzie 6
, 351
, 32 640
, 4 881 250
, 1 088 367 840
, itd.
Przypadki testowe:
2 -> 0 (all pairs are at most a distance of sqrt(2) < 2 apart)
3 -> 28 (They must either be (2,2,1) or a permutation apart, or (2,2,2) apart. Each corner
has three non-corner (2,2,1) points corresponding to it. And each corner is associated
with a corner pair that is a (2,2,2). Thus. 3.5 * 8 = 28.
4 -> 4,888
5 -> 1,501,948
6 -> 486,039,360 (I would like someone to verify this if possible)
Twój kod powinien działać dla n <= 5, przynajmniej w teorii. Nie koduj na stałe, to standardowa luka.
code-golf
combinatorics
takielunek
źródło
źródło
n=15
łatwon=20
ale bardzo cierpi z powodu przepełnieniaall pairs are at most a distance of sqrt(2) apart
ale należy to sprecyzować.Odpowiedzi:
MATL , 12 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
Galaretka ,
1413 bajtów1 bajt dzięki Dennisowi.
Wypróbuj online!
Szybka wersja maffs
Wypróbuj online!
źródło
æ.`½
zÆḊ€
.n=5
, tylko nie za minutę. (może to zająć więcej niż wiek wszechświata, bądź ostrożny) To nie jest najszybszy kod, więc po co zawracać sobie głowę szybkim działaniem kodu?Python 2 ,
137133 bajtówMr Xcoder i ovs: -4 bajty. Wypróbuj online!
źródło
f=
)J , 40 bajtów
Wypróbuj online!
Przekroczy limit czasu dla TIO na 5, jeśli użyjesz rozszerzonej precyzji (
5x
zamiast5
). Nie zamierzam zawracać sobie głowy próbowaniem z 6 na moim komputerze, ponieważ to z pewnością spowoduje awarię interpretera.Poszukuję porady na temat gry w golfa, w szczególności tej po wygenerowaniu współrzędnych. Czuję, że powinien istnieć sposób na usunięcie niektórych nakrętek.
]<:[:+/&.:*:"1
może być równoważnie zastąpiony przez*:<:[:+/"1[:*:
.Wyjaśnienie
Wyjaśnienie to zostało wykonane na REPL (trzy spacje oznaczają polecenie, brak spacji oznacza wynik). Będę budować do odpowiedzi.
Generowanie współrzędnych
#~ #: i.@^~
podaje wszystkie współrzędne, na których nam zależy, na siatce.^~
jest liczbą podniesioną do siebie ii.
daje zakres [0, n), gdzie n jest jego wejściem.@
komponuje te funkcje.#~
samodzielnie kopiuje liczbę, np#:
konwertuje swój prawy argument na bazę określoną przez tablicę podaną jako lewy argument. Liczba cyfr w tablicy odpowiada liczbie cyfr w tej wyjściowej podstawie (i możesz mieć mieszaną bazę) Na przykład:Podsumowując, mówi się o wyliczeniu przez wszystkie wartości od podstawy n (gdzie n jest wejściem) do n ^ n, skutecznie podając nasze współrzędne.
Uzyskiwanie odległości między każdą parą
Najpierw bierzemy różnicę każdej współrzędnej ze wszystkimi pozostałymi za pomocą tabeli
/
-~
diada i -refleksji. Zauważ, że nie bierze to pod uwagę faktu, że kolejność nie ma znaczenia dla par: generuje to podwójne odległości.Następnie używamy tego czasownika
+/&.:*:
na każdej współrzędnej (at"1
, aka ranga 1). Ten czasownik to sum (+/
) under (&.:
) square (*:
). Pod stosuje się prawy czasownik (kwadrat), a następnie zbiera jego wyniki i podaje go jako argument dla lewego czasownika (suma). Następnie stosuje odwrotność prawego czasownika (który byłby pierwiastkiem kwadratowym).Nic dziwnego, że wiele odległości jest takich samych.
Liczenie odległości większych lub równych wejściowi
Ostatnią częścią jest sprawdzenie, czy odległość jest większa lub równa wartości wejściowej przy użyciu
]<:
. Następnie wszystkie wyniki są sumowane za pomocą+/^:_
(sumuj aż do zbieżności), licząc liczbę prawdziwych wartości. Następnie wartość ta jest dzielona przez 2 (2%~
tutaj~
oznacza zamianę kolejności dostarczonych argumentów%
). Powodem, dla którego możemy podzielić przez 2, jest to, że dla każdej zgodnej z prawdą parowania będzie kolejna dla odwróconej kolejności, z wyjątkiem par, które są ze sobą współrzędnymi. W porządku, ponieważ spowoduje to powstanie odległości 0.źródło
+/@,@(-:@<:+/&.:*:@:-"1/~)#~#:i.@^~