Dzisiaj w mojej klasie statystyk odkryłem, że niektóre czynniki można uprościć, jeśli zostaną pomnożone razem! Na przykład:5! * 3! = 5! *3*2 = 5! *6 = 6!
Twoja praca:
Biorąc pod uwagę ciąg zawierający tylko cyfry arabskie i wykrzykniki, uprość mój silniak do najkrótszego możliwego ciągu, w jak najmniejszej liczbie bajtów dla twojego języka, stylu golfowego.
Wejście
Ciąg zawierający tylko liczby arabskie i wykrzykniki. Współczynniki wejściowe nie będą większe niż 200 !. Silniki nie będą miały więcej niż jednego silnia na liczbę. Dane wejściowe można traktować jako listę liczb całkowitych.
Wynik
Prawdopodobnie skrócony ciąg, który ma równoważną wartość na wejściu. Zamówienie jest nieważne. Notacja czynnikowa jest koniecznością, ale nie musisz używać więcej niż jednego symbolu czynnikowego na liczbę.
Przypadki testowe
In: 3!2!2!
Out: 4!
In 2!3!2!0!
Out: 4!
In: 7!2!2!7!2!2!2!2!
Out: 8!8!
In: 23!3!2!2!
Out: 24!
Also: 4!!
In: 23!3!2!2!2!
Out: 24!2!
In: 127!2!2!2!2!2!2!2!
Out: 128!
In: 32!56!29!128!
Out: 29!32!56!128!
Powodzenia
1!1!
pusty ciąg znaków?Odpowiedzi:
Galaretka ,
1718 bajtówMonadyczny link pobierający i zwracający listę liczb (trzyma się jednej opcji silnia na liczbę)
Wypróbuj online!
W jaki sposób?
Gra w golfa (choć napisana niezależnie) rozwiązania Pietu1998.
źródło
Galaretka , 19 bajtów
Wypróbuj online!
Szybko i brudno. Bardzo wolno, nawet
23!2!3!2!
przypadek testowy jest odcinkiem. I / O jako listy liczb całkowitych.Wyjaśnienie
źródło
Czysty ,
397... 317 bajtówWypróbuj online!
Przyjmuje to
[Int]
, określa główne czynniki wyniku i zmniejsza ponad czynniki, aby znaleźć najmniejszą reprezentację, używając największego współczynnika na dowolnym etapie jako wartości wyjściowej dla następnego składnika czynnikowego. Nie ukończy niektórych testów na TIO, ale jest dość * szybki i może uruchomić je wszystkie w mniej niż 3 minuty na laptopie średniej klasy.* dla
O((prod(N)!)^sum(N))
algorytmu złożonościźródło
> <> , 66 bajtów
Wypróbuj online!
Nieefektywny, nie znajduje najmniejszego ciągu, a tłumacz nie radzi sobie zbyt dobrze z bardzo dużymi liczbami. Ale przynajmniej próbowałem? Pobiera dane wejściowe jako listę liczb za pośrednictwem
-v
flagi.Najpierw oblicza wartość wejściową, dzieląc każdą liczbę i mnożąc je razem. Następnie znajduje największy czynnik, który dzieli czysto na sumę i generuje go. Powtarzaj, aż albo otrzyma liczbę pierwszą (którą wyprowadza) lub 1 i wyjdzie z programu. Z tego powodu, że czasami nie znaleźć najkrótszą reprezentację liczby, na przykład w przypadku testu
7!2!2!7!2!2!2!2!
powraca10!224
zamiast8!8!
bo stwierdzi suma jest podzielna przez 10! pierwszy.źródło
Rubinowy ,
240 237233 bajtyJest to niezwykle nieefektywne
Akceptuje tablicę liczb całkowitych jako dane wejściowe
Zwraca ciąg znaków i wybiera najkrótszą opcję między, powiedzmy
'720!'
,'6!!'
a'3!!!'
Wypróbuj online!
źródło