(Losowo inspirowany /mathpro//q/339890 )
(Powiązane: 1 , 2 )
Biorąc pod uwagę listę wejściową różnych liczb pierwszych (np. [2, 5, 7]
) I liczbę całkowitą n
, wypisz wszystkie dodatnie liczby całkowite ściśle mniejsze niż te, n
które zawierają tylko te liczby pierwsze jako dzielniki. Dla danych wejściowych, [2, 5, 7]
a n=15
to oznacza wartość wyjściową [2, 4, 5, 7, 8, 10, 14]
.
Dalsze przykłady
[list] n | output
[2, 5, 7] 15 | [2, 4, 5, 7, 8, 10, 14]
[2, 5, 7] 14 | [2, 4, 5, 7, 8, 10]
[2] 3 | [2]
[2] 9 | [2, 4, 8]
[103, 101, 97] 10000 | [97, 101, 103, 9409, 9797, 9991]
[97, 101, 103] 104 | [97, 101, 103]
Zasady i wyjaśnienia
- Lista wejściowa jest gwarantowana jako niepusta, ale może być tylko jednym elementem
- Możesz założyć, że lista wejściowa jest wstępnie posortowana w najbardziej dogodny sposób
n
zawsze będzie większy niż największy element na liście danych wejściowych- Ponieważ np.
2**0 = 1
Możesz opcjonalnie dołączyć1
do swojej listy wyników - Dane wejściowe i wyjściowe można podać dowolną dogodną metodą
- Możesz wydrukować wynik do STDOUT lub zwrócić go jako wynik funkcji
- Dopuszczalny jest pełny program lub funkcja
- Jeśli dotyczy, możesz założyć, że liczby całkowite wejścia / wyjścia pasują do natywnego
int
zakresu twojego języka - Standardowe luki są zabronione
- To jest golf golfowy, więc obowiązują wszystkie zwykłe zasady gry w golfa, a wygrywa najkrótszy kod (w bajtach)
1
na wynik.[2, 3, 7]
, nie możesz użyć5
.Odpowiedzi:
Stax , 6 bajtów
Uruchom i debuguj na staxlang.xyz!
Rozpakowane (7 bajtów) i objaśnienie:
źródło
05AB1E , 6 bajtów
Pobiera liczbę całkowitą jako pierwsze wejście, a listę jako drugie. Obejmuje opcjonalne
1
w danych wyjściowych.Wypróbuj online lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie:
Dwie 6 bajtowe alternatywy dostarczone przez @Grimy :
Wypróbuj online.
Ten jest bardzo wolny (
[2,5,7], 15
przypadek testowy już się skończył), ale mniej niż pozostałe dwa podejścia:W przeciwieństwie do pozostałych dwóch programów powyżej, lista przyjmuje jako pierwsze wejście, a liczba całkowita jako druga. Zawiera jednak również opcjonalny
1
wynik.Wypróbuj online.
źródło
sиPѦʒ›
. Myślałem, że mam 6, ale wydaje się, że nie ma sposobu na użycies
/I
/¹
4747561509943000000000000000
. ;)GNfåP–
JavaScript (ES6),
64 ... 5250 bajtówZajmuje wejście jak
(n)(primes)
gdzie liczb pierwszych jest zbiorem. Wyjście poprzez modyfikację zestawu.Wypróbuj online!
Skomentował
źródło
Python 3 ,
6865 bajtówWypróbuj online!
-3 bajty dzięki @xnor
Funkcja przyjmuje jako sekwencję pierwszą sekwencję i liczbę całkowitą n. Dane wyjściowe to lista zawierająca 1.
Nie golfowany:
Wypróbuj online!
źródło
c*s<n*s
. Edycja:n//c*s
jest krótsza.Haskell , 51 bajtów
x
p
mapM((<$>[0..n]).(^))p
product
n
p
Wypróbuj online!
źródło
Haskell , 39 bajtów
Wypróbuj online!
Sprawdza, czy
k
można podzielić tylko przez liczby pierwszel
, sprawdzając, czy iloczynl
wziętej do dużej mocy jest podzielny przezk
.źródło
Python 2 , 65 bajtów
Wypróbuj online!
Sprawdza, czy
k
można podzielić tylko przez liczby pierwszel
, sprawdzając, czy iloczynl
wziętej do dużej mocy jest podzielny przezk
.Jeśli
l
można przyjmować w postaci listy łańcuchóweval("*".join(l))
oszczędza 3 bajty nadreduce(int.__mul__,l)
i mogą być używane w Pythonie 3, który brakujereduce
.Python 3 , 64 bajty
Wypróbuj online!
Funkcja drukuje w odwrotnej kolejności i kończy się z błędem.
Poniższe rozwiązanie rekurencyjne byłoby krótsze, gdyby
n
samo znalazło się na liście. Próbowałem również rekurencyjnie obliczać iloczynl
, ale to było dłużej.62 bajty (niedziałające)
Wypróbuj online!
źródło
Gaia , 10 bajtów
Wypróbuj online!
Nigdy wcześniej nie korzystałem
‡
z monady, jest to całkiem przydatne do manipulacji stosami.źródło
J , 24 bajty
Wypróbuj online!
źródło
Galaretka , 7 bajtów
Wypróbuj online!
Diadadicowy link przyjmujący wyłączną górną granicę za lewy argument i listę liczb pierwszych za prawą. Zwraca listę zawierającą 1, a także liczby złożone tylko z podanych liczb pierwszych.
Alternatywą byłoby 7
ṖÆfḟ¥Ðḟ
źródło
Python 2 , 98 bajtów
Wypróbuj online!
źródło
Japt
-f
,118 bajtówSpróbuj
źródło
Japt
-f
, 7 bajtówSpróbuj
źródło
1
to dane wyjściowe, których nie powinno. Zacząłem odk e!øV
dla mojego rozwiązania, ale potrzebowałem 2 dodatkowych bajtów do filtrowania0
i1
.Since, e.g., 2**0 = 1, you can optionally include 1 in your output list
Ruby
-rprime
, 61 bajtówWypróbuj online!
źródło
Retina 0.8.2 , 64 bajty
Wypróbuj online! Lista zawiera mniejsze przypadki testowe (
10000
przekroczony limit czasu z powodu wszystkich długich ciągów). Pobiera dane wejściowe w kolejnościn f1 f2 f3...
(czynniki nie muszą być liczbami pierwszymi, ale muszą być pierwszymi pierwszymi). Dane wyjściowe obejmują1
. Wyjaśnienie:Konwertuj na unary.
Wygeneruj listę od 0 do
n-1
dziesiętnych i jednoargumentowych.Wielokrotnie podziel jedność przez dowolne dostępne czynniki.
Podaj liczby dziesiętne, w których liczba jednoargumentowa została zredukowana do
1
.źródło
Pyth , 10 bajtów
Wypróbuj online!
Pobiera dane wejściowe jako
[[primes...], n]
źródło
Perl 6 , 27 bajtów
Wypróbuj online!
Rozwiązanie Xnor's Haskell. Wyjścia również 1.
źródło
Węgiel drzewny ,
2220 bajtówWypróbuj online! Link jest do pełnej wersji kodu. Zbyt wolny dla większego przypadku testowego. Wyjaśnienie:
Poprzednia szybsza 22-bajtowa odpowiedź:
Wypróbuj online! Link jest do pełnej wersji kodu. Dane wyjściowe obejmują
1
. Wyjaśnienie:Wciśnij
1
do wstępnie zdefiniowanej pustej listy.Pętla nad listą, w tym wszelkie elementy wypychane do niej podczas pętli.
Pomnóż bieżącą pozycję przez każdą liczbę pierwszą i zapętl produkty.
Sprawdź, czy produkt jest nową wartością.
Jeśli tak, to wypchnij go na listę.
Wydrukuj listę.
źródło
C (brzęk) , 115 bajtów
Wypróbuj online!
Rozwiązanie oparte na sicie Eratostenesa.
(Obejmuje 1 wynik)
Dzięki sugestii @ceilingcat: printf (x [i] + "\ 0% d", i ++) zamiast x [i] && printf ("% d", i), i ++ Podejrzewam, że przesuwa wskaźnik literału, ale nie zrobił nie znalazłem żadnej dokumentacji, jeśli ktoś mógłby dać mi jakieś spostrzeżenia, byłby mile widziany.
źródło
x[i]==1
to ciąg jest"%d "
. Jeślix[i]==0
to ciąg jest""
. Ciągi C są zakończone znakiem NULL, więc jawny znak zerowy kończy ciąg. Ten hack narusza również niektóre niezdefiniowane zachowania w brzękach związanych zi++
.