Çok sayıda asal sayılar


11

1234567891011121314151617 gibi çok sayıda (taban 10'da) verildiğinde, içinde "alt numaralar" bulun.
Bir asal "alt sayı", bir asal sayıyı (taban 10'da) temsil eden ardışık bir basamak dizisidir (girişten alınır).

  • Girdi : Bir sayı (ya bir dize, bir dosya ya da ne istersen).
  • Çıktı : Tüm asal alt numaralar bir şekilde ayrıldı (bir listede, dosyada, virgülle ayrılmış dizeler ...) Sonuç boşsa, istediğiniz herhangi bir kuralı alabilirsiniz (sabit kodlu dize, boş dize, anlamsız, ancak program çökmesine.
  • Örnek
    1234 -> 2, 3, 23
    6542 -> 5, 2
    14 -> [.. boş çıktı]

Bu kod golfü. En kısa program kazanır!
[değiştir]: ek kural, program açıklanmalıdır! Jelly'de herkes akıcı değil :)


3
PPCG'ye Hoşgeldiniz!
Luis felipe De jesus Munoz


1
belirtilmemiş. Ne istersen yap.
Regis Portalez

1
İpucu: Bir yanıtı kabul etmek için çok erken; başkalarını çözüm göndermekten vazgeçirebilir.
Shaggy

2
@RegisPortalez hoş geldiniz ve güzel bir meydan okuma! Ben "kabul" özelliği artık ağda diğer sitelerde olduğu gibi PPCG üzerinde çok fazla kullanılmadığını buldum. Her dilde hoş cevaplara değer veriyoruz.
ngm

Yanıtlar:


6

05AB1E (eski) , 3 bayt

Œʒp

Çevrimiçi deneyin!

Asal olan girdinin alt dizeleri.


Bu kısa yapmak zor olacak :)
Regis Portalez

Bu görev için doğru dil
Jonathan Allan

5
@mob Bu kodlamaya bağlıdır. In 05AB1E kodlama , bu cevap 3 uzun bayt olduğunu.
Dennis

2
Buna göre, 34567 = 13 * 2659 asal, yanlış görünüyor: tio.run/##yy9OTMpM/f//6KRTkwr@/zc2MTUzBwA
frosqh

2
@frosqh Aslında yeni 05AB1E sürümünde p (prime) fonksiyonunun bir hatası: tio.run/##yy9OTMpM/f//6KRTkwr@/zc2MTUzBwA Havuzda zaten düzeltildi, ancak TIO'ya aktarılmadı . Bu arada cevabımı eski sürüme değiştirdim.
Kaldo

6

Perl 6 , 28 bayt

{grep &is-prime,+«m:ex/.+/}

Çevrimiçi deneyin!

:exMaç operatöre ( "kapsamlı") bayrağı mo olası her maç dönmek yapar .+hatta olanları örtüşen, (yani bir veya daha fazla karakterden oluşan her alt dize). Hipermetrop , bu Matchnesne listesini sayılara dönüştürür ve daha sonra önceliklilik için filtrelenir grep &is-prime.


İşte benimle gidecektim{+«m:ex/(.+)<?{$0.is-prime}>/}
Brad Gilbert b2gills

@ BradGilbertb2gills Ben de denedim! Biraz hayal kırıklığına uğradım, daha uzun olduğu ortaya çıktı.
Sean

Açıkladığınız için teşekkürler - her zaman benim gibi Perl 4 dinozorlarına yardım!
Toby Speight


5

Python 2 , 66 65 bayt

P=k=1
n=input()
while~n+k:
 if`k`in`n`>0<P%k:print k
 P*=k*k;k+=1

Çevrimiçi deneyin!


Olmalı while k<=nya da, 0 bayt maliyetiwhile~n+k
Jonathan Allan

@JonathanAllan teşekkür ederim. İlk başta sayının kendisinin çıktıdan çıkarılması gerektiğini düşündüm, ancak durum böyle değil.
ovs

@JonathanAllan whileAçıklamadaki kodu lütfen açıklayabilir misiniz ? Daha önce bu tür kodları görmedim. Ayrıca `` , ne işe yarar ?
tarit goswami

1
@taritgoswami while stmt:, stmtpython tarafından doğruluk olarak kabul edilen bir değere sahip olduğu sürece çalışacaktır . Python'daki tek falsy tamsayı 0. Bu nedenle kod olarak çalışır ~n+k != 0. ~bitsel tamamlayıcı operatörüdür ve buna ~neşdeğerdir -n - 1. ~n + k != 0<=> -n - 1 + k != 0<=> k != n + 1. Biz artan olduğundan ktarafından 1her operasyonda, k != n + 1bu durumda eşdeğer olduğunu k <= n.
ovs

1
@taritgoswami Ve Python 2 ile `n`aynıdır repr(n)(Python 3'te çalışmaz).
ovs


3

Jöle ,  5  4 bayt

-1 Kevin Cruijssen sayesinde ( için bir takma addır ÆP)

ẆḌẒƇ

Asal tamsayıların listesini veren basamakların listesini * kabul eden monadik bir Bağlantı.

* "bir dize, bir dosya veya istediğiniz herhangi bir şey" yaparak - bir tamsayı almak için kodun önüne bir D

Çevrimiçi deneyin!

Nasıl?

ẆḌẒƇ - Link: list of integers (digits)   e.g. [1,2,3,4]
Ẇ    - non-empty contiguous substrings        [[1],[2],[3],[4],[1,2],[2,3],[3,4],[1,2,3],[2,3,4],[1,2,3,4]]
 Ḍ   - convert to decimal (vectorises)        [1,2,3,4,12,23,34,123,234,1234]
   Ƈ - filter keep if:
  Ẓ  -   is prime?                            [2,3,23]

ÆPolabilir yanılmıyorsam olur?
Kevin Cruijssen

Ah evet bu yeni takma adlardan biri - teşekkürler!
Jonathan Allan

2

Java 8, 148147 bayt

n->{for(int l=n.length(),i=l,j;i-->0;)for(j=l;j>i;){long k=2,x=new Long(n.substring(i,j--));for(;k<x;x=x%k++<1?0:x);if(x>1)System.out.println(x);}}

Çevrimiçi deneyin.

Açıklama:

n->{                     // Method with String parameter and no return-type
  for(int l=n.length(),  //  Length of the input-String
          i=l,j;         //  Temp-integers
      i-->0;)            //  Loop `i` in the range [length, 0)
    for(j=l;j>i;){       //   Inner loop `j` in the range [length, 0)
      for(long k=2,      //    Set `k` to 2
               x=new Long(n.substring(i,j--)
                         //    Take the substring [`i`, `j`) from the input,
            );           //    convert it to a long, and set it as `x`
          k<x;           //    Inner loop as long as `k` is still smaller than `x`
        x=x%k++<1?       //     If `x` is divisible by `k`:
           0             //      Set `x` to 0
          :              //     Else:
           x);           //      Leave `x` unchanged
      if(x>1)            //    If `x` is now larger than 1 (a.k.a. If `x` is a prime):
        System.out.println(x);}}
                         //     Print `x` with a trailing newline to STDOUT

2

MATL , 9 bayt

&XfXUtZp)

Çevrimiçi deneyin!

açıklama

&Xf   % Implicit input: string. Push cell array of non-empty substrings
XU    % Convert to number. Vectorizes
t     % Duplicate
Zp    % Isprime. Vectorizes.
)     % Index. Keeps substrings indicated by the previous result. Implicit display

2

Bash + GNU Core Utils: 80 77 Bayt

for i in $(seq `tee a|wc -c`)
{
grep -oE .{$i}<a|factor|grep -oP ': \K\d+$'
}

Bu en kısa olamaz, ama daha iyi bir şey bulmakta zorlanıyorum. Yardım isteniyor!

Sadece POSIX'e bağlı kalarak 82 puan aldım:

for i in $(seq `tee a|wc -c`)
{
grep -oE .{$i}<a|factor|awk -F\  'NF<3{print$2}'
}

Bash string dilimleme yardımcı olabilir mi? Bu utanç ayracı aralıkları parametrelerden önce genişletildi ...
Toby Speight

@TobySpeight iki döngü gerektirir (biri başlangıç ​​için, diğeri sonu için), dilimleme yerine koyma içinde değişkenleri kullanamayacağınızdan bahsetmiyorum bile. Zsh buna izin veriyor! Zihnimdeki kısalık için ana yol, tüm alt dizeleri oluşturmak için Awk kullanmaktır.
markasoftware





0

Pyth, 8 bayt

fP_TsM.:

Test odası

Girdiyi dize olarak alır, bir tamsayı listesi çıkarır. Ek bir bayt için sonuna int ekleyerek` girişi de alabilir .

Açıklama:
fP_TsM.:  | Full code
fP_TsM.:Q |  with implicit variables added
          | Print (implicit)
      .:Q |  list of all substrings of the input
    sM    |   converted to integers
fP_T      |    filtered for prime numbers

Ve `sadece dönüştürür intiçin str.


0

Wolfram Dili (Mathematica) , 40 bayt

Select[PrimeQ@*FromDigits]@*Subsequences

Çevrimiçi deneyin!

Giriş ve çıkış basamak listeleridir. Asal alt numara yoksa, boş liste {}döndürülür.

Kullanımları @*için Compositionfonksiyonların. Subsequencesgirilecek tüm alt sekansların bir listesini verir ve Select[PrimeQ@*FromDigits]bir operatör formu Selectiçin tüm öğelerin bir listesini verir ki PrimeQ@*FromDigitsdöner True.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.