Będziesz musiał wygenerować najmniejszą n
liczbę pierwszą za pomocą cyfr i będzie ona zawierać tylko cyfry określone na liście k
.
Przykłady:
Wkład:
4
1 2
W tym celu musisz wygenerować najmniejszą 4
liczbę pierwszą za pomocą cyfr, a ta liczba pierwsza musi zawierać tylko cyfry 1
i 2
.
Wydajność:
2111
Wkład:
10
0 4 7
Wydajność:
4000000007
Wkład:
6
5 5 5 5 5 5 5 5 5 5 1 5 5 5 5 5 5 5 5 5 5
Wydajność:
115151
Możesz zagwarantować, że dane wejściowe będą zawsze w określonym przez ciebie formacie, i możesz zrobić wszystko, jeśli dostaniesz nieprawidłowe dane wejściowe (takie jak dane wejściowe n
bez cyfr k
).
Jeśli nie ma takiego rozwiązania dla danych wejściowych, twój program może wykonać dowolną z następujących czynności:
- Wydrukować
banana
- Zgłaszaj błąd
- Biegnij wiecznie
- Coś jeszcze
Ponieważ jest to kod-golf , staraj się znaleźć najkrótszy kod.
Dane wejściowe mogą mieć dowolny określony format. Na przykład, jeśli chcesz, aby dane wejściowe były podobne do poniższych, nie ma problemu.
4
[1, 2]
[1,2]4
1,2
4
4 12
Możesz napisać program lub funkcję i musi ona zwrócić poprawną wartość lub ją wydrukować.
Białe znaki są dozwolone w dowolnym miejscu.
To wyzwanie zainspirowane A036229 .
Odpowiedzi:
Brachylog (2), 8 bajtów
Wypróbuj online!
Bardzo powolny w przypadku problemów, które mają wiele możliwych cyfr lub które zawierają 0 w zestawie możliwych cyfr ( w tym przypadku to działa ; po prostu jest o tyle wolniejszy, że TIO przekracza limit czasu, chyba że problem jest bardzo prosty). Jak zwykle w przypadku Brachylog, jest to funkcja, a nie pełny program.
Dane wejściowe są pobierane w formacie
[ndigits,[list of digits]]
np[10,[[0,4,7]]]
.Wyjaśnienie
Patrząc z czysto deklaratywnego punktu widzenia, mówi to: „znajdź liczbę pierwszą o podanej liczbie cyfr, gdzie wszystkie cyfry są jedną z podanych cyfr”. Aby znaleźć najmniejszą taką liczbę, korzystamy ze wskazówek dotyczących oceny, aby upewnić się, że kolejność, w której testujemy liczby, jest najmniejsza do największej; w tym przypadku
ᵐ
sprawia , że decyzje na początku listy są mniej podatne na zmiany niż decyzje na końcu (jest to jego naturalny porządek, który jest taki sam jak leksykograficzny, a tym samym porządek liczbowy na liczbach całkowitych), a zatem{o∋}ᵐ
ma dwa porządki oceny podpowiedzi: „najpierw zmieniaj kilka ostatnich cyfr” (zᵐ
naturalnego porządku) jako ważniejszą wskazówkę i „sprawdzaj mniejsze cyfry przed dużymi cyframi” (zo
przed∋
, która działa w tym kontekście jako wskazówka) jako rozstrzygnięcie remisu.{o∋}ᵐ
można zapisać jako ekwiwalentoᵐ∋ᵐ
zapisu bajtu.źródło
Pakiet Bash + bsd-games, 28 bajtów
Dane wejściowe podane w wierszu poleceń jako n, po których następuje k jako nieograniczona lista cyfr.
Wypróbuj online.
źródło
Python 2 , 66 bajtów
Wypróbuj online!
Przyjmuje dane wejściowe jak
f(3,{'9','3','8'})
.Python nie ma wbudowanych liczb pierwszych, więc funkcja generuje je za pomocą Twierdzenia Wilsona, aby z kolei sprawdzić każdą potencjalną wartość
k
jako pierwszą.Łańcuchowa nierówność
10**~-n<p%k*k<s>=set(`k`)
łączy trzy warunkik
:10**~-n<k
:k
zawiera co najmniejn
cyfry. Nie musimy dokładnie sprawdzać, ponieważ jeśli osiągniemy więcej cyfr, to nie mogło być rozwiązaniap%k>0
:k
jest liczbą pierwszą, poprzez warunek Twierdzenia Wilsona zp=(n-1)!^2
. Ponieważp%k
jest to 0 lub 1, można to połączyć z poprzednim warunkiem jako10**~-n<p%k*k
s>=set(`k`)
: Wszystkie cyfryk
są w zestawies
. Można to połączyć, ponieważ Python 2 uważa, że zestawy są większe niż liczby.Jeśli prąd
k
nie spełnia wszystkich z nich, funkcja powraca nak+1
, dodając 1 do wynikowego wyniku. Ponieważ wyjście kończy się tym,True
co jest równe1
ik
zaczyna się od1
, wyjście jestk
. To równoległe śledzeniek
uderzeń generujek
bezpośrednio sukces.źródło
JavaScript (ES7), 100 bajtów
Pobiera dane wejściowe jako liczbę cyfr
n
i ciąg dozwolonych cyfrs
w składni curry(n)(s)
. Zwraca,undefined
jeśli nie znaleziono rozwiązania.Działa dość szybko dla maksymalnie 6 cyfr, może działać dla 7 i zdecydowanie zbyt wolno - i głodny pamięci - poza tym.
Test
Pokaż fragment kodu
źródło
n=>s=>[...Array(10**n).keys()].find(i=>eval(`/[${s}]{${n}}/`).test(i)&(p=j=>i%--j?p(j):j==1)(i))
Galaretka , 12 bajtów
Bierze zestaw i liczbę całkowitą jako argumenty wiersza poleceń. Wyświetla 0, jeśli nie ma rozwiązania.
Wypróbuj online!
Jak to działa
źródło
Pyke,
1816 bajtówWypróbuj tutaj!
Działa wiecznie, jeśli nie znaleziono żadnych wartości
źródło
Mathematica, 64 bajty
Czysta funkcja, w której pierwszy argument to (posortowana) lista dozwolonych cyfr, a drugi argument to dozwolona długość.
Tuples@##
oblicza wszystkie listy dozwolonych cyfr o dozwolonej długości, a następnie znajdujemy te,FirstCase
które pasująx:{f_,___}
tak, że pierwsza cyfraf
nie jest,0
a liczba całkowitay=FromDigits@x
jest liczbą pierwszą i zamienia ją nay
.źródło
/;
testu, aby wybrać krotkę, ale także:>
przekonwertować na żądany format wyjściowy. (Widzę w dokumentacji, że jest to dozwolone, ale dopiero po przeczytaniu tej odpowiedzi!) Powinieneś określić, że twoja funkcja wymaga sortowania dozwolonych cyfr: daje złą odpowiedź3331
zamiast,3313
jeśli zostanie wywołana za pomocą[{3,1},4]
.Select[FromDigits/@Tuples[Sort@#,#2],PrimeQ][[1]]&@@#&
?0
i@@#&
wydaje się zbędne.Brachylog , 15 bajtów
Wypróbuj online!
To jest dość powolne.
Wyjaśnienie
źródło
JavaScript (ES6), 86 bajtów
Pobiera dane wejściowe za pomocą składni curry, np.
(4)('12')
Do uruchomienia w trybie ścisłym (w celu optymalizacji wezwania ogona [TCO] ). Jeśli twoje środowisko nie obsługuje TCO, spowoduje błąd przepełnienia stosu dla liczb pierwszych większych niż stos środowisk.
W przypadku nieprawidłowych danych wejściowych będzie działać wiecznie.
Uwaga:
chrome://flags/#enable-javascript-harmony
i włączyć tę flagę, aby uruchomić powyższy fragment kodu z obsługą TCO.źródło
F=i=>(P=j=>i%--j?P(j):1==j)(i)&&...
MATL, 17 bajtów
Ta funkcja przyjmuje dwa wejścia, liczbę całkowitą określającą liczbę cyfr oraz tablicę znaków wskazującą możliwe wartości. W przypadku braku liczb pierwszych wyświetlany jest błąd.
Wypróbuj online!
Wyjaśnienie
źródło
Pyth -
1312 bajtówPakiet testowy .
źródło
Szałwia, 62 bajty
Pobiera dane z formularza:
f( 4 , {'1','2'} )
źródło
Perl 6 , 43 bajtów
Działa wiecznie, jeśli nie ma rozwiązania.
źródło
05AB1E , 17 bajtów
Wypróbuj online!
źródło
05AB1E ,
221918 bajtów (-1 @ Riley)Wypróbuj online!
źródło
,
na końcu.Perl5, 77 bajtów
Uruchom tak:
źródło
Rubinowy,
7776 bajtówFormat wejściowy: liczba i ciąg.
Przykład:
źródło
Perl 6 , 68 bajtów
Spróbuj
Zwraca,
Nil
jeśli nie można znaleźć takiej liczby pierwszej.Rozszerzony:
źródło
Python 2 + primefac ,
9185 bajtówWypróbuj online
Dane wejściowe są jak
4,{'1','2'}
.źródło
1,{'1'}
nie jest prawidłowym wejściem (ponieważ 1 nie jest liczbą pierwszą), więc możesz robić, co chcesz.PHP, 82 bajty
Pobiera liczbę i ciąg cyfr z argumentów wiersza poleceń. Uruchom z
-nr
.awaria
źródło
Java 7,
139141 bajtów+2 bajty, obsługując liczby powyżej 32-bitów (zmieniono
int
nalong
)Format wejściowy: liczba całkowita (tj.
4
) I ciąg (tj."12"
)Wyjaśnienie:
Kod testowy:
Wypróbuj tutaj.
UWAGA: Drugi przypadek testowy jest wyłączony, ponieważ zapętla się przez bardzo długi czas.
Wydajność:
źródło