Pierwsze dwie liczby MU to 2 i 3. Każda inna liczba MU to najmniejsza jeszcze nie pojawiająca się liczba, którą można wyrazić jako iloczyn dwóch wcześniejszych odrębnych liczb MU w dokładnie jeden sposób.
Oto pierwsze 10
2, 3, 6, 12, 18, 24, 48, 54, 96, 162
Zadanie
Biorąc pod uwagę liczbę dodatnią, oblicz i wyślij n -tą liczbę MU.
To zawody w golfa , więc powinieneś dążyć do tego, aby kod źródłowy był jak najmniejszy.
Odpowiedzi:
Pyth,
2221 bajtówWypróbuj online. Zestaw testowy.
0-indeksowane.
Wyjaśnienie
źródło
@
Znak w ostatnim wierszu jest wyrównana. Nie mogę dokonać sugerowanej edycji, ponieważ jest to zmiana 2 znaków.Haskell,
8077 bajtówWypróbuj online!
Jak to działa
źródło
Galaretka , 22 bajty
Łącze monadyczne, indeksowane 1.
Wypróbuj online!
W jaki sposób?
źródło
R ,
1271181111081051009890 bajtów8 bajtów dzięki Giuseppe.
Wypróbuj online!
źródło
<
ma on niższy priorytet niż+
nie mogłem zrozumieć, co do cholery+g%in%r<3
robiło, a kiedy to robiłem, grałeś w golfa w dwóch częściach, które zamierzałem zasugerować ... +1n=scan()
zamiast definicji funkcji do odczytu ze standardowego wejścia; poniżej 100 lat0
CJam (32 bajty)
Demo online z indeksowaniem 0.
Nie jestem pewien, czy jest wiele do zrobienia poza trywialnym tłumaczeniem specyfikacji z jednym wyjątkiem: zaczynając od listy
[0 1 2 3]
(zamiast[2, 3]
) zapisuję jeden bajt natychmiast po inicjalizacji, a kolejne dwa przez możliwość0=|
(dodając tylko nowy element, ponieważ jego częstotliwość jest1
i jest już na liście), ale nie wprowadzaj żadnych fałszywych elementów, ponieważ dla każdegox
na liście0*x
i1*x
już są na liście.źródło
Python 2 ,
127118 bajtówWypróbuj online!
źródło
Mathematica, 154 bajty
prosta modyfikacja kodu znajdująca się w linku oeis
źródło
PHP , 130 bajtów
0-indeksowane
Wypróbuj online!
Rozszerzony
PHP , 159 bajtów
0-indeksowane
Wypróbuj online!
PHP , 161 bajtów
0-indeksowane
Wypróbuj online!
źródło
Mathematica, 140 bajtów
źródło
MATL , 25 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
Perl 6 , 96 bajtów
Wypróbuj online!
2, 3, { ... } ... *
jest nieskończoną sekwencją, w której każdy element rozpoczynający się od trzeciego jest obliczany przez blok kodu rozdzielany nawiasami klamrowymi. Ponieważ blok kodu pobiera argumenty za pośrednictwem@_
tablicy slurpy , otrzymuje całą bieżącą sekwencję w tej tablicy.@_.combinations(2)
jest sekwencją wszystkich 2-elementowych kombinacji@_
..classify({ [*] $_ })
klasyfikuje każdą 2-krotkę według produktu, tworząc skrót, w którym produkty są kluczami, a wartości są listą 2-krotek zawierających ten produkt..grep(*.value == 1)
wybiera te pary klucz-wartość z skrótu, w którym wartość (tj. lista par mających ten klucz jako produkt) ma rozmiar 1.».key
wybiera tylko klucze z każdej pary. To jest lista produktów, które powstają tylko z jednej kombinacji czynników bieżącej sekwencji..sort
sortuje produkty numerycznie.first * ∉ @_, ...
znajduje pierwszy z tych produktów, które nie pojawiły się w sekwencji.źródło
JavaScript (ES6),
119118117 bajtówFunkcja rekurencyjna, która przyjmuje indeks oparty na 0.
W jaki sposób?
Przy każdej iteracji f () używamy ostatniego terminu m sekwencji i początkowo pustej tablicy b do identyfikacji następnego terminu. Dla każdego produktu d> m dwóch wcześniejszych odrębnych numerów MU wykonujemy:
a następnie zachowaj minimalną wartość b .
Powyższe wyrażenie jest oceniane w następujący sposób:
Gwarantuje to, że produkty, które można wyrazić na wiele sposobów, nigdy nie zostaną wybrane.
Sformatowane i skomentowane
Próbny
Pokaż fragment kodu
źródło
Haskell ,
117115113 bajtówWypróbuj online!
źródło
n x=(*)<$>x<*>1:x
Python
32 ,167139136133123121120118 bajtówWypróbuj online!
Dzięki @ Mr.Xcoder i @LeakyNun za ulepszenia!
źródło
p.count(q)==1
nap.count(q)>0
jest poprawna, ponieważ jest to kod, który zapewnia warunek wyzwania „dokładnie w jeden sposób”.p.count(q)-~(q in a)<=3
jest równoważne zp.count(q)+(q in a)<3