Otrzymujesz zestaw dodatnich liczb całkowitych. Musisz ułożyć je w pary, aby:
- Każda para zawiera 2 liczby, z których jedna jest wielokrotnością innej. Na przykład 8 to wielokrotność 4, a 9 to wielokrotność 9.
- Jeśli ta sama liczba występuje wiele razy w zestawie początkowym, można jej użyć wiele razy w parach; numer można nawet powiązać z innym wystąpieniem tego samego numeru
- Uzyskuje się maksymalną możliwą liczbę par.
Dane wyjściowe muszą być liczbą par. Najkrótszy kod wygrywa.
Przykładowe dane
2,3,4,8,9,18
-> 3
7,14,28,42,56
-> 2
7,1,9,9,4,9,9,1,3,9,8,5
-> 6
8,88,888,8888,88888,888888
-> 3
2,6,7,17,16,35,15,9,83,7
-> 2
code-golf
math
number
number-theory
permutations
ghosts_in_the_code
źródło
źródło
2,3,4,8,9,18
. (Każda liczba na tej liście jest współczynnikiem i / lub wielokrotnością co najmniej dwóch innych liczb na liście, ale ma tylko jedno rozwiązanie.)Odpowiedzi:
Haskell,
1091077670 bajtówDzięki nim za uratowanie 33 bajtów i nauczenie mnie więcej Haskell. :)
Dzięki xnor za zapisanie kolejnych 6 bajtów.
Tak, mój pierwszy golf Haskell. Działa tak samo jak wszystkie dotychczasowe odpowiedzi (cóż, niezupełnie: liczy tylko długość najdłuższego prefiksu prawidłowych par w każdej permutacji, ale jest to równoważne i tak naprawdę zrobił mój oryginalny kod CJam).
Dla dodatkowej golfa jest to również wyjątkowo nieefektywne poprzez rekurencyjne generowanie wszystkich permutacji sufiksu za każdym razem, gdy pierwsze dwa elementy permutacji są prawidłową parą.
źródło
f=
konieczne?chunksOf
jest bolesny. Naprawdę nie znam standardowej biblioteki Haskella, aby móc stwierdzić, czy istnieje krótsza równoważna funkcja. Próbowałem go zaimplementować sam, ale wyszło dwa lub trzy bajty dłużej niż import.[]
i[_]
stawianie nag x=[]
drugim miejscu jest naprawdę sprytne. Spróbuję. Dzięki :)f l=maximum$0:[1+f t|(a:b:t)<-permutations l,a`mod`b<1]
.CJam,
2218 bajtówWypróbuj online.
Oczekuje danych wejściowych w postaci listy w stylu CJam.
To jest trochę nieefektywne w przypadku większych list (a Java prawdopodobnie zabraknie pamięci, chyba że dasz jej więcej).
Wyjaśnienie
źródło
[1 2 3 4 5 6 7 8 9 10]
Jednak,[7 1 9 9 4 9 9 1 3 9 8 1]
która jest dłuższą listą, działa poprawnie. Dlaczego?10! = 3628800
, ale12! / 5! / 3! = 665280
. Więc zabrakło pamięci dla pierwszego przypadku. Jeśli uruchomisz go z konsoli za pomocą interpretera Java, możesz powiedzieć Javie, aby używała więcej pamięci, a pierwszy przypadek również by działał (chociaż może to chwilę potrwać, nie wiem).Pyth, 13 bajtów
Czas i złożoność przechowywania jest naprawdę okropna. Pierwszą rzeczą, którą robię, jest utworzenie listy ze wszystkimi permutacjami pierwotnej listy. To wymaga
n*n!
miejsca do przechowywania. Listy wejściowe o długości 9 zajmują już dość dużo czasu.Wypróbuj online: pakiet demonstracyjny lub testowy
Wyjaśnienie:
źródło
Mathematica,
95938783796058 bajtówWiększe przykłady trwają kilka sekund.
źródło
Matlab (120 + 114 = 234)
Główny:
funkcja cylinder jest wywoływana przez część główną.
dane wejściowe są w formie
[. . .]
źródło
Matlab (365)
To najwyraźniej jest dłuższe, ale oneliner i wykonawczy, i udało mi się uciec
perms
funkcji, ponieważ trwa to wiecznie.Ta funkcja wymaga wielu ponownych uruchomień, aby działać cicho ze względu na anonimowe funkcje, jestem otwarty na sugestie tutaj :)
źródło