Wielkoduszne liczby

24

Biorąc pod uwagę dodatnią liczbę całkowitą jako dane wejściowe, określ, czy jest to wielkoduszna liczba.

Wielkoduszna liczba to liczba taka, że ​​każde wstawienie +znaku między dowolnymi dwiema cyframi w podstawie 10 powoduje wyrażenie pierwszej liczby całkowitej.

Na przykład 40427 jest wspaniałomyślny, ponieważ

4+0427  = 431  is prime
40+427  = 467  is prime
404+27  = 431  is prime
4042+7  = 4049 is prime

Wydajność

Powinieneś wypisać dwie różne wartości, jedną, gdy wejście jest wspaniałomyślne, a drugą, gdy wejście nie jest.

Punktacja

Celem tego konkursu będzie zmniejszenie rozmiaru kodu źródłowego napisanego w celu rozwiązania tego zadania, podanego w bajtach.

Przypadki testowe

1       -> True
2       -> True
4       -> True
10      -> False
98      -> True
101     -> True
109     -> False
819     -> False
4063    -> True
40427   -> True
2000221 -> True

OEIS 253996

Kreator pszenicy
źródło
Jestem po prostu zdezorientowany definicją wyzwania, w którym 1 i 2 są nawet prawidłowymi danymi wejściowymi. Nie mówiąc już o tym, że 1ze znakiem plus wstawionym między dowolnymi dwoma znakami (bez wstawiania) może to tylko skutkować 1, co samo w sobie nie jest liczbą pierwszą.
Magic Octopus Urn
4
@MagicOctopusUrn Znak plus musi być wstawiony między dwie cyfry, dlatego ponieważ 1i 2nie mają dwóch cyfr, zestaw wyrażeń jest pusty. Wszyscy członkowie pustego zestawu są pierwsi. Poza tym żaden z nich nie jest, ale to nie ma sensu. To trochę mylące, dam ci to, ale myślę, że ma to większy sens niż alternatywy.
Kreator pszenicy

Odpowiedzi:

8

05AB1E , 10 bajtów

Kod

η¨¹.s¨R+pP

Wykorzystuje kodowanie 05AB1E . Wypróbuj online! lub Zweryfikuj wszystkie przypadki testowe!

Wyjaśnienie

η¨             # Take the prefixes of the input and remove the last element
  ¹.s¨         # Take the suffixes of the input and remove the last element
      R        # Reverse the array of suffixes
       +       # Vectorized addition
        p      # Check if each element is prime
         P     # Product of the array
Adnan
źródło
Jak to działa 1 - 9. Produktem pustego zestawu jest 1? Czemu?
Magic Octopus Urn
@MagicOctopusUrn Pusty produkt zawsze jest równy 1.
Adnan
@MagicOctopusUrn Przyjmowanie produktu zaczyna się od 1pomnożenia go przez każdy element w zestawie, więc ...
ETHproductions
1
Ach, matematycznie ma sens. Zgadnij, jak sumon []jest równoważny 0, używając właściwości indukcyjnej, gdy implementacja była całkiem sprytna.
Magic Octopus Urn
@ jontro Tak, w UTF-8 ma 14 bajtów. Jednak 05AB1E używa strony kodowej 05AB1E , gdzie jest to 10 bajtów.
Adnan
7

C (gcc) , 8384 85 83 84 86 75 111 bajty

Wszystkie optymalizacje wyłączone i tylko w GCC 32-bit.

-1 bajt dzięki @ceilingcat

+ niektóre bajty na 1skrzynkę.

+ niektóre bajty dla funkcji wielokrotnego użytku.

i,j,r,s;f(a){for(i=10,r=1;a/i;i*=10)for(s=a%i+a/i,r*=s-1,j=2;j<s;)r*=s%j++>0;a=!r;}

Pobiera dane wejściowe jako liczbę całkowitą. Zwraca 1 dla przypadków fałszywych, 0 dla przypadków prawdziwych.

Wypróbuj online!

Zobacz moją kolejną odpowiedź na kod Mathematica (55 bajtów).

Keyu Gan
źródło
To powinny być dwie osobne odpowiedzi. Ponadto, rozwiązanie Mathematica daje niepoprawne wyniki dla 1, 98i 4063.
ngenisis
6

Siatkówka , 38 bajtów

\B
$`$*_$'$*_
S`\d
G`^_$|^(__+)\1+$
^$

Wypróbuj online!

Drukuje 1dla wspaniałomyślnych liczb i 0nie tylko.

Wyjaśnienie

\B
$`$*_$'$*_

Zaczynamy od dopasowania każdej pozycji między dwiema cyframi (pozycji, które nie są granicami słów) i wstawienia zarówno prefiksu, jak i sufiksu tego dopasowania jako jedności, używając _jako cyfry unary. Zamiast wstawiać +s, bezpośrednio wstawiamy tam jednostkowy wynik sumy.

S`\d

Teraz dzielimy ciąg znaków na cyfry, tak aby każda suma przechodziła przez swoją własną linię i pozbywamy się tych cyfr (będzie też pusta linia wiodąca i końcowa, ale to nie jest ważne).

G`^_$|^(__+)\1+$

Jest to standardowe wyrażenie regularne pasujące do liczb niepierwszych w jednostkowej. Użycie Gtutaj etapu powtórzeń oznacza, że ​​po prostu zachowujemy wszystkie linie zawierające dodatnie wartości niepierwotne (odrzucając puste linie).

^$

Na koniec sprawdzamy, czy ciąg jest pusty. Jeśli wkład był wspaniałomyślny, poprzedni etap odrzucił wszystkie linie (ponieważ wszystkie były liczbami pierwszymi), a to daje nam 1. W przeciwnym razie, jeśli jakakolwiek linia nie będzie liczbą pierwszą, pozostanie w ciągu, a wyrażenie regularne zawiedzie, dając 0.

Martin Ender
źródło
4

Python 2 , 82 79 78 bajtów

f=lambda n,d=10:n<d or d/n<all((n/d+n%d)%k*f(n,10*d)for k in range(2,n/d+n%d))

Jest to powolne i może poradzić sobie tylko z przypadkami testowymi z zapamiętywaniem.

Wypróbuj online!

Wersja alternatywna, 79 bajtów

f=lambda n,d=10:n<d or f(n,10*d)>d/n<all((n/d+n%d)%k for k in range(2,n/d+n%d))

Przyspieszony kosztem jednego bajtu.

Wypróbuj online!

Dennis
źródło
3

Java 8, 175 171 94 88 bajtów

n->{long d=10,r=0,i,t;for(;d<=n;d*=10,r|=t-i)for(t=n/d+n%d,i=1;t%++i%t>0;);return r==0;}

-77 dzięki @PeterTaylor , wykorzystując arytmetykę (zamiast String z .substring) i pozbywając się oddzielnej metody sprawdzania, czy liczba całkowita jest liczbą pierwszą.
-6 bajtów przy użyciu metody sprawdzania liczby pierwszych @SaraJ , więc pamiętaj o jej głosowaniu!

Wypróbuj tutaj.

Wyjaśnienie:

n->{                  // Method with long as both parameter and return-type
  long d=10,r=0,i,t;  //  Some temp longs
  for(;d<=n           //  Loop as long as `d` is below or equal to input `n`
                      //  (inclusive instead of exclusive due to special case 10)
      ;               //    After every iteration:
       d*=10,         //     Multiple `d` by 10
       r|=t-i)        //     and Bitwise-OR `r` with `t-i`
    for(t=n/d+n%d,    //   Set `t` to `n` integer-divided by `d` plus `n` modulo-`d`
        i=1;          //   Set `i` to 1
        t%++i%t>0;);  //   Inner oop as long as `t` modulo `i+1` modulo `t` is not 0 yet
                      //   (after we've first increased `i` by 1 with `++i`)
                      //   (if `t` equals `i` afterwards, it means `t` is a prime)
  return r==0;}       //  Return if `r` is still 0
Kevin Cruijssen
źródło
1
Myślę, że istnieją co najmniej dwa sposoby skrócenia tego: po pierwsze, zamień pętlę na prekurencję; po drugie, kumuluj wyniki tak, aby funkcja główna wymagała tylko jednej returninstrukcji, tworząc wartość wartownika z pbe -1i &sprawdzając, czy wszystkie zwracane wartości są -1.
Peter Taylor
1
W rzeczywistości duża jest: nie używaj ciągów.
Peter Taylor,
n->{for(long d=10,m=1;d<n;d*=10)m|=p(n/d+n%d,2)-2;return m>0;}long p(long n,int i){return i<n?p(n%i<1?1:n,i+1):n;}
Peter Taylor,
@PeterTaylor Dzięki za sugestie! Jeśli chodzi o sugerowaną funkcję na końcu, czy jesteś pewien, że jest poprawna? Obecnie podaję nieprawidłowe wyniki , chyba że robię coś złego.
Kevin Cruijssen
1
Ok, d<=nporadzić sobie 10. Przepełnienie stosu nie stanowi problemu (specyfikacja nie podaje zakresu danych wejściowych, które należy obsłużyć), ale można to naprawić i uzyskać więcej oszczędności poprzez powrót do pętli i wstawianie .
Peter Taylor,
2

Pyth , 14 bajtów

.AmP_ssMcQ]dtU

Wypróbuj online! Wyświetli się, Truejeśli liczba będzie wspaniałomyślna,False przeciwnym razie. Pobiera liczbę jako ciąg znaków.

Objaśnienia

.AmP_ssMcQ]dtU

              Q    # Implicit input Q
            tU     # Generate the range [1, 2, ..., len(Q)-1]
  m                # For each index d in the above range...
        cQ]d       # Split Q at index d
      sM           # Convert the two parts to integers
     s             # Sum
   P_              # Check it is a prime
.A                 # ...end for. Check all elements are True
Jim
źródło
2

Python 2 , 104 102 98 96 103 bajtów

  • Dzięki @Wheat Wizard dla 2 bajtów: icałkowicie anonimowy, ponieważ jest wywoływany tylko raz.
  • Dzięki @Hyperneutrino za 4 bajty: mądrzejszy sposób uzyskiwania liczb z numeru głównego zamiast krojenia
  • @Hyperneutrino zapisał kolejne 2 bajty: x-1tylko xdla rarnge sprawdzania liczby pierwszych.
  • Naprawiono awarię skrzynki x=10, dodając w ten sposób 7 bajtów, dzięki @Dennis i @Wheat Wizard za wykrycie: moja wcześniejsza wersja uważała 1 za liczbę pierwszą
lambda x:all((lambda x:x>1and all(x%j for j in range(2,x)))(x/10**j+x%10**j)for j in range(1,len(`x`)))

Wypróbuj online!

Officialaimm
źródło
1
98 bajtów
HyperNeutrino
Fajnie, dzięki @HyperNeutrino
officialaimm
1
96 bajtów : Nie potrzebujesz x-1znaku na końcu zakresu; zakres jest wyłączny po prawej stronie.
HyperNeutrino
1
Nie udaje się to w przypadku 10 (nowego przypadku testowego).
Dennis
1
To się nie udaje dla 10. Uważam również, że 10 to jedyna liczba, dla której się to nie udaje.
Wheat Wizard
2

Japt , 24 16 bajtów

To była właściwie współpraca między @Shaggy, @ETHproduction i mną.

¬£[YîU UtY]xÃÅej

Wypróbuj online!

Pobiera dane wejściowe jako ciąg.

Oliver
źródło
Gah! Prawie identyczne z alternatywnym rozwiązaniem, nad którym pracowałem! Oto 22 bajty , które do tej pory miałem. EDYCJA: Zmniejszono go do 20 bajtów , łącząc rzeczy z obu.
Shaggy
@Shaggy Zabawne, pracuję teraz nad moją edycją ... Jest szokująco podobna do twojej: ethproductions.github.io/japt/…
Oliver
Wskazówka: xautomatycznie konwertuje pozycje z tablicy na liczby ;-)
ETHproductions
Tak, tam też bym poszedł, @ETHproductions: 16 bajtów .
Shaggy
Jest też XîUgeniuszem. Myślę, że U¯Xdziała na tę samą długość, ale nadal
ETHproductions
2

Pip , 25 24 bajtów

$&0N_%,_=1M$+(a^@_)M1,#a

Wypróbuj online!

Wyjaśnienie

ajest pierwszym argumentem wiersza poleceń. 1,#ageneruje zakres zawierający numery 1przez len(a)-1. W tym celu mapujemy funkcję lambda:

$+(a^@_)
   a^@_   Split a at this index
$+(    )  Fold the resulting 2-element list on +

Następnie mapujemy kolejną funkcję lambda 0N_%,_=1, która sprawdza pierwotność. Wziąłem to z tej odpowiedzi ; możesz przeczytać wyjaśnienie tam. Na koniec składamy listę na logicznym AND ( $&). Wynik jest taki, że 1wszystkie sumy były liczbami pierwszymi,0 jeśli żadna z nich nie była.

Przykład z wprowadzeniem 4063:

                    1,#a   [1; 2; 3]
           $+(a^@_)M       [67; 103; 409]
  0N_%,_=1M                [1; 1; 1]
$&                         1
DLosc
źródło
2

CJam , 22 bajty

r:L,({)_L<i\L>i+mp!},!

Wypróbuj online!

Wyświetla dodatnią liczbę całkowitą dla prawdy, zero dla fałszu.

-1 dzięki sprytnej sztuczce Petera Taylora .
-3 dzięki kolejnej wskazówce Petera Taylora.

Erik the Outgolfer
źródło
0&!jest krótszy niż1+:*
Peter Taylor
@PeterTaylor Ooh, to sprytne ... nadużyłeś faktu, że !zwraca wartość logiczną i użyłeś przecięcia zestawu z wartością falsy, 0dzięki czemu możesz zrobić 0&!w 3 zamiast 1&!!...
Erik Outgolfer
Możesz zapisać kolejne 3 bajty, przypisując dane wejściowe do zmiennej, co upraszcza manipulowanie stosem i używając ,operatora filtru zamiast f.
Peter Taylor,
PS Nie widzę żadnych nadużyć podczas !konwersji na wartość logiczną: było to standardowe w GolfScript i standardowe w CJam. I 1&!!byłoby niepoprawne: 0&!to oczywisty test, ponieważ wymaganie jest forall, nie istnieje.
Peter Taylor
@PeterTaylor Nie to miałem na myśli ...: P
Erik the Outgolfer
2

Japt , 23 bajty

Pobiera dane wejściowe jako ciąg.

Cholera; pokonany na znacznie krótszą alternatywę, nad którą pracowałem.

£i+Ýe@OxXr"%+0+"'+)j

Sprawdź to

Kudłaty
źródło
@ETHproductions, nie, miałeś rację; oryginalna wersja była zła; sprawdzanie tylko wspaniałomyślnych liczb pierwszych . ¬£i+YÄÃe@OxX j
Kudłaty
Wiedziałem, że nie
oszalałem
1
Nie 4063działa (powinno być prawdą, jest fałszywe). Sztuczka polega na tym, że JS myśli, że prowadzący 0oznacza, że ​​chcesz ósemkowy ...
ETHproductions
Hmmm ... OK, myślę, że mam alternatywę - przetestowanie i zagranie w golfa zajmie kilka minut.
Kudłaty
Myślę, że to się teraz nie powiedzie w niektórych przypadkach, które zawierają dwa zera, po których następują dwie inne cyfry ... ( 40043na przykład) Po prostu dodaj +po, 0aby to naprawić.
ETHproductions
2

Mathematica, 75 bajtów

And@@Table[PrimeQ@ToExpression@StringInsert[#,"+",n],{n,2,StringLength@#}]&

Functionktóry oczekuje String. PrimeQ@ToExpression@StringInsert[#,"+",n]zwraca, czy wstawienie cyfry +po nth daje liczbę pierwszą. Table[...,{n,2,StringLength@#}]podaje listę tych wartości w nzakresie od 2do długości ciągu. Następnie bierzemy Andkażdy z elementów tej listy. Dogodnie, jeśli StringLength@#<2, to Table[...]jest pusta lista, dla którejAnd@@{}==True

ngenisis
źródło
2

Mathematica, 55 50 45 49 50 54 62 bajty

Wygląda na to, że powinienem to opublikować osobno.

Zmierzono +6 bajtów długości kodu.

+5 bajtów dzięki ngenisis.

And@@(qPrimeQ[#~Mod~q+⌊#/q⌋])@Rest@PowerRange@#&

Pobiera dane wejściowe jako liczbę całkowitą i zwraca wartość regularną Trueoraz False. W międzyczasie jest unicode 0xF4A1, skrót Function[,]. Długość kodu jest mierzona na podstawie rozmiaru pliku (UTF-8 bez BOM), komentarz, jeśli nie jest poprawny.

PowerRange[x]zwraca 1, 10, 100 ... nie większy niż x, co zostało wprowadzone w Mathematica 10.

Keyu Gan
źródło
2

Zwykły angielski 4 204 341 315 251 241 240 bajtów

(Ponownie) wprowadził testy pierwszeństwa do biblioteki Plain English, przenosząc 3 863 bajty do biblioteki Plain English. Usunięto 26 bajtów białych znaków. Zaoszczędzono 64 bajty, skracając zmienne lokalne. Zapisano 10 bajtów, skracając interfejs. Zgodnie z sugestią RosLuP zaoszczędzono 1 bajt, zmieniając sposób inicjowania i zwiększania wartości m.

To decide if a n number is g:
Put 1 in a m number.
Loop.
Multiply the m by 10.
If the m is greater than the n, say yes.
Divide the n by the m giving a q quotient and a r remainder.
Add the q to the r.
If the r is not prime, say no.
Repeat.

Nieskluczona wersja ostatecznego kodu:

To decide if a number is magnanimous:
  Put 1 in another number.
  Loop.
    Multiply the other number by 10.
    If the other number is greater than the number, say yes.
    Divide the number by the other number giving a quotient and a remainder.
    Add the quotient to the remainder.
    If the remainder is not prime, say no.
  Repeat.

Uwagi: Zwykły angielski IDE jest dostępny na stronie github.com/Folds/english . IDE działa w systemie Windows. Kompiluje się do 32-bitowego kodu x86.

Osmosian Zamówienie jest dynamiczny widelec zwykłego angielskiego już pierwszości testowania w wersji 4700, ale jest używany algorytm bardzo nieefektywne (od stycznia do czerwca 2017 roku). W wersjach 4001-4011 dynamicznego rozwidlenia witryny GitHub pominięto testowanie pierwszeństwa. Wersja 4013 dynamicznego rozwidlenia witryny GitHub zawiera testy pierwotności. Kod do przeprowadzania testów pierwotności został opracowany w ramach poprzednich wersji tej odpowiedzi.

Jaspis
źródło
1

Perl 6 , 58 bajtów

{?(10,10* *...^*>$_).map({$_ div$^a+$_%$^a}).all.is-prime}

Wypróbuj online!

10, 10 * * ...^ * > $_to geometryczna sekwencja wielokrotności dziesięciu, podejmowana do jednego przed elementem, który przekracza parametr wejściowy $_. Następnie sprawdzamy, czy dla każdej potęgi dziesięciu suma parametru wejściowego pobrana div i mod ta moc jest liczbą pierwszą.

Sean
źródło
1

Haskell, 114 110 bajtów

p x=[x]==[i|i<-[2..x],x`mod`i<1]
i!x|i<1=0<1|0<1=p(uncurry(+)$divMod x$10^i)&&(i-1)!x
f x=(length(show x)-1)!x

Nieoznakowany z wyjaśnieniem:

-- Check if x is a prime number
p x = [x] == [i | i<-[2..x], x`mod`i < 1]
-- Checks all pairs of numbers a '+' can be put in between
i ! x | i<1 = 0<1                                -- Single-digit numbers are always truthy
      | 0<1 = p (uncurry (+) $ divMod x $ 10^i)  -- Does x split at i digits from right sum up to a prime?
           && (i-1) ! x                          -- If so, check next pair
-- Start (!) with the number of digits in x minus one
f x = (length (show x)-1) ! x
Siracusa
źródło
Jeśli użyjesz p x=[x]==[i|i<-[2..x],x`mod`i<1]jako czeku głównego, możesz zapisać 2 bajty.
Wheat Wizard
Możesz także użyć divMod x$10^izamiastx`divMod`(10^i)
Wheat Wizard
@WheatWizard: Wiedziałem, że podstawowy test można jeszcze jakoś ulepszyć. ;) Dzięki!
siracusa
1

Aksjomat, 88 bajtów

f(n:PI):Boolean==(i:=10;repeat(q:=n quo i;q=0 or ~prime?(q+n rem i)=>break;i:=i*10);q=0)

test i wyniki

(10) -> [[i,f(i)]  for i in [1,2,4,10,98,101,109,819,4063,40427,2000221,999999999999999999999999999999999999999999999]]
   (10)
   [[1,true], [2,true], [4,true], [10,false], [98,true], [101,true],
    [109,false], [819,false], [4063,true], [40427,true], [2000221,true],
    [999999999999999999999999999999999999999999999 ,false]]
RosLuP
źródło
1

Brachylog , 11 bajtów

{~cĊℕᵐ+}ᶠṗᵐ

Wypróbuj online!

{      }ᶠ      Find every
      +        sum of
   Ċ           two
    ℕᵐ         whole numbers
 ~c            which concatenate to the input,
          ᵐ    and assert that all of them
         ṗ     are prime.
Niepowiązany ciąg
źródło
1

Perl 6 , 35 bajtów

{m:ex/^(.+)(.+)$/.all.sum.is-prime}

Wypróbuj online!

Wyjaśnienie:

{                                 }     # Anonymous code block that
 m:ex/^        $/                         # Match all
       (.+)(.+)                           # Splits of the input number
                 .all                     # Are all of them
                     .sum                   # When summed
                         .is-prime          # Prime?
Jo King
źródło
0

Skumulowane , 51 bajtów

[tostr:#'1-~>splitat tr['+',' '#`#~prime]map 1,all]

Wypróbuj online!

To jest funkcja. Działa poprzez konwersję argumentu na ciąg ( tostr), powielanie go i uzyskiwanie jego długości ( :#'), odejmowanie 1 ( 1-), tworząc zakres od 1 do tej liczby ( ~>). Stos wygląda mniej więcej tak 40427:

('40427' (1 2 3 4))

Wykonujemy wektoryzację splitat, w wyniku czego następująca tablica znajduje się na górze stosu:

(('4' '40' '404' '4042') ('0427' '427' '27' '7'))

Transponując to tr, otrzymujemy:

(('4' '0427') ('40' '427') ('404' '27') ('4042' '7'))

Następnie mapujemy funkcję ['+',' '## ~ prime] (withmap`). Ta funkcja:

['+',' '#`#~prime]
 '+',                concatenate a plus sign (string)    `('4' '0427' '+')
     ' '#`           join by spaces                      `'4 0427 +'`
          #~         evaluate                            `431`
            prime    check primality                     `1`

Następnie po mapie konkatenujemy 1. Dzieje się tak, ponieważ allzwraca undefpustą listę.

Conor O'Brien
źródło
0

JavaScript (ES6), 70 bajtów

P=(n,x=2)=>n%x?P(n,x+1):n==x
f=(n,i=10)=>i>n||P((n/i|0)+n%i)&f(n,i*10)

Błąd ostatniego przypadku w mojej przeglądarce z powodu błędu „zbyt dużej rekurencji” podczas obliczania P(200023). Mam nadzieję, że to nie unieważnia tego.

ETHprodukcje
źródło
0

QBIC , 38 bajtów

_L;|[a-1|q=q*µ!_sA,b|!+!_sA,b+1,a|!}?q

Wyjaśnienie

_L |     Create a variable a and set it to the length of
  ;      the input string (A$)
[a-1|    FOR b = 1 to a-1
q=q*     multiply q by
 µ       -1 if prime, 0 if not, of
  !        a cast of 
   _s       a substring of
     A,       A$
     b        from index 1 to index b (only one index is given, so that is assumed to be the req. length from 1)
      |!   to number
 +         plus
 !         a cast of
  _s         a substring of
    A,         A$
    b+1        from index b+1
    ,a         for the length of a (does not error if it exceeds the end of the string)
      |!   to number
 }       NEXT 
 ?q      PRINT q, which is eitrher -1 or 1 for all-prime sums, or 0 otherwise
Steenbergh
źródło
0

CJam (21 bajtów)

r:R,({RiA@)#md+mp!},!

Demo online , zestaw testów on-line

Sekcja

r:R       e# Take a token of input and assign it to R
,(        e# Take the length of R minus one
{         e# Filter i = 0 to (length of R minus two)
  Ri      e#   Push R as an integer value
  A@)#    e#   Push 10 to the power of (i + 1)
  md      e#   divmod
  +mp!    e#   Add, primality test, negate result
},        e# The result of the filter is a list of splits which give a non-prime
!         e# Negate result, giving 0 for false and 1 for true
Peter Taylor
źródło
0

Pyth, 15 14 bajtów

.AmP_svcz]dtUz

Zestaw testowy

Zapisano bajt przy użyciu najnowszej zmiany Pytha.

isaacg
źródło
0

APL (NARS), znaki 35, bajty 70

{0≥k←¯1+≢⍕⍵:1⋄∧/0π(m∣⍵)+⌊⍵÷m←10*⍳k}

test:

  f←{0≥k←¯1+≢⍕⍵:1⋄∧/0π(m∣⍵)+⌊⍵÷m←10*⍳k}
  f¨1 2 4 10 98 101 109 819 4063 40427 2000221
1 1 1 0 1 1 0 0 1 1 1 

To byłoby tłumaczenie w APL z Axiom post algo tutaj ...

{0≥k←¯1+≢⍕⍵:1⋄∧/0π(m∣⍵)+⌊⍵÷m←10*⍳k}
 0≥k←¯1+≢⍕⍵:1⋄  assign to k the length as array of argument return 1 if that is <=0
 ∧/0π(m∣⍵)+⌊⍵÷m←10*⍳k
              m←10*⍳k  m is the array pow(10,1..k)
           ⌊⍵÷m       the array of quotient of argumet with m
          +           sum 
     (m∣⍵)            with array of remander
   0π                 build the binary array of "are prime each"
 ∧/                   and that array
RosLuP
źródło
0

PHP, 100 bajtów

for(;++$k<strlen($a=$argn);$x+=$i==1)for($i=$n=substr($a,$k)+$b.=$a[$k-1];--$i&&$n%$i;);echo$x+2>$k;

wypisuje, 1jeśli dane wejściowe są wspaniałe, puste dane wyjściowe, jeśli nie. Uruchom jako potok z -nRlub spróbuj online .

Tytus
źródło