> 1
> Input
>> 1…2
>> L!
>> L+1
>> L∣2
>> L⋅R
>> 2%L
>> Each 4 3
>> Each 5 9
>> Each 6 10
>> Each 7 11 3
> {0}
>> 12∖13
>> Each 8 14
>> L≠1
>> Each 16 15
>> Each 7 17 15
>> 18∖13
>> [19]
>> 2’
>> 21⋅20
>> Output 22
Cobalah online!
Ini mengembalikan daftar kosong untuk bilangan prima non-Pillai, dan daftar non-kosong sebaliknya.
Bagaimana itu bekerja
Whispers dirancang untuk manipulasi pada bilangan real / kompleks, dengan sedikit perintah array ditambahkan untuk ukuran yang baik, karenanya penggunaan berulang Each
untuk beralih pada daftar yang dihasilkan.
Sedikit latar belakang tentang Whispers:
Bisikan sedikit berbeda di jalur eksekusi untuk sebagian besar bahasa lain. Daripada mengerjakan setiap baris secara linier, hanya bercabang di conditional, Whispers mulai pada baris terakhir dalam file yang dimulai dengan >
(aturan sedikit lebih rumit dari itu, tapi hanya itu yang perlu kita ketahui untuk saat ini), dan arti angka berbeda, tergantung pada apakah baris dimulai dengan >
atau >>
.
Jika garis dimulai dengan >
, seperti > 1
atau > Input
, ini adalah garis konstan - ia mengembalikan nilai yang sama setiap kali. Di sini, angka mewakili bentuk numeriknya, sehingga baris pertama akan selalu mengembalikan 1 ketika dipanggil.
>>
Namun, jika saluran dimulai dengan , nomor diperlakukan sebagai referensi ke saluran lain, semacam panggilan fungsi yang serupa, jika Anda mau. Misalnya, dalam baris >> 1…2
, ini tidak melakukan …
perintah pada bilangan bulat 1 dan 2 , tetapi pada nilai yang dikembalikan dari baris 1 dan 2 . Dalam hal ini, nilai-nilai tersebut adalah bilangan bulat 1 dan bilangan bulat apa pun yang kami berikan sebagai input.
Untuk contoh ini, mari kita pertimbangkan input 23 . Perlu diingat bahwa, karena preprocess Whispers ', baris kedua ( > Input
) dikonversi ke> 23
.
Perintah pertama kami adalah pada baris 3: >> 1…2
. …
adalah rentang diad, dalam hal ini dari 1 hingga 23 , menghasilkan {1, 2, ... 22, 23} . Selanjutnya, kita lewati ke baris 9 hingga 12 :
>> Each 4 3
>> Each 5 9
>> Each 6 10
>> Each 7 11 3
Di sini kita memiliki 4 Each
pernyataan konsektif , yang masing-masing diulang dari hasil sebelumnya, pada dasarnya memetakan 4 perintah di atas array pada baris 3 : kisaran. Tiga pernyataan pertama adalah peta sederhana, dengan baris 4 , 5 dan 6 :
>> L!
>> L+1
>> L∣2
Tiga perintah ini, di atas bilangan bulat n , menghasilkan (n! +1) ∣x , di mana ! menunjukkan faktorial , ∣ menunjukkan kelaikan dan x adalah input. Akhirnya, baris 12 memiliki struktur peta diad .
Sebuah peta diad struktur mengambil tiga bilangan bulat: target, kiri dan kanan, masing-masing indeks untuk jalur lainnya. Di sini, kita ritsleting kiri dan kanan untuk menghasilkan daftar pasangan, lalu kurangi setiap pasangan dengan perintah diad (target). Di sini, jika inputnya adalah 23 , daftarnya adalah {1, 2, ... 22, 23} dan {0, 0, ... 1, 0} dan perintahnya adalah
>> L⋅R
yang mengalikan argumen kiri dengan kanan. Ini menghasilkan array bilangan bulat, dengan 0 pada indeks bilangan bulat yang faktorialnya bertambah tidak dapat dibagi oleh input, dan indeks asli di mana mereka berada. Kami akan memanggil array ini A . Selanjutnya, kami menghapus 0 s dari A dengan mengambil perbedaan set antara {0} dan A :
> {0}
>> 12∖13
Dengan input contoh kami, ini menghasilkan set {14, 18, 22} . Selanjutnya kita mengambil sisa input yang dibagi dengan masing-masing nilai dalam set, dan memeriksa apakah sisanya tidak sama dengan 1 :
>> 2%L
>> Each 8 14
>> L≠1
>> Each 16 15
Sekali lagi, kami memiliki daftar 0 atau 1 dan perlu menghapus 0 dan mengganti 1 dengan nilai asli. Di sini kita ulangi kode yang kita lihat di atas, tetapi dengan >> 18∖13
alih - alih 12
. Akhirnya, kami melemparkan set hasil ini ke daftar untuk pemeriksaan akhir. Sayangnya, kode kami juga harus menolak angka gabungan yang mencapai semua kriteria ini, seperti 437 . Jadi kami menambahkan pemeriksaan terakhir kami, mengalikan daftar akhir kami dengan keutamaan input. Karena cara kerja penggandaan Python pada daftar, 0 menggantikannya dengan daftar kosong, dan 1 tidak berpengaruh. Jadi kita menghitung keutamaan input, kalikan dengan daftar muntuk input dan ouput hasil akhir:
>> 2’
>> 21⋅20
>> Output 22