> 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
Cobalah online!
Mengembalikan set semua solusi yang mungkin, dan set kosong (mis ∅) ketika tidak ada solusi.
Bagaimana itu bekerja
Tidak mengherankan, ia bekerja hampir identik dengan sebagian besar jawaban lain: ia menghasilkan daftar angka dan memeriksa masing-masing untuk modulus terbalik dengan argumen.
Jika Anda terbiasa dengan bagaimana struktur program Whispers bekerja, jangan ragu untuk beralih ke garis horizontal. Jika tidak: pada dasarnya, Whispers bekerja pada sistem referensi baris demi baris, mulai dari baris terakhir. Setiap baris digolongkan sebagai salah satu dari dua opsi. Entah itu adalah garis nilad , atau itu adalah garis operator .
Garis Nilad dimulai dengan >, seperti > Inputatau > {0}dan mengembalikan nilai tepat yang diwakili pada garis itu yaitu > {0}mengembalikan set{ 0 }. > Inputmengembalikan baris STDIN berikutnya, dievaluasi jika mungkin.
Jalur operator dimulai dengan >>, seperti >> 1²atau >> (3]dan menunjukkan menjalankan operator pada satu atau beberapa nilai. Di sini, angka-angka yang digunakan tidak mereferensikan angka-angka eksplisit itu, melainkan mereka merujuk nilai pada baris itu. Sebagai contoh, ²adalah perintah kuadrat (n → n2), jadi >> 1²tidak mengembalikan nilai12, alih-alih mengembalikan kuadrat dari baris 1 , yang, dalam hal ini, adalah input pertama.
Biasanya, garis operator hanya berfungsi menggunakan angka sebagai referensi, namun Anda mungkin telah memperhatikan garis >> L=2dan >> L⋅R. Kedua nilai ini, Ldan R, digunakan bersama dengan Eachpernyataan. Eachpernyataan bekerja dengan mengambil dua atau tiga argumen, lagi sebagai referensi numerik. Argumen pertama (misalnya 5) adalah referensi ke garis operator yang digunakan fungsi, dan sisanya dari argumen adalah array. Kami kemudian mengulangi fungsi di atas array, di mana Ldan Rdi fungsi mewakili elemen saat ini (s) dalam array yang diulangi. Sebagai contoh:
Membiarkan A = [ 1 , 2 , 3 , 4 ], B = [ 4 , 3 , 2 , 1 ] dan f( x , y) = x + y. Dengan asumsi kita menjalankan kode berikut:
> [1, 2, 3, 4]
> [4, 3, 2, 1]
>> L+R
>> Each 3 1 2
Kami kemudian mendapatkan demonstrasi tentang bagaimana Eachpernyataan bekerja. Pertama, ketika bekerja dengan dua array, kita ritsleting mereka untuk membentukC= [ ( 1 , 4 ) , ( 2 , 3 ) , ( 3 , 2 ) , ( 4 , 1 ) ] lalu petakan f( x , y) atas setiap pasangan, membentuk susunan terakhir kami D = [ f( 1 , 4 ) , f( 2 , 3 ) , f( 3 , 2 ) , f( 4 , 1 ) ] = [ 5 , 5 , 5 , 5 ]
Cobalah online!
Cara kerja kode ini
Bekerja berlawanan secara intuitif dengan cara Whispers bekerja, kita mulai dari dua baris pertama:
> Input
> Input
Ini mengumpulkan dua input kami, katakanlah x dan y, dan menyimpannya masing-masing di jalur 1 dan 2 . Kami kemudian menyimpanx2pada baris 3 dan buat rentangA : = [ 1 . . . x2]pada saluran 4 . Selanjutnya, kita lompat ke bagian
>> 1%L
>> L=2
>> Each 5 4
>> Each 6 7
Hal pertama dilaksanakan di sini adalah garis 7 , >> Each 5 4yang iterates baris 5 melewati garis 4 . Ini menghasilkan arrayB : = [ i%x|i ∈ A ]dimana Sebuah%bdidefinisikan sebagai modulus dariSebuah dan b.
Kami kemudian mengeksekusi baris 8 , >> Each 6 7yang iterates baris 6 lebihB, menghasilkan sebuah array C: = [ ( i%x ) = y|i ∈ A ].
Untuk input x = 5 , y= 2, kita punya A = [ 1 , 2 , 3 , . . . , 23 , 24 , 25 ], B = [ 0 , 1 , 2 , 1 , 0 , 5 , 5 , . . . , 5 , 5 ] dan C= [ 0 , 0 , 1 , 0 , 0 , . . . , 0 , 0 ]
Kami kemudian melompat ke bawah
>> L⋅R
>> Each 9 4 8
yang merupakan contoh kita dari Eachpernyataan diad . Di sini, fungsi kami adalah garis 9 yaitu >> L⋅Rdan dua array kami adalahSEBUAH dan C. Kami mengalikan setiap elemen dalamSEBUAH dengan elemen yang sesuai di C, yang menghasilkan array, E, di mana setiap elemen bekerja dari hubungan berikut:
Esaya= { 0SEBUAHsayaCsaya= 0Csaya= 1
Kami kemudian berakhir dengan array yang terdiri dari 0dan moduli kebalikan dari x dan y. Untuk menghapus0s, kami mengonversi array ini ke set ( >> {10}), lalu mengambil perbedaan set antara set ini dan{ 0 }, menghasilkan, lalu mengeluarkan, hasil akhir kami.