Chủ đề cướp của đảo Polyglot


22

Đây là chủ đề của những tên cướp trong thử thách này

Các cảnh sát sẽ chọn một chuỗi OEIS và viết hai chương trình đầy đủ bằng hai ngôn ngữ khác nhau tạo ra mục thứ n trong chuỗi khi được cung cấp n thông qua STDIN. Hai chương trình phải là đảo chữ cái của nhau, nghĩa là mỗi chương trình có thể được sắp xếp lại từ các chữ cái của nhau.

Họ sẽ trình bày số OEIS, mã nguồn và tên của một ngôn ngữ.

Bạn phải tìm thấy một đảo chữ của bản đệ trình của cảnh sát ban đầu chạy bằng ngôn ngữ khác với ngôn ngữ mà cảnh sát sử dụng. Để bẻ khóa một câu trả lời, bạn chỉ phải tìm bất kỳ ngôn ngữ và chương trình nào tạo ra chuỗi và là đảo chữ của bản gốc, không nhất thiết là câu trả lời mà cảnh sát đã nghĩ đến.

Bạn có thể xuất ra theo mã ký tự hoặc bao gồm STDERR trong giải pháp của mình, nhưng chỉ khi cảnh sát chỉ ra giải pháp ẩn của họ mới làm như vậy. Đầu ra thập phân cho STDOUT luôn là một vết nứt hợp lệ.

Do đó, cảnh sát được khuyến khích để làm cho nó khó nhất có thể để tìm bất kỳ ngôn ngữ nào thực hiện nhiệm vụ bằng cách sử dụng danh sách các ký hiệu của họ.

Chấm điểm

Người có nhiều vết nứt nhất sẽ là người chiến thắng trong phần này. Chỉ vết nứt đầu tiên cho mỗi giải pháp sẽ được tính vào điểm số của một người.

Ban lãnh đạo

Cảm ơn tất cả mọi người đã diễn ra trong thử thách này.

Đây là ban lãnh đạo

Place  User             Score
-----------------------------
1      Adnan            3
1      Kritixi Lithos   3
1      Emigna           3
1      milk             3
5      Steven H.        2
5      Wheat Wizard     2
5      jimmy23013       2
8      ETH Productions  1
8      Dennis           1
8      alleks           1
8      Martin Ender     1
8      Oliver           1
8      Conor O'Brien    1

Không chắc chắn tôi hiểu phần "đảo chữ", bạn có thể giải thích một chút không?
Bộ đệm đã đọc

@TheBitByte Giải pháp khác phải sử dụng tất cả các ký tự giống như bản gốc nhưng được sắp xếp lại theo thứ tự khác.
Thuật sĩ lúa mì

Nếu không có thêm nhân vật?
Bộ đệm đã đọc

@TheBitByte có và không xóa bất kỳ ký tự nào
Wheat Wizard

Câu trả lời:


9

05AB1E , 38 byte, Loovjo , A000290

nXtdief e():return X*X
pr e(input())##

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

Rất có thể không phải là giải pháp dự định, nhưng nó hoạt động.

Giải trình

n      # square input
 X     # push 1
  t    # push sqrt(1)
   d   # push is_number(1.0)
    i  # if true do the rest of the code (1.0 is not a number so it will never execute)

1
1.0 is not a number? Bạn có thể vui lòng giải thích?
Sản xuất ETH

1
@ETHproductions: hàm is_numberkiểm tra số đó chỉ bao gồm 0-9. Như .không phải là một con số, nó trở thành sai. Hàm có thể sử dụng tên mô tả nhiều hơn :)
Emigna

8

Jolf, 15 byte, Adnan , A000290

*&"?!#$|<=@\^{}

Hãy thử nó ở đây! Chắc chắn không phải là giải pháp dự định, nhưng hey, nó hoạt động.

Giải trình

*&"?!#$|<=@\^{}
*                multiply
 &               the two inputs to this func, x, y: x && y
                 returns y if x and y, or the falsey argument.
  "?!#$|<=@\^{}  this string is always truthy, so the second arg is used.
                 two implicit inputs are taken, both equal to the first arg
                 so, this corresponds to *xx, which is x^2.



6

2sable , 7 byte, Kritixi Lithos , A005843

Mã số:

r^#ei2*

Giải trình:

r         # Reverse the stack, which is a no-op
 ^        # XOR the input with itself, always leading to 0
  #       # If 1, break (which stops the program)
   e      # Compute input nPr input, which always leads to 1
    i     # If equal to one, do the following..
     2*   #   Multiply the input by 2.

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


Thật tuyệt vời khi mã thực tế chỉ có 2 byte!
Kritixi Lithos

6

Lục giác , 13 byte, Adnan , A002378

?"&\>=})\*!@<

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

Mở ra:

  ? " &
 \ > = }
) \ * ! @
 < . . .
  . . .

Không phải 100% cho dù đây là bản gốc, bởi vì phía trên bên trái \không được sử dụng.

Đây <\>chỉ là những tấm gương, vì vậy chương trình thực sự hoàn toàn tuyến tính:

?"&)}=*!@

?          Read input.
 "         Move back and left.
  &        Copy input.
   )       Increment copy.
    }=     Move forward and right and turn around (to face the n and n+1 edges).
      *    Multiply.
       !   Print.
        @  Terminate.

5

V , 13 byte, DJMcMayhem , A002275

v!:x]''"
@ai1

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

Đây có thể là giải pháp đầu tiên trong ngôn ngữ mà tác giả dự định.


Giải trình

v!:x]''"   Does nothing
@ai1       inserts 1 a times

Có lẽ bạn nên cho DJMcMayhem biết bạn đã bẻ khóa nó? ;)
Sản phẩm điện tử

@ETHproductions Tôi đã nói với anh ấy trong trò chuyện, tôi có thể sẽ nói lại với anh ấy trong các bình luận.
Thuật sĩ lúa mì

1
This might be the first solution in the language the author intended.Tại chỗ trên. :)
DJMcMayhem

5

2sable, Conor O'Brien , A000290

~*

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

Tôi không biết nó hoạt động như thế nào, thực sự chỉ có một chương trình đáp ứng các yêu cầu và tôi chỉ buộc phải tìm ngôn ngữ mà nó hoạt động.

Sau khi xem qua các tài liệu, tôi có thể đưa ra một lời giải thích:

~         Push Input OR Input (always pushes the input)
 *        Multiply that by Input 

5

Pyth , 26 byte, Steven H. , A023443

Mã số:

tQ.qly 7:esau0euii s uxC !

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

Khá đơn giản:

 Q                            Reads input
t                             Substracts 1 from it
  .q                          Quits program (implicit print)
    ly 7:esau0euii s uxC !    None of this ever plays a part...
                                I just thought it'd be fun to scramble it.

2
Dự định giải pháp! (trừ sự tranh giành, tất nhiên.)
Steven H.

1
Thật tuyệt vời! Ý kiến ​​hay. Xin lỗi về việc không cho bạn biết trực tiếp ... Quá ít đại diện.
alleks

Không vấn đề gì! Chúc mừng.
Steven H.

5

Python 3, 118 byte, ETHproductions, A042545

s,a=801**.5-28,[0,0==0]
for i in range(int(input())):a+=[a[i]+a[-1]*int(1/s)];s=1/s-1//s
(print(a[-2]),) #.0fhlmop|

Kiểm tra nó trên Ideone .

Gửi bản sao

i=input();s=1/(801**.5-28);a=[0,1]
for p in range(i):a+=[a[-2]+a[-1]*int(s)];s=1/(s-int(s))
print a[i]#,,,.//000fhlmo|

Khác biệt là gì

Trình cảnh sát không hoạt động trong Python 3 vì hai lý do.

  • Hàm đầu vào của Python 2 tự động tránh một dòng đầu vào, trong khi đối tác của Python 3 chỉ trả về dòng dưới dạng chuỗi. Chúng ta chỉ cần gọi int để sửa lỗi này.

  • print là một câu lệnh trong Python 2, nhưng nó là một hàm trong Python 3. Đặc biệt, điều đó có nghĩa là chúng ta phải bao quanh đối số của nó bằng dấu ngoặc đơn.

Điều đó có nghĩa là chúng ta cần int()(), nhưng những nhân vật đó không phải là một phần của bình luận. Điều đó có nghĩa là chúng ta phải thực hiện một số thay đổi.

Thay vì phân số s , chúng tôi theo dõi 1 / s .

Việc khởi tạo s - s=1/(801**.5-28)- trở thành s=801**.5-28, lưu các ký tự 1/().

Yếu tố của [-1] trong bản cập nhật của một - int(s)- trở thành int(1/s)chi phí cho các ký tự 1/.

Bản cập nhật của s - s=1/(s-int(s))- trở thành s=1/s-1//s, tiêu tốn các ký tự 1//, nhưng lưu các ký tự (int()).

Các ký tự đã lưu ()(int())bao gồm những ký tự chúng ta cần để chuyển mã sang Python 3, nhưng việc lấy chúng làm chúng ta phải trả giá 1//. Chúng tôi có thể lấy //từ nhận xét, nhưng chúng tôi sẽ phải lưu 1ở nơi khác.

Một cách (cách duy nhất?) Để tiết kiệm cần thiết 1là thay thế 1việc khởi tạo a bằng 0==0. Điều này có giá bốn nhân vật, nhưng chúng ta có thể lấy 00từ nhận xét.

Cho đến nay, chúng tôi có mã sau đây.

i=int(input());s=801**.5-28;a=[0,0==0]
for p in range(i):a+=[a[-2]+a[-1]*int(1/s)];s=1/s-1//s
print(a[i]) #,,,.()0fhlmo|

Để khôi phục một trong những ="hiện tại" của chúng tôi, chúng tôi có thể viết lại việc khởi tạo smột với một nhiệm vụ duy nhất: s,a=801**.5-28,[0,0==0]Ngoài ra, điều này tiết kiệm ;và chi phí a ,, có thể được thêm vào và xóa khỏi nhận xét.

Thứ hai =có thể được lưu bằng cách không lưu trữ đầu vào trong một biến, tức là range(int(input()))thay vào đó, viết các ký tự i=. Chúng tôi cũng sử dụng i sau vòng lặp, nhưng phần tử thứ i của a chỉ là phần tử thứ hai từ bên phải, vì vậy chúng tôi có thể thay thế bằng . Vì lý do tương tự, trong thân vòng lặp có thể được thay thế bằng .i-2a[-2]i

Bây giờ chúng ta có một hoán vị để làm việc mã Python 3:

s,a=801**.5-28,[0,0==0]
for i in range(int(input())):a+=[a[i]+a[-1]*int(1/s)];s=1/s-1//s
print(a[-2]) #,.()0fhlmop|

Tuy nhiên, mã này cũng hoạt động trong Python 2! Một cách để khắc phục điều này là thay thế print(a[-2])bằng (print(a[-2]),); chúng tôi có các nhân vật chúng tôi cần trong bình luận. Như đã đề cập trước đây, print là một hàm trong Python 3, do đó, điều này xây dựng bộ tuple ( Không có ) . Tuy nhiên, câu lệnh in của Python 2 là một SyntaxError bên trong một tuple nghĩa đen.


Dang, thật tuyệt ... có lẽ tôi nên dành thêm một chút thời gian để viết một phiên bản không có bình luận. Tôi sẽ đăng giải pháp dự định của tôi.
Sản xuất ETH

Tôi đã tạo một phiên bản sửa đổi của chương trình hoạt động trong cả Python 2 và 3, không sử dụng nhận xét và có giải pháp (dự định) rất khác nhau. Có đáng để đăng như một câu trả lời riêng biệt?
Sản phẩm ETH

Nếu nó hoạt động trong cả Python 2 và 3, thì đó không phải là một giải pháp hợp lệ. Các vết nứt không thể làm việc trong ngôn ngữ gốc.
Dennis

Tôi không hiểu Các vết nứt dự định không có trong Python.
Sản phẩm ETH

Oh, bạn có nghĩa là một đệ trình cảnh sát mới . Tôi nghĩ rằng chúng ta đã nói về một vết nứt khác với cái này ... Chắc chắn, hãy tiếp tục và đăng nó.
Dennis



3

05AB1E , 12 byte, tuskiomi , A000012

1,(FI1=1=1,)

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

Giải trình

1,            # print 1
  (           # negate input
   F          # that many times do (i.e. no times)
    I1=1=1,)  # the rest of the code

Buồn cười. Tôi đã không có chương trình thứ 2 cho việc này, vì tôi không hiểu cảnh sát và tên cướp là gì (hoa hồng). làm tốt công việc sáng tạo!
tuskiomi




2

Lồi, 75 byte, boboquack , A004526

2/Q2 2/2/2/2/2/2/2/2/2/2/2/2/2/2/2/2/2/2*2*2*; 2*;                 2; 2; 2;

Dùng thử trực tuyến

Làm thế nào nó hoạt động:

2  e# push 2
 / e# pop first 2, divide, push result
   e# push a bunch of garbage but discard it all with semi-colons (;)
  Q2 2/2/2/2/2/2/2/2/2/2/2/2/2/2/2/2/2/2*2*2*; 2*;                 2; 2; 2;

2

Dip , 9 byte, Kritixi Lithos

Chắc chắn không phải là câu trả lời dự định.

1^,-$)×1*

Giải trình:

1$^,-)×   # Basically does nothing
       1* # Repeat "1" n times

Bây giờ tất cả những gì còn lại cho tôi là để phá vỡ câu trả lời A000042 của bạn!
Kritixi Lithos


1

05AB1E , 25 byte, Mego , A000583

Mã số:

nnYi=put("");prit`Y**4`,X

Giải trình:

n       # Square the input
 n      # Square the squared input
  Y     # Constant that pushes 2
   i    # If equal to 1, do the following:
    =put...

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


Ôi thôi nào, bạn đã đánh bại tôi sau 12 giây :)
Emigna

@Emigna Thời gian giữa các câu trả lời là kỳ lạ: p.
Ad Nam

1
Nó cũng không đăng ký lần đầu tiên tôi nhấn bài, vì vậy chúng sẽ gần như ngay lập tức :)
Emigna

1

Nhúng , 8 byte, Oliver , A000042

(1J&F},1

Giải trình

              #Implicit Input
(             #Start range loop
 1            #Push 1 to the stack
  J           #Join all the elements in the stack
   &          #End program
    F},1      #These are ignored

Điều buồn cười là đây là ngôn ngữ dự định! Dip là một esolang được tạo ra bởi Oliver.

Các trường hợp thử nghiệm và Chạy Dip từ Command-Line

$python3 dip.py
Dip v1.0.0 by Oliver Ni.
>>> (1J&F},1
> 4
1111
>>> (1J&F},1
> 7
1111111

1

2sable, 14 byte, Dopapp , A121377

Q@5 2*%6 8*+.&

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

Cách thức hoạt động (nhiều hay ít):

Q@
  5              # Push 5
    2            # Push 2
     *           # Pop (2), pop (5), push 5*2=10
      %          # Pop (10), pop (input), push input%10
       6         # Push 6
         8       # Push 8
          *      # Pop (8), pop (6), push 8*6=48
           +     # Pop (48), pop (input), push input+48
            .&


1

Nhúng , 5 byte, Oliver , A000012

`¸WW/

Trình tự chỉ in một 1bất kể đầu vào là gì. Câu trả lời của Oliver in một1.0 . Chương trình này cũng in a 1.0. Đây rõ ràng là giải pháp dự định.

Giải trình

`¸                  # push character `¸`
  W                 # pushes 1000000
   W                # pushes 1000000 also
    /               # divides the last two items in stack resulting in 1.0
                    # implicit output (1.0)

Giải pháp thay thế (lịch sự của @milk)

Lồi , 5 byte

WW¸`/

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

Giải trình

                  // implicit input
W                 // pushes -1
 W                // pushes -1 also
  ¸               // calculates the LCM of the two numbers (which evaluates to 1)
   `              // finds its string representation
    /             // slices the string (so that it would evaluate to "1")
                  // implicit output

1
Vết nứt thay thế ở Convex: WW¸` /
sữa

@milk Cảm ơn! Tôi đã thêm nó trong bản chỉnh sửa mới nhất của mình
Kritixi Lithos

Chương trình Convex của bạn không hoạt động như bạn nghĩ. Ngay bây giờ, nó đẩy -1 hai lần, LCM chúng (sẽ là 1), tìm đại diện chuỗi và cuối cùng cắt chuỗi (sẽ là "1") bởi mọi [input]ký tự (vì đầu vào là một số.
GamrCorps

@GamrCorps Bây giờ thế nào?
Kritixi Lithos
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.