พิมพ์ / ส่งออกจำนวนบวกทั้งหมดที่สตริงย่อยหลายหลักทุกตัวในการแทนทศนิยมนั้นก็เป็นสำคัญเช่นกัน


15

งาน

งานของคุณคือการพิมพ์หรือส่งออกจำนวนบวกทั้งหมดที่สตริงย่อยหลายหลักทุกตัวในการแทนทศนิยมนั้นยังเป็นสำคัญ หากตัวเลขมีตัวเลขอย่างน้อย 2 หลักแสดงว่าตัวเลขนั้นต้องเป็นจำนวนเฉพาะด้วย

ตัวอย่าง

  • 6197อยู่ในลำดับเพราะทุกหลักหลาย substring ใน6197เป็นสำคัญกล่าวคือ: 61, 19, 97, 619, 197, 6197(ตัวเอง)
  • โปรดทราบว่า6ไม่ได้เป็นนายก แต่6197ยังคงอยู่ในลำดับเพราะไม่ได้เป็นสตริงย่อยหลายหลัก66197
  • 8ยังอยู่ในลำดับเนื่องจากสตริงย่อยหลายหลักทุกตัว8เป็นค่าเฉพาะ ไม่มีหลักหลาย substring คือ8เพื่อให้เป็นกรณีของการนี้ความจริงไม่มีความคิด

รายละเอียด

  • ใช้ช่องโหว่มาตรฐานยกเว้นว่าคุณได้รับอนุญาตให้เข้ารหัสโค้ดเอาต์พุตหรือเก็บข้อมูลที่เกี่ยวข้องกับเอาต์พุตในโปรแกรมของคุณ
  • ตัวเลขในการส่งออกจะอยู่ในลำดับใด
  • ตัวเลขในเอาต์พุตได้รับอนุญาตให้มีการซ้ำซ้อน
  • คุณสามารถใช้ตัวคั่นใดก็ได้หากคุณเลือกที่จะพิมพ์แทนที่จะเป็นเอาท์พุท
  • คุณได้รับอนุญาตให้นำหน้าและ / หรือเอาท์พุท postfix หากคุณเลือกที่จะพิมพ์แทนการส่งออก
  • ตัวคั่นและคำนำหน้าและ postfix อาจไม่มีตัวเลขใด ๆ (U + 0030 ถึง U + 0039)

รายการทั้งหมด (58 รายการ)

1
2
3
4
5
6
7
8
9
11
13
17
19
23
29
31
37
41
43
47
53
59
61
67
71
73
79
83
89
97
113
131
137
173
179
197
311
313
317
373
379
419
431
479
613
617
619
673
719
797
971
1373
3137
3797
6131
6173
6197
9719

การอ้างอิง

  • OEIS A131648 (รายการไม่สมบูรณ์)

และเช่นเคยโปรดอย่าลังเลที่จะแสดงความคิดเห็นในสิ่งที่ฉันควรชี้แจง


2
ฉันจะให้ความช่วยเหลือแก่ผู้อื่นมากกว่า 300 คนยกเว้น @Falize ผู้ส่งคำตอบเล็กที่สุดต่อความท้าทายนี้ในBrachylog ( ลิงก์ wiki ) ( ลิงก์ TIO ) ( ห้องสนทนา )
Leun Nun

2
แย่ @ เกิด นั่นคือสิ่งที่คุณจะได้รับจากการสร้างภาษา
Luis Mendo

3
ฉันมีคำตอบ 50 ไบต์ :(
ลดขนาด

1
โปรแกรมจะต้องยุติหรือไม่
เสียชีวิต

2
@LeakyNun ดูเหมือนว่าใครบางคนกำลังจะได้รับรางวัลนั้น!
Jordan

คำตอบ:



7

05AB1E , 15 13 ไบต์

รหัส:

4°GN§ŒD9›ÏpP–

คำอธิบาย:

  G            # For N in range 1,
4°             #   10000
   N           # Push N
    §          # Convert that to string
     Œ         # Get all substrings
      D9›Ï     # Keep all substrings that are greater than 9
          p    # Check each of them if they are prime
           P   # Product
            –  # If 1, print N

ใช้การเข้ารหัสCP-1252 ลองออนไลน์! (อาจใช้เวลาสองสามวินาที)


5

Brachylog , 18 17 15 16 15 ไบต์

ℕ₁<l4&≜sᶠ{Ḋ|ṗ}ᵐ

ลองออนไลน์!

-1 ไบต์หลังจากการสนทนากับ Fatalize เป็นแรงบันดาลใจให้ฉันเห็นว่าเกิดอะไรขึ้นถ้าฉันสลับlและ<รอบ ๆ

เพรดิเคตนี้สร้างเอาต์พุตผ่านตัวแปรอินพุตตราบใดที่ตัวแปรเอาต์พุตไม่มีข้อ จำกัด เนื่องจากอนุญาตให้ซ้ำกันได้แต่ละหมายเลขจะถูกสร้างขึ้นด้วยหลายหลากเท่ากับ 2 ต่อกำลังของจำนวนหลักซึ่งเป็นจำนวนเฉพาะ

ℕ₁                 The input variable is a natural number
  <                less than
   l4              some number with length 4 (maximized as 9999).
     &≜            Assign a number to the input, and assert that
       sᶠ          every substring of it
         { | }ᵐ    is either
            ṗ      a prime number
          Ḋ        or a single digit.

รุ่นเก่ากว่า:

{≜ℕsᶠ{Ḋ!|ṗ}ᵐ&}ᶠ⁵⁹b
7^₅⟦₁{sᶠ{Ḋ|ṗ}ᵐ&}ˢ
8ḟ⟦₁{sᶠ{Ḋ|ṗ}ᵐ&}ˢ
∧8ḟ>?ℕ₁≜sᶠ{Ḋ|ṗ}ᵐ

นี่คือ 16 ไบต์ แต่ยังไม่ได้ทดสอบเนื่องจากการตรวจสอบทุกอย่างจนถึง 40320 ไม่เร็วอย่างแน่นอน:8ḟ⟦₁{sᶠ{Ḋ|ṗ}ᵐ&}ˢ
สตริงที่ไม่เกี่ยวข้อง

จะยุติการปรับเนื่องจากขอบเขตบน 10,000 แทนแม้ว่า: tio.run/##SypKTM6ozMlPN/r/39AACB7NX/…
สตริงที่ไม่เกี่ยวข้อง

4

Brachylogขนาด 18 ไบต์

โซลูชัน Brachylog อื่น ฉันไม่สามารถทำให้สั้นลงกว่าโซลูชัน Brachylog ของ Erik The Outgolfer; มันมีความยาวเท่ากัน แต่เข้าใกล้คนรุ่นจากทิศทางตรงกันข้าม

{≜ℕ{sℕ₁₀}ᶠṗᵐ&}ᶠ⁵⁹b

ดูเหมือนว่า Unrelated String จะเอาชนะสิ่งนี้ได้โดยตัวละครหลายตัวที่ฉันแสดงความยินดี

คำอธิบาย:

{≜ℕ                Brute force all nonnegative integers to find any that match the constraints
   {s               Create a predicate that finds all subsequences of digits of said integer
     ℕ₁₀            Constrains those subsequences to be >= 10
        }ᶠ          Finds all possible values of that predicate: all multi-digit subsequences
          ṗᵐ        Apply a primality constraint to all of those subsequences
            &       Make the predicate output the input integer rather than a prime subsequence
             }ᶠ⁵⁹   Find the first 59 results (all of the puzzle's solutions, and zero)
                 b  Remove the first element of the list, i.e. 0

ลองออนไลน์!


3

เยลลี่ขนาด 17 ไบต์

DẆṖÐfḌÆP€Ạ
³²RÇÐf

คำตอบเยลลี่แรกของฉัน! บันทึกแล้ว 3 ไบต์ขอบคุณ@Leaky Nun !

ลองออนไลน์

คำอธิบาย:

DẆṖÐfḌÆP€Ạ      The helper link, which checks if a given number satisfy the conditions.
DẆ              Convert the argument to a list of its digits and get all its substrings.
  ṖÐf           Remove all lists of length 1.
     ḌÆP€Ạ      Convert back each element to an integer and check if all of them are prime.

³²RÇÐf          Main link.
³²              Create a 100 and square it, which gives 10000.
  R             Create a list from 1 to it.
   ÇÐf          Filter out all the elements where the helper link gives false.

ขอแสดงความยินดีกับคำตอบ Jelly แรกของคุณ!
Leun Nun

2
RÇÐfÇ€Tสามารถถูกแทนที่ด้วย สามารถถูกแทนที่ด้วยṖÐfḌÆP€ ḌḟDÆP
เดนนิส

3

Java 8, 182 ไบต์

v->{for(int n=0;++n<1e4;)if(P(n)>0)System.out.println(n);}int p(int n){for(int i=2;i<n;n=n%i++<1?0:n);return n;}int P(int n){return n>99?p(n)*p(n%100)*p(n%1000)*P(n/10):n<10?n:p(n);}

คำตอบ C (gcc)พอร์ตของGastropnerดังนั้นอย่าลืมตอบคำถามของเขา!

ลองออนไลน์

คำอธิบาย:

// Loop in range [1,10000), and print any primes corresponding to the challenge description
v->{for(int n=0;++n<1e4;)if(P(n)>0)System.out.println(n);}

// Checks if the given integer is a prime (return unchanged input if prime, 0 if not)
int p(int n){for(int i=2;i<n;n=n%i++<1?0:n);return n;}

// Recursive method that checks if every part of length 2+ is a prime, or is below 10
int P(int n){return n>99?p(n)*p(n%100)*p(n%1000)*P(n/10):n<10?n:p(n);}

2

PowerShell v2 +, 107 104 ไบต์

1..10+(11..1e4|?{($x=11..($i=$_)|?{"$i"-match$_}).count-eq($x|?{'1'*$_-match'^(?!(..+)\1+$)..'}).count})

คำเตือน: Kinda Slow

วนซ้ำจาก11ถึง1e4(เช่น10000) และดึงตัวเลขออกมาโดยใช้Where-Objectตัวเลือก ( |?{...}) ส่วนคำสั่งเป็นสององค์ประกอบ - ลูปแรกจาก11ถึงจำนวนปัจจุบันและใช้Where-Objectในการดึงตัวเลขเหล่านั้นที่เป็นสตริงย่อยของหมายเลขปัจจุบัน (ผ่าน-matchผู้ประกอบการ regex) $xเราเก็บสตริงผู้ที่อยู่ใน ส่วนที่สองจะวนซ้ำ$xและใช้Where-Objectเพื่อดึงจำนวนเฉพาะออกมาทั้งหมดโดยใช้ไพร์มอันดับต้น จากนั้นเราก็ใช้.countทั้งสองอย่างและการตรวจสอบนั้นเป็นจริงไม่ว่าจะเป็น-equal ตัวอย่างเช่น971จะมี$x = (71,97,971)และแต่ละรายการมีค่าเฉพาะดังนั้น3-eq3จะเป็น$TRUEและ971จะถูกเลือก

1..10ผลที่ได้รับการตัดแบ่งอาร์เรย์มีช่วง อาร์เรย์ที่เป็นผลลัพธ์จะถูกทิ้งไว้บนไพพ์ไลน์และเอาท์พุทจะเป็นนัยโดยมีการขึ้นบรรทัดใหม่ระหว่างองค์ประกอบโดยค่าเริ่มต้น



2

C (gcc) , 144 142 140 136 134 132 ไบต์

-2 ขอบคุณ Kevin Cruijssen -2 ขอบคุณแมวเพดาน

... และได้รับแรงบันดาลใจจากสิ่งนั้นเราสามารถได้อีก 2 ไบต์จากการวนซ้ำ

นอกจากนี้ยังได้ฉายาตัวตรวจสอบเฉพาะที่ดีกว่าจากคำตอบของ Kevin Cruijssen ต่ออีก -4

p(n,i){for(i=2;i<n;)n*=n%i++||n<10;i=n;}P(n){n=p(n)*(n<99||p(n%100)*p(n%1000)*P(n/10));}f(n){for(n=1e4;--n;)P(n)&&printf("%d\n",n);}

ลองออนไลน์!


||n<10สามารถ|n<10และfor(n=1;n<1e4;n++)สามารถเป็นfor(n=0;++n<1e4;)-2 ไบต์
Kevin Cruijssen

@KevinCruijssen ไชโย!
Gastropner

2

Malbolge Unshackled (ตัวแปรการหมุน 20 trit), 2,5254e7 ไบต์หรือ 1,9809e7 ไบต์

ขนาดของคำตอบนี้เกินขนาดโปรแกรมที่โพสต์ได้สูงสุด (eh) ดังนั้นรหัสจึงอยู่ในที่เก็บ GitHub ของฉัน (หมายเหตุ: อย่าคัดลอกรหัสโดยใช้ CTRL + A และ CTRL + C เพียงคลิกขวาแล้วคลิก "บันทึกองค์ประกอบปลายทางเป็น .. ")

วิธีการใช้งานนี้

นี่อาจเป็นส่วนที่ยุ่งยากเนื่องจากล่ามที่ไร้เดียงสาของ Haskell จะใช้เวลานานในการรันสิ่งนี้ TIO มีล่าม Malbogle Unshackled ที่ดี แต่น่าเศร้าที่ฉันไม่สามารถใช้งานได้ (ข้อ จำกัด )

สิ่งที่ดีที่สุดที่ฉันพบคือตัวแปรความกว้างการหมุน 20 trit ที่ทำงานได้ดีมาก

เพื่อให้ล่ามเร็วขึ้นฉันได้ลบเช็คทั้งหมดจาก Matthias Lutter's Malbolge Unshackled interpreter

#include <malloc.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

const char* translation = "5z]&gqtyfr$(we4{WP)H-Zn,[%\\3dL+Q;>U!pJS72Fh"
        "OA1CB6v^=I_0/8|jsb9m<.TVac`uY*MK'X~xDl}REokN:#?G\"i@";

typedef struct Word {
    unsigned int area;
    unsigned int high;
    unsigned int low;
} Word;

void word2string(Word w, char* s, int min_length) {
    if (!s) return;
    if (min_length < 1) min_length = 1;
    if (min_length > 20) min_length = 20;
    s[0] = (w.area%3) + '0';
    s[1] = 't';
    char tmp[20];
    int i;
    for (i=0;i<10;i++) {
        tmp[19-i] = (w.low % 3) + '0';
        w.low /= 3;
    }
    for (i=0;i<10;i++) {
        tmp[9-i] = (w.high % 3) + '0';
        w.high /= 3;
    }
    i = 0;
    while (tmp[i] == s[0] && i < 20 - min_length) i++;
    int j = 2;
    while (i < 20) {
        s[j] = tmp[i];
        i++;
        j++;
    }
    s[j] = 0;
}

unsigned int crazy_low(unsigned int a, unsigned int d){
    unsigned int crz[] = {1,0,0,1,0,2,2,2,1};
    int position = 0;
    unsigned int output = 0;
    while (position < 10){
        unsigned int i = a%3;
        unsigned int j = d%3;
        unsigned int out = crz[i+3*j];
        unsigned int multiple = 1;
        int k;
        for (k=0;k<position;k++)
            multiple *= 3;
        output += multiple*out;
        a /= 3;
        d /= 3;
        position++;
    }
    return output;
}

Word zero() {
    Word result = {0, 0, 0};
    return result;
}

Word increment(Word d) {
    d.low++;
    if (d.low >= 59049) {
        d.low = 0;
        d.high++;
        if (d.high >= 59049) {
            fprintf(stderr,"error: overflow\n");
            exit(1);
        }
    }
    return d;
}

Word decrement(Word d) {
    if (d.low == 0) {
        d.low = 59048;
        d.high--;
    }else{
        d.low--;
    }
    return d;
}

Word crazy(Word a, Word d){
    Word output;
    unsigned int crz[] = {1,0,0,1,0,2,2,2,1};
    output.area = crz[a.area+3*d.area];
    output.high = crazy_low(a.high, d.high);
    output.low = crazy_low(a.low, d.low);
    return output;
}

Word rotate_r(Word d){
    unsigned int carry_h = d.high%3;
    unsigned int carry_l = d.low%3;
    d.high = 19683 * carry_l + d.high / 3;
    d.low = 19683 * carry_h + d.low / 3;
    return d;
}

// last_initialized: if set, use to fill newly generated memory with preinitial values...
Word* ptr_to(Word** mem[], Word d, unsigned int last_initialized) {
    if ((mem[d.area])[d.high]) {
        return &(((mem[d.area])[d.high])[d.low]);
    }
    (mem[d.area])[d.high] = (Word*)malloc(59049 * sizeof(Word));
    if (!(mem[d.area])[d.high]) {
        fprintf(stderr,"error: out of memory.\n");
        exit(1);
    }
    if (last_initialized) {
        Word repitition[6];
        repitition[(last_initialized-1) % 6] =
                ((mem[0])[(last_initialized-1) / 59049])
                    [(last_initialized-1) % 59049];
        repitition[(last_initialized) % 6] =
                ((mem[0])[last_initialized / 59049])
                    [last_initialized % 59049];
        unsigned int i;
        for (i=0;i<6;i++) {
            repitition[(last_initialized+1+i) % 6] =
                    crazy(repitition[(last_initialized+i) % 6],
                        repitition[(last_initialized-1+i) % 6]);
        }
        unsigned int offset = (59049*d.high) % 6;
        i = 0;
        while (1){
            ((mem[d.area])[d.high])[i] = repitition[(i+offset)%6];
            if (i == 59048) {
                break;
            }
            i++;
        }
    }
    return &(((mem[d.area])[d.high])[d.low]);
}

unsigned int get_instruction(Word** mem[], Word c,
        unsigned int last_initialized,
        int ignore_invalid) {
    Word* instr = ptr_to(mem, c, last_initialized);
    unsigned int instruction = instr->low;
    instruction = (instruction+c.low + 59049 * c.high
            + (c.area==1?52:(c.area==2?10:0)))%94;
    return instruction;
}

int main(int argc, char* argv[]) {
    Word** memory[3];
    int i,j;
    for (i=0; i<3; i++) {
        memory[i] = (Word**)malloc(59049 * sizeof(Word*));
        if (!memory) {
            fprintf(stderr,"not enough memory.\n");
            return 1;
        }
        for (j=0; j<59049; j++) {
            (memory[i])[j] = 0;
        }
    }
    Word a, c, d;
    unsigned int result;
    FILE* file;
    if (argc < 2) {
        // read program code from STDIN
        file = stdin;
    }else{
        file = fopen(argv[1],"rb");
    }
    if (file == NULL) {
        fprintf(stderr, "File not found: %s\n",argv[1]);
        return 1;
    }
    a = zero();
    c = zero();
    d = zero();
    result = 0;
    while (!feof(file)){
        unsigned int instr;
        Word* cell = ptr_to(memory, d, 0);
        (*cell) = zero();
        result = fread(&cell->low,1,1,file);
        if (result > 1)
            return 1;
        if (result == 0 || cell->low == 0x1a || cell->low == 0x04)
            break;
        instr = (cell->low + d.low + 59049*d.high)%94;
        if (cell->low == ' ' || cell->low == '\t' || cell->low == '\r'
                || cell->low == '\n');
        else if (cell->low >= 33 && cell->low < 127 &&
                (instr == 4 || instr == 5 || instr == 23 || instr == 39
                    || instr == 40 || instr == 62 || instr == 68
                    || instr == 81)) {
            d = increment(d);
        }
    }
    if (file != stdin) {
        fclose(file);
    }
    unsigned int last_initialized = 0;
    while (1){
        *ptr_to(memory, d, 0) = crazy(*ptr_to(memory, decrement(d), 0),
                *ptr_to(memory, decrement(decrement(d)), 0));
        last_initialized = d.low + 59049*d.high;
        if (d.low == 59048) {
            break;
        }
        d = increment(d);
    }
    d = zero();

    unsigned int step = 0;
    while (1) {
        unsigned int instruction = get_instruction(memory, c,
                last_initialized, 0);
        step++;
        switch (instruction){
            case 4:
                c = *ptr_to(memory,d,last_initialized);
                break;
            case 5:
                if (!a.area) {
                    printf("%c",(char)(a.low + 59049*a.high));
                }else if (a.area == 2 && a.low == 59047
                        && a.high == 59048) {
                    printf("\n");
                }
                break;
            case 23:
                a = zero();
                a.low = getchar();
                if (a.low == EOF) {
                    a.low = 59048;
                    a.high = 59048;
                    a.area = 2;
                }else if (a.low == '\n'){
                    a.low = 59047;
                    a.high = 59048;
                    a.area = 2;
                }
                break;
            case 39:
                a = (*ptr_to(memory,d,last_initialized)
                        = rotate_r(*ptr_to(memory,d,last_initialized)));
                break;
            case 40:
                d = *ptr_to(memory,d,last_initialized);
                break;
            case 62:
                a = (*ptr_to(memory,d,last_initialized)
                        = crazy(a, *ptr_to(memory,d,last_initialized)));
                break;
            case 81:
                return 0;
            case 68:
            default:
                break;
        }

        Word* mem_c = ptr_to(memory, c, last_initialized);
        mem_c->low = translation[mem_c->low - 33];

        c = increment(c);
        d = increment(d);
    }
    return 0;
}

หมายเหตุประสิทธิภาพ

แอปพลิเคชันใช้เวลาประมาณ 40 นาทีในเครื่องของฉันสร้างหมายเลข HEX ตามลำดับ ฉันหยุดประมาณหนึ่งชั่วโมงของการคำนวณและเสร็จในวันที่ 0x11

หมายเหตุคำตอบนี้แตกต่างจากอันอื่นของฉันเพราะอันนี้คำนวณจำนวนจริงและมันสามารถคำนวณได้

แอปพลิเคชั่นนี้จัดสรรบัฟเฟอร์การสปิปอัพซึ่งมีขนาดประมาณ 7 กิกะไบต์ดังนั้นจึงควรเตรียม RAM ว่าง

ตัวเลือกอื่น

ทางเลือกการใช้งานที่แตกต่างกันประมาณ 2 กิกะไบต์หน่วยความจำน้อยลง แต่ผลิตออกในรูปแบบของตัวอักษร ASCII (0 = ASCII (0x0), 10 = บรรทัดใหม่ ฯลฯ ... ) และสามารถใช้ได้ที่นี่ มันไม่สามารถแข่งขันได้เนื่องจากข้อกำหนดของการท้าทาย


รหัสกอล์ฟเกี่ยวกับการให้คำตอบสั้น ๆ
Alfe

2
@Alfe Malbolge เป็นภาษาที่ได้รับการออกแบบให้ยากต่อการเขียนโปรแกรมใน (วิกิพีเดียลิงค์) ; ความจริงที่ว่าสิ่งนี้ยิ่งเป็นไปได้นั้นค่อนข้างน่าประทับใจ
Giuseppe

4
ดังนั้นในความเป็นจริงนี่คือคำตอบสั้น ๆ เพียงแค่มาตรฐานจะเปลี่ยน เล็กน้อย.
Alfe

3
@ เกือบคุณจะยินดีที่จะพยายามที่จะลดจำนวนไบต์! ;-)
Giuseppe

2

Python 3 , 118 ไบต์

r=range(9720)
for n in r[1:]:all(all(l%k+9//l for k in r[2:l])for l in(n%10**(i%5)//10**(i//5)for i in r))and print(n)

ลองออนไลน์!

คำอธิบาย

คำเตือน: ไม่มีสตริงจริงที่เกี่ยวข้องในโซลูชันนี้

r=range(9720)
for n in r[1:]:                                        # For each positive integer up to 9720
 all( ... for l in(n%10**(i%5)//10**(i//5)for i in r)) # Check for all its substrings
  all(l%k ... for k in r[2:l])                         # If it is either prime
   +9//l                                               # Or smaller than 10
and print(n)                                           # Then print


1

Perl 6 ,  47 44  43 ไบต์

for 1..9719 {all(m:ex/..+/).Int.is-prime&&.say}
put grep {is-prime +all(m:ex/..+/):},1..9719
put grep {is-prime +all m:ex/..+/:},1..9719

คำอธิบาย:

# print the values space separated, with trailing newline
put

# that match
grep -> $_ {

  # call the method 「.is-prime」 ( that is what 「:」 is for )
  # (autothreaded)
  is-prime

  # convert following to numeric (autothreaded)
  +
  # a junction of
  all(
    # all substrings 2 characters or greater
    $_ ~~ m :exhaustive / . .+ /
  )

  # needed to indicate that 「is-prime」 is a method call
  :

},

# in this Range
1..9719

1

C #, 261 249 247 ไบต์

บันทึก 12 ไบต์ขอบคุณ Leaky Nun

()=>{Action<int>w=System.Console.WriteLine;int i=0,n,j,k,p,m,b;for(;++i<10001;){n=(i+"").Length;if(n<2)w(i);else{b=1;for(j=1;++j<=n;)for(k=0;k+j<=n;){p=int.Parse((i+"").Substring(k++,j));if(p%2<1)b=0;for(m=3;m<p;m+=2)if(p%m<1)b=0;}if(b>0)w(i);}}};

Func<List<int>>นี้จะรวบรวมไป

เวอร์ชันที่จัดรูปแบบจะมีลักษณะดังนี้:

() =>
{
    Action<int> w = System.Console.WriteLine;

    int i = 0, n, j, k, p, m, b;

    for (; ++i < 10001;)
    {
        n = (i + "").Length;

        if (n < 2)
            w(i);

        else
        {
            b = 1;
            for (j = 1; ++j <= n; )
                for (k = 0; k + j <= n; )
                {
                    p = int.Parse((i + "").Substring(k++, j));

                    if (p % 2 < 1)
                        b = 0;

                    for (m = 3; m < p; m += 2)
                        if (p % m < 1)
                            b = 0;
                }

            if (b > 0)
                w(i);
        }
    }
};

เพียงพิมพ์โดยตรงโดยไม่ต้องใช้รายการ
Leaky Nun

แทนที่จะใช้falseหรือtrueใช้0>1และ0<1
แม่ชีที่รั่ว

คุณอาจอ้างถึงสิ่งนี้สำหรับเคล็ดลับการเล่นกอล์ฟเพิ่มเติม
Leun Nun

@LeakyNun ขอบคุณสำหรับเคล็ดลับฉันมักจะชอบรุ่น kinda golfed โพสต์แล้วย้ายจากที่นั่น
TheLethalCoder

1

Swift 4 , 144 bytes

let p={n in !(2..<n).contains{n%$0<1}}
print((1...971).filter{$0<10||p($0)&&($0<100||p($0/10)&&p($0%100))}+[1373,3137,3797,6131,6173,6197,9719])

ลองออนไลน์!

คำอธิบาย

let p={n in !(2..<n).contains{n%$0<1}} // Helper function p, tests if a number is prime
print((1...971).filter{                // Print every number n in the range 1 to 971
 $0<10                                 //  that is less than 10
 ||p($0)&&                             //  or a prime and
 ($0<100                               //   is less than 100 or
  ||p($0/10)&&p($0%100))}              //   n/10 and n%100 are primes
+[1373,3137,3797,6131,6173,6197,9719]) // Print the four digit numbers

1

JavaScript (Node.js) , 130 ไบต์

ถ้าฉันสามารถสันนิษฐานได้ว่าสแต็คอนันต์i*i<=n&&สามารถถอดออกและi*i>nหันไปi>=nซึ่งจะช่วยลดรหัส 9 ไบต์และอาจจะแปลงฟังก์ชั่นหลักในการ recursive: https://tio.run/##LYpBDoIwEEX33AMyAxVbXUmccgX2xkWDRYeQaSPqyrvXkrj5ef/lze7j1vHJ8bWTcPMpTQRMWjm6XJFs0/DZ@EM/ASunBmCsKtfG9/rIiJ0rIoEoJpNbKXPdx@1jx5akGEiytqdNYp2nNFr / wR @ xHkD2Rn81dpLGIGtYfLuEO0yAmH4 (119 ไบต์)

_=>eval(`for(a=[i=1];++i<1e4;)P(i)&&a.push(i)`)||a
p=(n,i=1)=>i*i<=n&&n%++i?p(n,i):n%i
P=n=>n>9?p(n)*p(n%100)*p(n%1e3)*P(n/10|0):n

ลองออนไลน์!


1

Malbolge , 1361 ไบต์

รุ่นที่ง่ายและน่าเบื่อ แสดงตัวเลขจากค่าสูงสุด

D'`r^"!=[YG3yUCvA-csNqp-nJ$HYFgDC#AbQ,|*)\rwvutm3kSonmlkdihg`&dc\aZ_X|V[ZYXQPt7SRQPOHGkKJIHG@d>=<A:98\}|:981U5.-2+0/.'K%$#G!E}e#z!~}v<]yxwpun4rkj0nmfN+ihaf_^$\a`_XW{>=YXWVONrLKPINGkE-IBAe(>=<;_?>=}|:3W1w543,P0).-&J*)(!E}|B"!~}|{zyr8potml2jongfkjibg`&d]\"`_XW{>=YXWVONr54JIHMFj-,HGF?>b%A@?87[;:981w543,P0).-&J*j(!EfeB"!~}_u;yrqpun4rqpihmlkjihg`&d]\"`_X|\[ZYXQuUNMLQJnH0LKJIBAe(>=<`#"8\<5Y9270T43,Pqp.-&J$)"!~D|#"y~}|u;s9qvotsrk1inglkdihg`&d]\"Z~XWVUZYXQu87SLKo2NGFjDIHGF?>bBA#"8\6;:981Uv.32+*)Mnm%$)('~D|{A!xwv{zyr8vXnsrkjoh.fNdchg`ed]#aC_^WVz=YXQPt7SRQPOHGkK-IHGF?>bBA#"8\6;:981Uv.32+*)Mnm%*#"F&%$#cy?}v<]\xwpun4rqSonmf,diha'eG]#a`_X|V[ZYXWPt76LKoIHGLEiCHGFED=aA:?>7[;:981w/4-,PO)o'&J*j(!E%edz@~}_u;yxqpo5mrqpoh.f,jibgf_%]\[!_XW{[ZYXQu87SLKo2NGFjJIHAF?c=BA@?>=<5Y38765.-Q10)o'&J*j(!E%e{z@~}|{ts9qpotsrk1oQglkd*)gIed]#DZ_^]VzZYRQuONMRKJnNGLEJCgG)(D=aA:?>=<;4X816/43,P0).-&+$H('gf|Bcb~w|u;yxwYutmrqj0nmleMib(fH%cba`_X|VUZYXWPt7SRQPOHGkEDIHG@dDC<;@?8\6|:32V0T43,+O)o'&J*)('&}C{"yxwv<tyr8vun4Ukpoh.fN+c)gIed]#DZ_^]VzTSRWPtTSLQJnH0LKJIBAe(>=BA@987[;:381Uv.32+*)Mnm%$)('~D${"y?}_uzyxqpo5srqSonmf,jihgfeG]#a`_X|V[ZYXWPt76LKo2NGFjJIH*)ED=a;@?>76;4X816/43,P*).',%I)('~Ded"y~}|u;srqvo5mlqpih.fN+cba`&d]\aZ~^]VUZSwWPUTSLpJ2NGLEiCHGFED=a;:?>7<5YX876v43,+O).-,+$H('&feBz!x}v{zsr8punsrk1inglkdihg`&d]\"Z~X]V[ZSwQVUTMRKo2NGFjDIHGF?>b%A@?87[;{921U5.3210)M-,%k#(!EfeB"y~}v{zyr8%

ลองออนไลน์!


0

TI-83/84 พื้นฐาน, 124 ไบต์

For(A,1,E4
DelVar Nint(log(A→P
Ans→Q
While Ans
For(I,0,Q-Ans
10^(P+1
AnsfPart(iPart(A/10^I)/Ans→S
min(Ans={2,3,5
If S≥7 and fPart(.5S
min(remainder(S,3+2cumSum(not(binompdf(int(.5√(S)),0
N+not(Ans→N
End
P-1→P
End
If not(N
Disp A
End

ลูปมากกว่าจำนวนเต็ม 10k แรก ตั้งค่าตัวนับใน N เพื่อตรวจสอบแต่ละ substring prime และ int (log (A ดึงหนึ่งตัวเลขที่น้อยกว่าจำนวนหลักในตัวเลขปัจจุบัน) จากนั้นเราตั้งหมายเลขนั้นไว้ในตัวแปรตัวที่สองเพื่อให้เราสามารถ P ลงไปในแต่ละความยาว ซับสตริงอย่างน้อย 2 หลัก 10 ^ ... และ AnsfPart (iPart (,,, สร้างซับสตริงปัจจุบันเพื่อตรวจสอบไพรเมอร์) จากนั้น 3 บรรทัดต่อไปนี้ทำการตรวจสอบไพรเมอร์เป็น 1 หรือ 0 ใน Ans หากซับสตริงไม่ดี เราเพิ่ม N และหลังจากตรวจสอบสตริงย่อยทั้งหมดแล้วถ้า N ยังคงเป็น 0 เราจะพิมพ์หมายเลขปัจจุบัน

อาจมีการปรับแต่งบางอย่างเพื่อเพิ่มประสิทธิภาพของการตรวจสอบแบบดั้งเดิมต่อการทดสอบนี้? ฉันดีใจที่พบอัลกอริทึมในจำนวนไบต์น้อยกว่าการจัดเก็บผลลัพธ์ในรูปแบบ TI-83 โดยตรง!



0

PHP , 135 ไบต์

for(;++$n<1e4;$p||print"$n
")for($p=$i=0;$i<$l=strlen($n);$i++)for($j=1;$j++<$l-$i;$p|=$k)for($k=($m=substr($n,$i,$j))-1;$k&&$m%$k--;);

ลองออนไลน์!

for(;                         // level 1 loop on
  ++$n<1e4;                   // all numbers from 1 to 10,000, $n is current number
  $p||print"$n\n"             // at the end of loop for each number, print $n if all multi digit sub strings were prime ($p=0)
)
  for(                        // level 2 loop on each digit of $n
    $p=                       // $p is a flag for all sub string primes and is set to 0 for each new $n
      $i=0;                   // $i is position of current digit (and sub string start position)
    $i<$l=strlen($n);         // $l is the total digits count in $n
    $i++                      // increment $i by one
  )
    for(                      // level 3 loop to create sub strings
      $j=1;                   // $j is length of sub string, we only care about multi digit sub strings so it starts from 1
      $j++<$l-$i;             // continue the loop as long as $j has not reached last digit and increment it by one
      $p|=$k                  // THIS IS RUN AFTER LOOP LEVEL 4: update $p flag based on value of $k
                              //     $p will be left at 0 only if all of the sub strings are prime (if $k is always 0)
    )
      for(                    // level 4 loop to check each sub string to be prime
        $k=(                  // $k is set to current sub string minus 1
          $m=substr($n,$i,$j) // $m is current sub string
        )-1;                  // 
        $k && $m%$k--;        // as long as $k is more than 0 and $m%$k is not zero, decrement $k by one and continue
                              //     a prime number will only get a 0 remainder, when $k gets to 1
                              //     so $k will be 0 for primes and more than 0 for non-primes
      );
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.