Công cụ tạo chỉ số cho phép số nguyên tố thú vị của Crazy Librarian


13

Bạn đã lưu ngày với mã trình tự chính của bạn , và giáo viên toán yêu thích nó. Nhiều đến mức một thách thức mới được đặt ra cho người thủ thư (a / k / a, sếp của bạn). Xin chúc mừng, bạn có thể viết mã giải pháp để người thủ thư có thể một lần nữa gây ấn tượng với giáo viên toán.

Bắt đầu với dãy số tự nhiên trong cơ sở 10, N

0, 1, 2, 3, 4, 5, 6 ...

Không bao gồm 01, mọi số trong dãy này đều là số nguyên tố, P

2, 3, 5, 7, 11, 13 ...

hoặc hỗn hợp, C

4, 6, 8, 9, 10, 12, 14, 15, 16, 18, 20 ...

Phản ánh về cách người thủ thư nghĩ cách chèn một chữ số nguyên vào phần mở rộng thập phân của một số từ P , giáo viên toán thay vào đó đã tạo ra một hàm G (x, y) lấy một số xtừ N với 1 <= x <= 9và một số ytừ C và chèn xvào mở rộng thập phân yở mọi vị trí, theo thứ tự từ trái sang phải, chỉ chọn các số duy nhất.

Ví dụ: G (3,14)314, 134, 143. Tuy nhiên, G (1,14) chỉ là 114, 141, cho dù bạn trả trước hoặc chèn 1vào 14, cùng một số 114được tạo.

Giáo viên toán đã tự hỏi bạn phải thực hiện những hoán vị này bao nhiêu lần trước khi bạn nhận được một số trong P , nếu bạn thực hiện xtheo thứ tự tăng dần. Giáo viên toán học gọi đây là Chỉ số tổng hợp của một số và viết nó là CPI (y) .

Ví dụ: 4chỉ cần thực hiện hai lần : 14, 41, vì 41là số nguyên tố, nên CPI (4)2. Tuy nhiên, 8cần phải được thực hiện 6 lần, 18, 81, 28, 82, 38, 83trước khi đạt được 83số nguyên tố, vì vậy CPI (8)6.

Nhiệm vụ của bạn là viết mã sẽ xuất ra Chỉ số tổng hợp này , được cung cấp một số đầu vào.

Đầu vào

  • Một số nguyên duy nhất y, như ytrong C , nhập thông qua đối số hàm, STDIN hoặc tương đương.
  • Đối với mục đích tính toán, bạn có thể giả sử ysẽ phù hợp với các phạm vi số nguyên thông thường (ví dụ: giả sử 2 31 -1 là giới hạn trên).
  • Hành vi ykhông trong C là không xác định.

Đầu ra

Các kết quả Composite-Thủ Index , được tính như mô tả ở trên, sản lượng để STDOUT hoặc tương đương, với hai trường hợp ngoại lệ:

  • Nếu cuối cùng hoán vị (ví dụ, phụ thêm 9để y) là một trong những có kết quả trong một số nguyên tố, đầu ra -1. Một ví dụ, mở rộng dưới đây, là y=14.
  • Nếu không có hoán vị (nghĩa là G (x, y) là tập con của C cho tất cả 1 <= x <= 9), đầu ra 0. Một ví dụ, mở rộng dưới đây, là y=20.

Ví dụ

 y -> operations             : output
 4 -> 14, 41                 : 2
 6 -> 16, 61                 : 2
 8 -> 18, 81, 28, 82, 38, 83 : 6
 9 -> 19                     : 1
10 -> 110, 101               : 2
12 -> 112, 121, 212, 122, 312, 132, 123, 412, 142, 124, 512, 152, 125, 612, 162, 126, 712, 172, 127 : 19
14 -> 114, 141, 214, 124, 142, 314, 134, 143, 414, 144, 514, 154, 145, 614, 164, 146, 714, 174, 147, 814, 184, 148, 914, 194, 149 : -1
15 -> 115, 151               : 2
16 -> 116, 161, 216, 126, 162, 316, 136, 163 : 8
18 -> 118, 181               : 2
20 -> 120, 210, 201, 220, 202, 320, 230, 203, 420, 240, 204, 520, 250, 205, 620, 260, 206, 720, 270, 207, 820, 280, 208, 920, 290, 209 : 0

Những hạn chế

  • Đây là môn đánh gôn, vì bạn sẽ cần phải sao chép nó vào thẻ chỉ mục để người thủ thư có thể chỉ cho giáo viên toán và tay bạn bị chuột rút dễ dàng.
  • Hạn chế kẽ hở tiêu chuẩn áp dụng. Người thủ thư không tha thứ cho những kẻ gian lận.

Bảng xếp hạng


Đối với 9, 19là số nguyên tố, vậy đầu ra không phải là 1?
isaacg

Wow, biểu đồ câu trả lời mát mẻ!
phong cách xếp tầng

1
@ cascading-style Nếu bạn muốn nói về Bảng xếp hạng, đó chủ yếu là công việc thủ công của Martin .
admBorkBork

Câu trả lời:



2

Haskell, 166 161 byte

p n=mod(product[1..n-1]^2)n>0
q=p.read
n#c=[h++c:t|i<-[0..length n],(h,t)<-[splitAt i n]]
[y]%i|q y= -1|1<2=0
(y:z)%i|q y=i|1<2=z%(i+1)
f n=((n#)=<<['1'..'9'])%1 

Ví dụ sử dụng: f "8"-> 6, f "14"-> -1, f "20"-> 0.

Cách thức hoạt động: plà bài kiểm tra tính nguyên thủy (bị đánh cắp từ câu trả lời của @Mauris trong một thử thách khác). qmột trình bao bọc pđể chuyển đổi các loại từ chuỗi sang số nguyên. n # cchèn ctại mọi vị trí trong n. %có một danh sách các số và một chỉ mục i. Khi phần tử đầu tiên của danh sách là số nguyên tố, trả về i, phần tử khác sẽ hiển thị với phần đuôi của danh sách và i+1. Dừng lại khi có một yếu tố duy nhất còn lại và trở lại -1nếu đó là số nguyên tố 0khác.


1

Chồn 0,11 , 85 byte

n1(l*$d`)d9[i3G(0c2c$%$r2c*l*2c3c1+*++2gl:d2G)2gx1c2G3gx]r3XS(2M4&I)N.ikI1-4&1~N.1+N.

Hãy thử nó ở đây.

Giải thích (sắp có)

n            Take integer from input (say, n)
1(           Calculate smallest power of 10 greater than n (say, a)
  l*         Multiply by 10
    $d`      Duplicate stack and push n>a
       )     Close while loop (ends when n<=a)
        d    Duplicates a (let's call it b)

9[                                                 For loop that runs 9 times 
  i1+                                              Loop counter + 1 (say, i)
     3G                                            Puts the loop counter in position 3
       (                                           Opens while loop
        0c2c$%                                     Copies n and b and pushes n//b, n%b
              $r                                   Swaps top two elements of stack
                2c*l*                              Copies b and multiplies by 10
                     2c3c*                         Copies b and i and multiplies them
                          ++                       Adds it all together (inserts i)
                            2gl:                   Gets b and divides by 10
                                d2G                Duplicates and puts one copy back
                                   )               Closes while loop (breaks when b=0)
                                    2gx            Gets and dumps b
                                       1c2G        Copies a and puts it in b's place
                                           3gx     Get and dumps i
                                              ]    Close for loop

r       Reverses stack
 3X     Dumps the top three elements (namely, n, a, and b)
   S    Removes duplicates

(                           Opens while loop
 2M                         Pushes 1 if top of stack is prime, 0 otherwise
   4&                       Jump four spaces if prime
     I)N.                   If the loop actually finishes, then all were composite,
                             so output 0 and stop.
         ik                 Pushes loop counter and breaks
           I1-              Pushes length of stack minus 1 (0 if last one was prime)
              4&1~N.        If this is 0, pushes -1, outputs as integer, and stops.
                    1+N.    Adds 1, outputs as integer, and stops.

1

Javascript, 324 byte

y=>(p=(n,c)=>n%c!=0?c>=n-1?1:p(n,++c):0,u=a=>a.filter((c,i)=>a.indexOf(c)==i),g=(x,y)=>u(((x,y,z)=>z.map((c,i)=>z.slice(0,i).join("")+x+z.slice(i).join("")).concat(y+x))(x,y,y.split(''))),h=(x,y)=>g(x,y).concat(x==9?[]:h(++x,y)),i=h(1,y).reduce((r,c,i)=>r?r:p(c,2)?i+1:0,0),console.log(p(y,2)||y<2?'':i==h(1,y).length?-1:i))

Nếu y không ở C, thì đầu ra STDOUT trống.

Giải trình

y=>(
    //Prime Test function
    p=(n,c)=>n%c!=0?c>=n-1?1:p(n,++c):0,

    //Unique function
    u=a=>a.filter((c,i)=>a.indexOf(c)==i),

    //Generates numbers from a couple x and y
    g=(x,y)=>u(((x,y,z)=>z.map((c,i)=>z.slice(0,i).join("")+x+z.slice(i).join("")).concat(y+x))(x,y,y.split(''))),

    //Generates all possible numbers from y using recusion
    h=(x,y)=>g(x,y).concat(x==9?[]:h(++x,y)),

    //Check if any prime in the generated numbers
    i=h(1,y).reduce((r,c,i)=>r?r:p(c,2)?i+1:0,0),

    console.log(
        //Is Y in C ?
        p(y,2)||y<2?
            ''
            :
            // Check if the answer is not the last one
            i==h(1,y).length?-1:i)
    )

Có thể rất muộn khi bình luận điều này, nhưng bạn không thể lưu một vài byte bằng cách thay thế n%c!=0bằng n%c; c>=n-1với c>n-2; và x==9với x-9?
Zacharý
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.