> Input
> Input
>> 1²
>> (3]
>> 1%L
>> L=2
>> Each 5 4
>> Each 6 7
>> L⋅R
>> Each 9 4 8
> {0}
>> {10}
>> 12∖11
>> Output 13
Hãy thử trực tuyến!
Trả về một tập hợp tất cả các giải pháp có thể và tập hợp trống (nghĩa là ∅) khi không có giải pháp tồn tại.
Làm thế nào nó hoạt động
Không có gì đáng ngạc nhiên, nó hoạt động gần như giống hệt với hầu hết các câu trả lời khác: nó tạo ra một danh sách các số và kiểm tra từng số cho mô đun nghịch đảo với đối số.
Nếu bạn quen thuộc với cách cấu trúc chương trình của Whispers hoạt động, vui lòng bỏ qua phía trước đến đường ngang. Nếu không: về cơ bản, Whispers hoạt động trên hệ thống tham chiếu từng dòng, bắt đầu từ dòng cuối cùng. Mỗi dòng được phân loại là một trong hai tùy chọn. Đó là một dòng nilad , hoặc nó là một dòng toán tử .
Các dòng Nilad bắt đầu bằng >
, chẳng hạn như > Input
hoặc > {0}
trả về giá trị chính xác được biểu thị trên dòng đó, tức là > {0}
trả về tập hợp{ 0 }. > Input
trả về dòng STDIN tiếp theo, được đánh giá nếu có thể.
Các dòng toán tử bắt đầu bằng >>
, chẳng hạn như >> 1²
hoặc >> (3]
biểu thị việc chạy toán tử trên một hoặc nhiều giá trị. Ở đây, các số được sử dụng không tham chiếu các số rõ ràng đó, thay vào đó chúng tham chiếu giá trị trên dòng đó. Ví dụ, ²
là lệnh vuông (n → n2), do >> 1²
đó không trả về giá trị12, thay vào đó, nó trả về bình phương của dòng 1 , trong trường hợp này là đầu vào đầu tiên.
Thông thường, các dòng toán tử chỉ hoạt động bằng cách sử dụng số làm tham chiếu, nhưng bạn có thể nhận thấy các dòng >> L=2
và >> L⋅R
. Hai giá trị này L
và R
được sử dụng cùng với các Each
câu lệnh. Each
câu lệnh hoạt động bằng cách lấy hai hoặc ba đối số, một lần nữa làm tham chiếu số. Đối số đầu tiên (ví dụ 5
) là một tham chiếu đến một dòng toán tử được sử dụng một hàm và phần còn lại của các đối số là các mảng. Sau đó, chúng tôi lặp lại hàm trên mảng, trong đó L
và R
trong hàm đại diện cho (các) phần tử hiện tại trong các mảng được lặp lại. Ví dụ:
Để cho A = [ 1 , 2 , 3 , 4 ], B = [ 4 , 3 , 2 , 1 ] và f( x , y) = x + y. Giả sử chúng ta đang chạy đoạn mã sau:
> [1, 2, 3, 4]
> [4, 3, 2, 1]
>> L+R
>> Each 3 1 2
Sau đó chúng tôi nhận được một minh chứng về cách các Each
báo cáo hoạt động. Đầu tiên, khi làm việc với hai mảng, chúng tôi nén chúng để tạo thànhC= [ ( 1 , 4 ) , ( 2 , 3 ) , ( 3 , 2 ) , ( 4 , 1 ) ] sau đó bản đồ f( x , y) trên mỗi cặp, tạo thành mảng cuối cùng của chúng tôi D = [ f( 1 , 4 ) , f( 2 , 3 ) , f( 3 , 2 ) , f( 4 , 1 ) ] = [ 5 , 5 , 5 , 5 ]
Hãy thử trực tuyến!
Mã này hoạt động như thế nào
Làm việc trái ngược với cách thức hoạt động của Whispers, chúng tôi bắt đầu từ hai dòng đầu tiên:
> Input
> Input
Điều này thu thập hai đầu vào của chúng tôi, giả sử x và yvà lưu trữ chúng trong dòng 1 và 2 tương ứng. Chúng tôi sau đó lưu trữx2trên dòng 3 và tạo một phạm viA : = [ 1 . . . x2]trên dòng 4 . Tiếp theo, chúng tôi nhảy đến phần
>> 1%L
>> L=2
>> Each 5 4
>> Each 6 7
Điều đầu tiên được thực hiện ở đây là dòng 7 , >> Each 5 4
lặp lại dòng 5 trên dòng 4 . Điều này mang lại mảngB : = [ tôi%x|i ∈ A ], Ở đâu một%bđược định nghĩa là mô đun củamột và b.
Sau đó chúng tôi thực hiện dòng 8 , >> Each 6 7
lặp lại dòng 6 trênB, mang lại một mảng C: = [ ( tôi%x ) = y|i ∈ A ].
Đối với đầu vào x = 5 , y= 2, chúng ta có A = [ 1 , 2 , 3 , . . . , 23 , 24 , 25 ], B = [ 0 , 1 , 2 , 1 , 0 , 5 , 5 , . . . , 5 , 5 ] và C= [ 0 , 0 , 1 , 0 , 0 , . . . , 0 , 0 ]
Chúng tôi sau đó nhảy xuống
>> L⋅R
>> Each 9 4 8
đó là ví dụ của chúng tôi về một Each
tuyên bố dyadic . Ở đây, hàm của chúng ta là dòng 9 tức là >> L⋅R
và hai mảng của chúng ta làMột và C. Chúng tôi nhân từng phần tử trongMột với yếu tố tương ứng trong C, mang lại một mảng, E, trong đó mỗi phần tử hoạt động từ mối quan hệ sau:
ETôi= { 0MộtTôiCTôi= 0CTôi= 1
Sau đó chúng tôi kết thúc với một mảng bao gồm 0s và các mô đun nghịch đảo của x và y. Để loại bỏ0s, chúng tôi chuyển đổi mảng này thành một tập hợp ( >> {10}
), sau đó lấy chênh lệch tập hợp giữa tập hợp này và{ 0 }, cho năng suất, sau đó xuất ra, kết quả cuối cùng của chúng tôi.