Wyzwanie
Biorąc pod uwagę liczbę całkowitą wejściową n > 0
, wypisz liczbę liczb pierwszych ( innych niż n
, jeśli n
sama jest liczbą pierwszą), które można wytworzyć, zmieniając jedną cyfrę w rozwinięciu dziesiętnym n (bez zmiany liczby cyfr).
Przykłady
Na przykład n = 2
. Zmieniając jedną cyfrę w rozwinięciu dziesiętnym 2
, możemy uzyskać trzy dodatkowe liczby pierwsze 3, 5, 7
, więc a(n) = 3
.
Na innym przykładzie n = 13
. Zmieniając jedną cyfrę, można uzyskać liczby pierwsze 11, 17, 19, 23, 43, 53, 73, 83
, więc a(13) = 8
.
Dla końcowego np n = 20
. Zmieniając jedną cyfrę, można uzyskać liczby pierwsze 23, 29
, więc a(20) = 2
.
Sekwencja
Oto pierwsze 20 warunków na początek. To jest OEIS A048853 .
4, 3, 3, 4, 3, 4, 3, 4, 4, 4, 7, 4, 8, 4, 4, 4, 7, 4, 7, 2
Zasady
- Można założyć, że dane wejściowe i wyjściowe pasują do natywnego typu liczb całkowitych twojego języka.
- Dane wejściowe i wyjściowe można podawać w dowolnym dogodnym formacie .
- Zignoruj wiodące zera (na przykład
03
nie jest liczbą pierwszą w tym sformułowaniu). - Dopuszczalny jest pełny program lub funkcja. Jeśli funkcja, możesz zwrócić dane wyjściowe zamiast je drukować.
- Jeśli to możliwe, dołącz link do internetowego środowiska testowego, aby inni mogli wypróbować Twój kod!
- 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).
code-golf
sequence
arithmetic
primes
AdmBorkBork
źródło
źródło
n
dla których jest wyjście0
. Tak mi się wydajen = 200
. Myślę, że również one są w pęczkach:200,202,204,206,208
,320,322,...,328
,510,...,518
,620,...628
,840,...,848
, itd.Odpowiedzi:
05AB1E ,
17161411 bajtówWyjaśnienie:
Wypróbuj online! lub do 100 .
źródło
.L
? Poważnie?.L
?!?!L
.<
aby zapisać bajt. Nawet jeśli filtr nie usuwa100
/1000
/10000
/ itp., To i tak nigdy nie jest liczbą pierwszą, więc nie wpłynie to na wynik.Python 2 ,
146 136 127 121118 bajtówDzięki @ Mr.Xcoder za sugestie
Wyjaśnienie:
Generuj liczby o długości równej długości wejściowej, najpierw pomijając (1,10,100,1000, ...)
Sprawdź, czy wygenerowana liczba różni się od danych wejściowych tylko jedną cyfrą
Sprawdź liczbę pierwszą
Liczyć
Wypróbuj online!
źródło
r=range
, ponieważ używasz go wiele razy ...?143
? Ponieważ widzęrange(1,10)
, że to wyklucza0
i103
jest najważniejsze0
wr(0,10)
.r(10)
wystarczy.lambda I,r=range:
JavaScript (ES6) 148 bajtów
Pobiera dane wejściowe jako ciąg znaków i zwraca jako liczbę
Przykładowy fragment kodu:
źródło
Galaretka ,
211815 bajtów3 bajty dzięki Dennisowi.
Wypróbuj online! lub Zweryfikuj wszystkie przypadki testowe .
źródło
æḟ⁵æR×⁵$DnDS€ċ1
oszczędza kilka bajtów.Mathematica, 105 bajtów
Wypróbuj online!
Function
która oczekuje dodatniej liczby całkowitej#
. Ustawia wartośćf
równą funkcji,IntegerDigits
która zwraca listę cyfr jej wejścia. BierzemyRange
odg
do10g
(włącznie), gdzieg=10^Length@f@#/10
jest największa moc10
mniejsza lub równa do wejścia#
, a następnie takie, że . sprawdza, czy jest liczbą pierwszą, sprawdza, czy różnica między listą cyfr i ma postać , oraz zapewnia, że i są .Count
n
PrimeQ@n&&MatchQ[f@n-f@#,{x=0...,_,x}]&&n!=#
PrimeQ@n
n
MatchQ[f@n-f@#,{x=0...,_,x}]
n
#
{0..., _, 0...}
n!=#
n
#
Unequal
źródło
JavaScript (ES6),
153142139 bajtówAkceptuje dane wejściowe jako ciąg. Niezdefiniowane zachowanie dla niepoprawnych danych wejściowych, chociaż powinno zakończyć się bezbłędnie na dowolnym łańcuchu, jaki mogę wymyślić. Jednak niekoniecznie przed śmiercią we wszechświecie, szczególnie w przypadku długich łańcuchów.
Próbny
Ulepszenia
Zaoszczędzono 11 bajtów, refaktoryzując
reduce()
wywołania namap()
wywołania i niejawnie kopiując tablicęa
w parametrze funkcji, zamiast w kontekściesplice()
wywołania.Zapisany 3 bajty dzięki @Neil sugestia „s przekonwertować
[...Array(10)]
do[...''+1e9]
.Kod nieuprawniony
Wyjaśnienie
Funkcja używa dwupoziomowego
map()
do zsumowania liczby permutacji, które przejdą test pierwotności, który został pożyczony i zmodyfikowany na podstawie tej odpowiedzi .(Oryginalna odpowiedź)
Tak na przykład, aby obliczyć sumę tablicy, należy zdać
initialValue
z0
, i zwróciaggregate
równaaccumulator + currentValue
. Nieznacznie modyfikując to podejście, zamiast tego obliczamy liczbę permutacji, które przejdą test pierwotności:Jest to zasadniczo wewnętrzna
reduce()
, która iteruje wszystkie permutacjedigitArray
, zmieniając każdądecimal
z nich na określonąpermutatedDigit
. Następnie potrzebujemy zewnętrznego,reduce()
aby iterować wszystkie możliwe elementypermutatedDigit
, które można zastąpićdecimal
, co jest słuszne0-9
.Nieprawidłowości we wdrażaniu
[...''+1e9].map((u,j)=>...
była najkrótsza droga @Neil mógł wymyślić iteracyjne argument0
za9
. Byłoby to wskazaneu
, aleu
w tym przypadku nie jest przydatne dla każdego elementu w tablicy.i+j
w warunkach trójskładnikowych sprawdza,0
czy nie jest możliwa permutacja cyfry wiodącej, zgodnie ze specyfikacją wyzwania.j!=c
zapewnia, że oryginałn
nie jest kandydatem do przejścia testu pierwotności.(a.splice(i,1,j),a.join``)
jest trochę bałaganu.splice()
zamienia cyfrę atdecimal == i
napermutatedDigit == j
, ale ponieważsplice()
zwraca usunięte elementy (w tym przypadku byłyby równe[a[i]]
) zamiast zmodyfikowanej tablicy, musimy użyć operatora przecinka, aby przekazać zmodyfikowaną tablicęa
do testu pierwotności, ale nie przedjoin()
jej wprowadzeniem na ciąg liczbowy.Na koniec
eval()
należy zapisać bajt, ponieważ w porównaniu z podejściem bardziej kanonicznym jest krótszy:Odwołanie do testu podstawowego
p
jest inicjowane nieużywanym argumentemmap()
wywołania.źródło
[...''+1e9]
jest krótsza.Python 2 , 134 bajty
Wypróbuj online!
Bardziej elegancka, dłuższa wersja:
Dane wejściowe są traktowane jako ciąg.
Objaśnienie (starsza wersja)
lambda x,r=range,l=len:
- Definiuje lambda z parametrem Stringx
i dwoma stałymi parametramir=range
orazl=len
.sum(1...)
- Uzyskaj długość, która pozwala zaoszczędzić 1 bajtlen([...])
.for f in r(10**~-l(x),10**l(x))
- Generuje absolutnie wszystkie liczby o tym samym rzędzie wielkości co dane wejściowe (oczekiwane dla0
). Na przykład wpisanie3
spowoduje, że[1, 2, 3, 4, 5, 6, 7, 8, 9]
.sum(1for t in r(l(x))if`f`[t]==x[t])==~-l(x)and f>1
- Sprawdza, czy bieżąca liczba jest dokładnie o 1 cyfrę od wejścia i czy jest większa niż 1.all(f%v for v in r(2,f))
- Sprawdza, czy bieżąca liczba jest liczbą pierwszą.źródło
sum(1for..ifBOOL)
abysum(BOOLfor)
zaoszczędzić trochę bajtów</joke>
)JavaScript (ES6), 137 bajtów
Dostosowuje moją drugą odpowiedź do przesłania pełnego programu przy użyciu metod interfejsu API sieci Web
prompt()
ialert()
.źródło
Fasola , 126 bajtów
Wypróbuj online!
Dostosowanie mojego pełnego kodu JavaScript .
Odpowiednik JavaScript
Wyjaśnienie
a
jest domyślnie inicjowany jako pierwszy wiersz danych wejściowych jako ciąg, a ostatnia instrukcjas
jest niejawnie wyprowadzana, która zawiera sumę pierwszych permutacji.źródło
Łuska , 32 bajty
Wypróbuj online!
Niegolfowane / Wyjaśnienie
źródło
Japt ,
2823 bajtów-5 bajtów dzięki @ETHproductions.
Pobiera ciąg jako dane wejściowe.
Wypróbuj online!
źródło
¬x@AÇ|Y©+UhYZsÃâ kUn)èj
?PHP ,
151147141140136134129128 bajtów-6 bajtów dzięki @Einacio; -1 bajt dzięki @Titus
Wypróbuj online!
Sformatowane, z komentarzami:
Aby było tak krótkie, jak tylko mogłem,:
$f = $t = 1
;++
inkrement jako część innego wyrażenia$f += $i % $t++ == 0
(przyrost jest wykonywany po operacji modułu, a więc nie wpływa na jego wynik);if
instrukcji dla przyrostu warunkowego, wykorzystano fakt, że wartość logiczna true, gdy rzutuje się na liczbę całkowitą, staje się 1, używając$c += $f == 2;
raczej niżif ($f == 2) $c++;
.źródło
levenshtein
. Dobry pomysł!$i%$t++<1
jest krótszy niż$i%$t++==0
.Perl 6 , 83 bajtów
Wypróbuj online!
źródło
X~
zamiastmap
? 81 bajtówPHP, 100 + 1 bajtów
Uruchom jako potok z
-nR
lub spróbuj online .awaria
źródło
Java 8,
201194 bajtówWyjaśnienie:
Wypróbuj tutaj.
new Integer(s.substring(0,i)+j+(i<l?s.substring(i+1):"")
spowoduje, że te liczby całkowite:Dla
0-9
:1, 2, 3, 4, 5, 6, 7, 8, 9
.Dla
10
:10, 20, 30, 40, 50, 60, 70, 80, 90, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19
.Dla
11
:11, 21, 31, 41, 51, 61, 71, 81, 91, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19
.itp.
źródło
JavaScript (ES7), 118 bajtów
Pobiera dane wejściowe jako ciąg.
Wypróbuj online!
Skomentował
źródło
Ruby z
-rprime
, 101 bajtów-rprime
Wypróbuj online!
źródło