Bị mất trong bản dịch


15

Đây là một nếu bạn không quen với định dạng, nhấp vào thẻ để truy cập wiki. Sẽ không có chủ đề của tên cướp cho câu hỏi này.

Cảnh sát

Nhiệm vụ của bạn là Cops là chọn hai chuỗi từ Bách khoa toàn thư trực tuyến về trình tự số nguyên và viết chương trình lấy phần tử thứ n của một chuỗi làm đầu vào và xuất phần tử thứ n của chuỗi thứ hai. Sau đó, bạn thực hiện một câu trả lời bao gồm mã và bỏ qua các chuỗi đã chọn. Những tên cướp sẽ cố gắng tìm các chuỗi bạn đã chọn và nếu một người quản lý để tìm các chuỗi bạn có trong tâm trí hoặc một số trình tự khác mà chương trình của bạn, bạn phải đánh dấu câu trả lời của mình là Cracked . Nếu một tên cướp thông báo cho bạn một vết nứt mà bạn tin là không hợp lệ, bạn có thể đưa ra một bằng chứng rằng đó không phải là vết nứt. Nếu không bạn phải đánh dấu nó như vậy.

Theo các câu trả lời thông thường đã được giải mã trong 7 ngày, đủ điều kiện để được đánh dấu an toàn. Một cảnh sát có thể đánh dấu câu trả lời của họ là an toàn bằng cách tiết lộ các trình tự mà họ có trong tâm trí. Một khi an toàn một câu trả lời có thể không còn bị nứt.

Mục tiêu là để giảm thiểu số byte của chương trình của bạn trong khi vẫn không bị khóa.

Thí dụ

Mã Python sau đây dịch phần tử thứ n của A000290 (số vuông) thành A000217 (số tam giác):

lambda x:sum(range(0,int(x**.5+1)))

Quy định và yêu cầu

  • Nếu bạn chọn một chuỗi chưa được chứng minh là hữu hạn, bạn phải xuất tất cả các thuật ngữ có thể tồn tại không chỉ các thuật ngữ được liệt kê trên trang OEIS

  • Là một ngoại lệ đối với các ngôn ngữ quy tắc trước đó mà không có số nguyên chính xác vô hạn, không phải xuất hoặc nhập số ngoài phạm vi của chúng.

  • Kích thước của chuỗi đầu vào của bạn không được chứng minh là nhỏ hơn chuỗi đầu ra.

  • Chuỗi đầu vào của bạn không được có bất kỳ yếu tố lặp lại nào (nếu không thì nhiệm vụ này là không thể)

  • OEIS bao gồm một chỉ mục trên trang của họ (số đầu tiên sau tiêu đề "OFFSET") theo mặc định, đây là phần bù của bạn cho n (n bằng chỉ mục cho phần tử đầu tiên trên chuỗi) nếu bạn chọn một chỉ mục khác bạn phải chỉ ra như vậy trong câu trả lời của bạn.

  • Nếu bạn chọn một phần bù khác với phần được liệt kê trên OEIS, bạn vẫn phải ánh xạ tất cả các phần tử trong chuỗi đầu vào của mình sang phần tử tương ứng trong chuỗi đầu ra của bạn.

  • Nếu chương trình của bạn nhận được một đầu vào không nằm trong chuỗi đầu vào, nó có thể làm bất cứ điều gì nó muốn (hành vi không xác định). Tuy nhiên, nó có thể là lợi ích tốt nhất của bạn cho nó vẫn xuất ra một số nguyên.

  • Thật không thể tin được khi cố tình làm cho mã của bạn khó chạy, bằng cách làm cho nó tốn thời gian để thực thi hoặc thông qua lựa chọn ngôn ngữ không miễn phí . Trong khi tôi sẽ thi hành cái sau, tôi không thể thực thi cái trước một cách khách quan. Tuy nhiên, tôi cầu xin bạn, vì niềm vui, không cố gắng trước vì nó làm cho thử thách trở nên khó khăn hơn đối với những người có máy tính yếu hơn.

Cướp

Nhiệm vụ của bạn là Robbers là chọn các câu trả lời không bị bẻ khóa, không an toàn và tìm các chuỗi mà chúng ánh xạ giữa. Nếu bạn tìm giải pháp một giải pháp hoạt động (không nhất thiết là giải pháp dự định của Cảnh sát), hãy bình luận các trình tự về câu trả lời thích hợp.

Những tên cướp không nên lo lắng nhiều về việc xác minh rằng hai chuỗi cụ thể là một giải pháp, một người nên đăng một giải pháp nếu nó phù hợp với tất cả các mục trên OEIS. Nếu đó không phải là trình tự mà một cảnh sát có trong đầu, cảnh sát có thể đưa ra một bằng chứng rằng nó không chính xác hoặc đánh dấu nó là bị bẻ khóa nếu họ không thể tìm thấy.


3
Làm thế nào một tên cướp có thể chắc chắn rằng câu trả lời của mình là đúng cho tất cả các đầu vào? Họ có phải chứng minh nó bằng toán học không?
Leo

1
@Leo Một tên cướp nên đăng một giải pháp nếu nó phù hợp với tất cả các mục trên OEIS. Nếu đó không phải là trình tự mà một cảnh sát có trong đầu, họ có thể đưa ra một bằng chứng rằng nó không chính xác hoặc đánh dấu nó là bị bẻ khóa nếu họ không thể tìm thấy. Tôi sẽ cập nhật chủ đề của tên cướp.
Đăng Rock Garf Hunter

2
Thật khó để vạch ra ranh giới giữa các giả định phổ biến và các ý tưởng chưa được chứng minh. Vì lợi ích của sự rõ ràng, tôi muốn nói rằng bạn phải chứng minh được rằng câu trả lời của bạn có hiệu quả.
Dennis

1
Tôi có một cảm giác rằng một số giải pháp thật sự tốt đẹp có thể bị bẻ khóa một cách ngu ngốc như oeis.org/A000004 -> oeis.org/A000012
Wolfram

2
@Dennis Tôi đoán đó là một điểm tốt. Mặc dù đó là một người lập dị rằng không có cách nào để mọi người nhận được đại diện cho việc tìm kiếm các vết nứt vì có vẻ như điều đó khá khó khăn cho thử thách này.
0 '

Câu trả lời:


6

Jelly , 14 byte (Được bẻ khóa bởi @Wolfram)

+66%444µ111<µ¡

Hãy thử trực tuyến!

Nó nên khá rõ ràng những gì nó làm. Trên thực tế, vì lợi ích của người dùng không phải là Jelly, tôi thậm chí sẽ đưa ra lời giải thích:

Giải trình

+66%444µ111<µ¡
       µ    µ¡  Run the transformation
+66%444           "add 66, then modulo 444"
        111<    once if 111 is less than the input, zero times otherwise 

Câu hỏi là, tại sao nó làm điều này?

Nứt

Các trình tự trong câu hỏi là A201647A201647 . Chúng là hữu hạn và chỉ khác nhau ở 2 yếu tố cuối cùng:

  • 3, 5, 7, 9, 11, 15, 21, 165, 693
  • 3, 5, 7, 9, 11, 15, 21, 231, 315

Vì vậy, nếu đầu vào thấp, tôi để nguyên như vậy và tôi chỉ đơn giản là phù hợp với một chức năng để chuyển đổi hai cái cuối cùng.


@WheatWizard: Nếu bạn nghĩ rằng bạn có thể có được lợi thế từ đó, hãy dùng nó. Nhưng bạn sẽ phải nhanh, vì nếu có ai đó kiểm tra nó với bộ đệm được kích hoạt, họ sẽ làm ô nhiễm bộ đệm cho mọi người sau họ.

@WheatWizard tắt bộ đệm đầu ra đảm bảo bạn nhận được kết quả mới từ máy chủ, nhưng kết quả mới đó vẫn sẽ được lưu vào bộ đệm.
Dennis

1
@WheatWizard Hoặc thêm một bộ ngắt bộ đệm khi bạn kiểm tra nó: một chuỗi được chọn ngẫu nhiên như một phần của một nhận xét hoặc trường nhập không sử dụng.
Dennis

+1 câu trả lời này thực sự rất đơn giản, nhưng vẫn đặt ra một thách thức đối với những tên cướp
Kritixi Lithos


3

Jelly , 7 byte (Được bẻ khóa bởi @Jonathan ALLan)

ÆFḅÆdÆẸ

Hãy thử trực tuyến!

Những gì nó làm

ÆFḅÆdÆẸ  Main link. Argument: n

ÆF       Factor n into prime-exponent pairs.
   Æd    Compute σ, the number of divisors of n.
  ḅ      Convert each pair from base σ to integer.
     ÆẸ  Yield the integer whose prime signature (infinite sequence of all prime
         exponents, including zeroes, in order) is equal to the result.

3
Cũng có thể có các ánh xạ hợp lệ khác, nhưng ánh xạ mà tôi nghĩ bạn có trong đầu là các số nguyên tố - A000040 đến 2 ^ (2p + 1), p Prime - A100626 .
Jonathan Allan

@Jonathan ALLan Tôi cũng đã đến A000040 -> A100626, mặc dù bạn đánh những ngón tay chậm chạp của tôi
Ahemone

Chúng tôi cũng có thể thấy rằng nó sẽ giữ: khi đầu vào là số nguyên tố, p, ÆFsản lượng (p,1)Ædsản lượng 2, vì vậy chúng ta có được 2p+1, mà có nghĩa là ÆẸsẽ mang lại nguyên tố đầu tiên, 2, lũy thừa của kết quả đó, 2^(2p+1).
Jonathan Allan

@Jonathan ALLan Vâng, đó là những gì tôi sẽ làm.
Dennis

2

Python 3, 256 byte (Đã bẻ khóa! )

from math import*
def p(i,m):
 r=0;d=floor(log(i))
 for y in range(d):r+=(pow(16,d-y-1)%(8*y+m))/(8*y+m)
 o=-1;y=d
 while r!=o:o=r;r+=pow(16,d-y-1)/(8*y+m);y+=1
 return r
def q(n):r=4*p(n,1)-2*p(n,4)-p(n,5)-p(n,6);return floor((1-(-r%1)if r<0 else r%1)*16)

Hãy thử trực tuyến!

Xin lỗi nếu mã này trông khủng khiếp, tôi nghĩ rằng đây là lần chơi gôn Python đầu tiên của tôi. Việc truyền trong Python giúp mã dễ dàng hơn.


Tôi giả sử các chức năng trong câu hỏi là q?
Đăng Rock Garf Hunter

Ngoài ra, biến kdường như không được sử dụng để bạn có thể lưu một số byte bằng cách loại bỏ nó.
Đăng Rock Garf Hunter

Có phải là A001671 đến A062964 ?
Đăng Rock Garf Hunter

@WheatWizard có, cảm ơn, và vâng.
betseg

2

Đang xử lý , 184 byte, AN TOÀN!

int x(int y){int b=TRIANGLES-MITER;for(int i=OVERLAY/BURN;i>#fffffe;b*=(int)pow(y,(MOVE-HAND+0.)/(int)sqrt(red(color(-1<<16))/(int)log(color(0)*color(-1)))),i-=QUAD/DARKEST);return b;}

Một hàm lấy trong một int và trả về một int. Miễn là số đầu vào nằm trong intphạm vi, chương trình sẽ hoạt động tốt.

Đây không phải là chậm, chỉ là không thể đọc được. Chúc may mắn!


Tôi ngạc nhiên đệ trình này đã kéo dài lâu. Ồ, ít nhất đó là lần gửi an toàn đầu tiên :)

A000578 đến A000290

Nói cách khác: các hình khối đến hình vuông.

Giải trình

Trong khi trả lời Không có chuỗi (hoặc số) được đính kèm , tôi phát hiện ra một danh sách các hằng số Xử lý đại diện cho số nguyên. Ví dụ, CORNERcó một giá trị 0. Danh sách đầy đủ có thể được tìm thấy ở đây . Để tìm giá trị của hằng số, bạn có thể chỉ printnó.

Sử dụng điều này, tôi quyết định hoán đổi một số số nhất định với sự kết hợp của các hằng số này để làm xáo trộn nó. Vì vậy, đây là những gì bạn nhận được khi thay thế các hằng số bằng các giá trị int tương ứng của chúng.

int x(int y){int b=9-8;for(int i=512/8192;i>#fffffe;b*=(int)pow(y,(13-12+0.)/(int)sqrt(red(color(-1<<16))/(int)log(color(0)*color(-1)))),i-=16/16);return b;}

Ngay cả bây giờ, mã rõ ràng đầy đủ không được tiết lộ. Các màu còn lại. Trong Xử lý, các biến màu có các giá trị int, ví dụ: trắng ( #ffffff) là -1, #fffffeis -2, #fffffdis -3, v.v. Điều này có thể được tìm thấy bằng cách printing màu sắc. Vì vậy, hãy đơn giản hóa màu sắc.

int x(int y){int b=9-8;for(int i=512/8192;i>-2;b*=(int)pow(y,(13-12+0.)/(int)sqrt(red(color(-1<<16))/(int)log(-16777216*-1))),i-=16/16);return b;}

Chúng ta sắp đi được nửa đường rồi :) Để hiểu các giá trị, chúng ta cần đơn giản hóa các biểu thức số.

int x(int y){int b=1;for(int i=0;i>-2;b*=(int)pow(y,(1.)/(int)sqrt(red(color(-65536))/(int)log(16777216))),i-=1);return b;}

Rõ ràng hơn nhiều! Bây giờ hãy đơn giản hóa logarit.

int x(int y){int b=1;for(int i=0;i>-2;b*=(int)pow(y,(1.)/(int)sqrt(red(color(-65536))/(int)16.6...)),i-=1);return b;}


int x(int y){int b=1;for(int i=0;i>-2;b*=(int)pow(y,(1.)/(int)sqrt(red(color(-65536))/16)),i-=1);return b;}

Sắp hết rồi! Bây giờ chúng ta phải tìm ra điều này rất nhiều (int)sqrt(red(color(-65536))/16)). color(-65536)là màu đỏ, vì vậy rgb(255, 0, 0). Bây giờ red()hàm trả về giá trị của thành phần màu đỏ trong đối số (là màu). Vậy có bao nhiêu màu đỏ trong màu đỏ? Câu trả lời là 255. Với điều đó, chúng tôi nhận được

(int)sqrt(255/16))
(int)sqrt(15)
(int)3.8...
3

Thay thế điều này trong chương trình dẫn đến:

int x(int y){int b=1;for(int i=0;i>-2;b*=(int)pow(y,(1.)/3),i-=1);return b;}

Yay, đã xong!

int x(int y){                        // y is the cube
  int b=1;                           // variable that holds the final result
  for(int i=0;                       // for-loop that
          i>-2;                      // loops twice
          b*=(int)pow(y,(1.)/3),     // multiply b by the cube root of y
          i-=1);                     // decrement the looping variable
  return b;                          // finally return b
}

Để tổng hợp, điều này trả về hình vuông (được thực hiện bằng cách nhân hai lần trong vòng lặp for) của căn bậc ba của số đầu vào.


0

Mathicala (hoặc bất cứ điều gì) -  Cracked!

f[x_] := Quotient[ 366403414911466530559405368378193383110620062 - 
    755296348522256690003418238667147075159564695 x + 
    525778437135781349270885523650096958873079916 x^2 - 
    156594194215500250033652167655133583167162556 x^3 + 
    20861131421245483787723229627506507062999392 x^4 - 
    1181515772235154077024719095229309394979146 x^5 + 
    29382627265060088525632055454760915985604 x^6 - 
    308672970015057482559939241399297150364 x^7 + 
    1087516675449597417990589334580403666 x^8 - 
    312989984559486345089577524231879 x^9, 
  265451130886621254401938908479744271974400 ]

Tôi biết Mathicala là phần mềm không miễn phí, nhưng hàm này không quan trọng để chuyển sang bất kỳ ngôn ngữ yêu thích nào bạn muốn chạy. Nó thực sự tính giá trị của đa thức bậc 9 đã cho ở số nguyên đầu vào, sau đó lấy thương số nguyên của giá trị đó và số 42 chữ số trên dòng cuối cùng. Ví dụ, f[100]đánh giá để -3024847237.


2
A003173 đến A165892 . Tuy nhiên, đây không thực sự là vấn đề về lập trình;)
Leo

2
Dù sao, vì mathicala không miễn phí, tôi đã viết để biến nó thành một hàm python
Leo

@Leo: Làm tốt lắm! Có một quả trứng Phục sinh trong chức năng quá; bạn đã tìm ra nó chưa? : D
Greg Martin

Uhhh ... Không :(
Leo

Để ánh xạ một bộ chín phần tử sang bộ chín phần tử khác, tôi chỉ cần đa thức bậc 8. Bạn có thể rút ra kết luận (chính xác) rằng có thêm một giá trị đầu vào tôi ánh xạ tới một giá trị đầu ra cụ thể. Hãy cho tôi biết nếu (khi) bạn tìm thấy nó :)
Greg Martin
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.