Jelly , 47 bilangan bulat, 519 byte
e
BI$⁼#
⁾⁾⁾Ụ^/
ı***ıḞḞ
5
6
7
.::::
9
EȮ<
⁻GṘ
=`p`VV×`DQV
~A~A~A~A~A~A~A~A~A~A~A~A~A
⁷ṾṾṾw
⁴ḟ€⁴Ṁ
mmmmċ
ṭṭṭṭṭṭṭṭḍḄḄḄḄḄḄḄḄḄ
+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ
CNCNCNCNCNCNCNCNCNCNCNCNCNCNCNCNCNCNC
ĖḌĖḌ
ṫṣȦJṫȦ⁸ȦJ
22
“@ṃ»
!ḤḤ!
³HH
ØaM
;;;;;;;;;;;;;;;;;;;;;;;;;;;¬¬ḅ¬
irið8c
⁶ḲĠṂ°İṂĊ
œṡ¹ẆẆTUṖṖṖṖP
ȷ½RṪ
LµdddddµFL
33
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWŒḊ
ẇɓæ«æ«æ«æ«æ«|æ«|
⁹ṚḢ²
‘‘‘0‘‘‘‘‘‘‘
’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’ạ
-____---__________
”(O
⁵ḶxḶ⁵ị⁵ḶxḶḣṢ
⁽{ʂ%⁽{}
ẊẠżv©żvżvżvọ®®Ạżvżvżvọ®
44
111111l11&K1111111Kl11&
,SS¶ỊỊ,ÇS¶ÇÑÇÇÇÑ
ÆnÆnÆnÆnÆnÆnÆnÆnÆnÆnÆnÆnÆnÆnÆn
Setiap baris adalah program yang terpisah dan lengkap.
Cobalah online!(termasuk test suite dan pemeriksa persimpangan)
Bagaimana itu bekerja
Setiap program lengkap tanpa argumen baris perintah mengeksekusi tautan utamanya (didefinisikan pada baris terakhir) secara niladis, yaitu tanpa input. Jika tautan pertama dalam rantai adalah nilad, ia dikonsumsi, dipanggil, dan kedua argumen tautan utama dan nilai pengembalian diatur ke hasilnya; jika tautan pertama dalam rantai adalah monad atau angka dua, itu tidak dikonsumsi dan argumen implisit dan nilai balik 0 digunakan sebagai gantinya. Dalam kedua kasus, sisa rantai dieksekusi secara monadik.
Jelly merusak outputnya dalam beberapa kasus. Khususnya, array tunggal dicetak tanpa tanda kurung di sekitarnya, sehingga 42 dan [42] dan tidak bisa dibedakan setelah dicetak. Kami akan menggunakan ini pada beberapa kesempatan.
1 - 10
e
The ada tes atom jika nilai kembali 0 milik argumen 0 . Ya, jadi emengembalikan 1 .
BI$⁼#
BI$adalah quicklink, khususnya rantai monadik yang dibentuk oleh $pengelompokan cepat atom binerB dan atom kenaikanI . Digabungkan, mereka mengonversi bilangan bulat ke dalam susunan digitnya di basis 2, kemudian menghitung perbedaan maju dari digit yang dihasilkan. Jika array hanya memiliki satu elemen, tidak ada perbedaan forward dan Imengembalikan array kosong (falsy); jika setidaknya ada dua digit, Ikembalikan array yang tidak kosong (benar).
Quick #mengkonsumsi quicklink sebelumnya dan menerapkannya pada 0 , 1, 2, ... sampai cukup banyak kecocokan yang ditemukan dan mengembalikan susunan kecocokan. Jumlah yang diperlukan dihitung oleh ⁼, yang membandingkan nilai balik / argumen 0 dengan dirinya sendiri, menghasilkan 1 . Dengan demikian, seluruh program mengembalikan [2] , bilangan bulat non-negatif pertama dengan dua digit di basis 2.
⁾⁾⁾Ụ^/
⁾⁾⁾adalah string literal, khususnya string ⁾⁾ . The up grade atom Ụmacam indeks sebesar nilai yang sesuai mereka; karena kedua karakter sama, ini menghasilkan [1, 2] . Array yang dihasilkan dikurangi dengan bitor XOR ^/, sehingga seluruh program mengembalikan 3 .
ı***ıḞḞ
ımenginisialisasi argumen dan mengembalikan nilai ke unit imajiner i . *adalah angka dua eksponensial , yang argumen kanannya default ke argumen tautan utama. Jadi, ***ımenghitung ((i i ) i ) i ≈ 4,81 + 0i , Ḟatom ( lantai untuk argumen nyata , bagian nyata untuk yang kompleks) menghitung bagian nyata ( 4,81 ), kemudian Ḟlantai, menghasilkan 4 .
5
6
7
Ketiga program ini terdiri dari satu huruf tunggal dan melakukan apa yang Anda harapkan.
.::::
Literal .adalah singkatan untuk 0,5 dan menginisialisasi argumen dan mengembalikan nilai. The pembagian integer (angka dua ini :) default argumen yang tepat untuk argumen link utama, sehingga ::::menghitung 0,5 / 0,5 / 0,5 / 0,5 / 0,5 , menghasilkan 8 .
9
Literal lain.
EȮ<
The semua sama atom Emengembalikan 1 jika semua elemen dalam argumen yang sama, dan 0 jika tidak. Argumen integer z dipromosikan ke [z] , sehingga Eakan mengembalikan 1 untuk argumen implisit 0 .
Sekarang, atom outputȮ mencetak 1 hingga STDOUT. Kami kemudian membandingkan 1 dengan argumen 0 implisit menggunakan kurang dari atom <. Hasilnya adalah (1 <0) = 0 , dan dicetak secara implisit ketika program selesai.
11 - 20
⁻GṘ
The Grid atom Gmencoba untuk membuat tabel visual menyenangkan dari argumen. Untuk argumen integer biasa (di sini: 0 ), itu hanya membungkusnya dalam sebuah array. The datar tidak-sama atom ⁻membandingkan argumen implisit 0 dengan hasil di sebelah kanan ( [0] ), menghasilkan 1 karena argumen tidak sama. The representasi atom Ṙcetak 1 untuk stdout dan mengembalikan hasilnya. Pada akhir program, nilai pengembalian akhir dicetak secara implisit, jadi kami menghasilkan output 11 .
=`p`VV×`DQV
The diri cepat `berubah menjadi angka dua menjadi monad dengan menyebutnya dengan argumen kiri dan kanan identik. Pertama, =`bandingkan argumen 0 implisit dengan dirinya sendiri, menghasilkan 1 .
The produk Cartesian atom pmengharapkan daftar sebagai argumen, sehingga mempromosikan bilangan bulat 1 ke kisaran [1, ..., 1] = [1] . p`mengambil produk Cartesian dari [1] dan itu sendiri, menghasilkan [[1, 1]] .
The eval atom Vternyata semua array datar (yang hanya berisi angka dan karakter) ke string, kemudian mengevaluasi string yang dihasilkan sebagai program Jelly niladic. [[1, 1]] pertama-tama berubah menjadi [“11”] , kemudian Vmengevaluasinya, menghasilkan [11] . Sekali lagi, Vubah array ini menjadi "11" , lalu evals untuk menghasilkan 11 .
Sekarang, ×`gandakan 11 dengan dirinya sendiri, menghasilkan 121 . The desimal atom berubah 121 menjadi [1, 2, 1] , yang unik atom Qmembuang kedua 1 , dan Vsekali lagi ternyata daftar digit ke integer yang dihasilkan dari concatenating mereka, kembali 12 .
~A~A~A~A~A~A~A~A~A~A~A~A~A
~adalah atom bitwise BUKAN . Dengan aritmatika komplemen dua, memetakan argumen z ke ~ z = - (z + 1) . Aadalah atom nilai absolut , sehingga memetakan - (z + 1) = z + 1 . Dengan nilai pengembalian awal 0 , tiga belas salinan ~Apengembalian 13 .
⁷ṾṾṾw
Konstanta ⁷memegang karakter baris baru '\ n' dan menginisialisasi argumen dan mengembalikan nilai.
The uneval atom Ṿupaya untuk menciptakan representasi string dari argumen z sehingga program Jelly terdiri dari kode ini akan kembali z .
Panggilan pertama dengan patuh mengembalikan string "" \ n " , yang merupakan karakter literal. Panggilan selanjutnya mengembalikan "" "," \ n " - sepasang literal karakter. Panggilan ketiga dan terakhir mengembalikan "" "," "," ,, "", "\ n" - rangkap lima literal karakter.
Akhirnya, atom indeks jendelaw mempromosikan argumen yang tepat '\ n' ke string "\ n" dan menemukan indeks pertama dari substring dimulai dengan "\ n" . Ini mengembalikan 14 .
⁴ḟ€⁴Ṁ
⁴adalah konstanta 16 . The Quicklink filterfalse masing-masing ( ḟ€) mempromosikan argumen kiri 16 untuk rentang [1, ..., 16] , kemudian iterates atas unsur-unsurnya.
Untuk setiap elemen z , ḟ⁴dijalankan, pertama-tama mempromosikan z ke [z] , lalu menghapus semua ( 16 ) kejadian 16 (jika ada) . Ini menghasilkan array [[1], [2],…, [14], [15], []] , di mana array terakhir kosong karena berisi 16 .
Akhirnya, atom maksimumṀ memilih [15] .
mmmmċ
The modular atom m- yang disebut dengan argumen x (array) dan y (integer) biasanya membutuhkan waktu setiap | y | th unsur x , dimulai dengan yang pertama jika y> 0 , dengan jika terakhir y <0 . Namun, ketika y = 0 , ia mengembalikan x yang disatukan dengan kebalikannya.
Argumen integer kiri 0 pertama kali dipromosikan ke [0] . Salinan pertama dari mgabungan [0] dengan dirinya sendiri, menghasilkan [0, 0] . Salinan yang tersisa mengubah hasil ini menjadi [0, 0, 0, 0] , lalu [0, 0, 0, 0, 0, 0, 0, 0] , dan akhirnya [0, 0, 0, 0, 0, 0, 0 , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] .
Akhirnya, atom hitunganċ menghitung berapa kali argumen implisit 0 muncul dalam array yang dihasilkan, menghasilkan 16 .
ṭṭṭṭṭṭṭṭḍḄḄḄḄḄḄḄḄḄ
ṭadalah atom paku dan menambahkan argumen kirinya ke yang benar. Karena ṭdan berikut ini ḍadalah angka dua , semua panggilan untuk ṭmemberikan argumen 0 implisit sebagai argumen yang tepat ṭ. Panggilan pertama mengembalikan [0, 0] , yang kedua [0, [0, 0] , dan yang kedelapan dan yang terakhir [0, [0, [0, [0, [0, [0, [0, [0, [0, 0]]]]]]]] .
ḍadalah atom yang dapat dibagi ; untuk argumen x dan y , mengembalikan 1 adalah x habis dibagi oleh y , 0 jika tidak. Ḅadalah no-op untuk bilangan bulat, jadi ḍḄmenguji 0 untuk dapat dibagi oleh masing-masing bilangan bulat dalam array yang dibuat. 0 dapat dibagi dengan sendirinya, jadi kita mendapatkan [1, [1, [1, [1, [1, [1, [1, [1, 1]]]]]]]]] .
Sekarang, unbinary atom Ḅberoperasi pada array datar. Untuk pasangan [a, b] , itu hanya mengembalikan 2a + b . Seperti yang disebutkan sebelumnya, Ḅadalah no-op untuk bilangan bulat: argumen bilangan bulat c dipromosikan ke [c] , dan [c] dalam basis apa pun hanyalah c .
Panggilan pertama untuk Ḅmengurangi [1, 1] menjadi 3 , dengan demikian menghasilkan [1, [1, [1, [1, [1, [1, 3]]]]]]]]] . Panggilan berikutnya berkurang [1, 3] menjadi 5 , yang berikutnya [1, 5] menjadi 7 , dan seterusnya hingga yang kesembilan Ḅkembali 17 .
+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ+Ṇ
Ṇadalah atom datar TIDAK logis dan memetakan argumen implisit 0 ke 1 . +adalah atom tambahan, jadi masing-masing dari delapan belas salinan +Ṇkenaikan nilai pengembalian sebelumnya (awalnya 0 ). Seluruh program dengan demikian mengembalikan 18 .
CNCNCNCNCNCNCNCNCNCNCNCNCNCNCNCNCNCNC
Cadalah atom pelengkap dan memetakan argumennya z ke 1-z . Nadalah negate atom dan memetakan argumennya z ke -z . Bersama-sama, CNpetakan z ke - (1-z) = z-1 , jadi delapan belas salinan mengubah argumen implisit 0 menjadi -18 . Aplikasi Chasil akhir 1 - (-18) = 19.
ĖḌĖḌ
The Menghitung atom Ėmenyebutkan item dalam array, menciptakan pasangan indeks-nilai. Argumen implisit 0 dipromosikan ke [0] , lalu Ėmenghasilkan [[1, 0]] . The undecimal atom mengkonversi array datar dari basis 10 ke integer, menghasilkan [10] dalam kasus ini.
Panggilan kedua untuk Ėmengubah [10] menjadi [[1, 10]] , yang Ḍakhirnya berubah menjadi [20] .
21 - 30
ṫṣȦJṫȦ⁸ȦJ
The ekor atom ṫ(angka dua) memilih postfix argumen kiri yang dimulai pada indeks (1-based dan modular) yang ditentukan dalam argumen yang tepat, mempromosikan argumen integer kiri x untuk [x] . Saat dipanggil dengan kedua argumen yang diset ke 0 , ṫmengembalikan [0] .
The setiap dan semua atom Ȧmengembalikan 1 jika argumen adalah truthy dan tidak mengandung nol pada setiap kedalaman, 0 sebaliknya. Di sini, kita cukup menggunakannya sebagai fungsi identitas untuk mengembalikan argumen 0 implisit . The perpecahan di atom ṣpartisi argumen kiri [0] pada kejadian argumen kanan 0 , sehingga mengembalikan [[], []] di sini.
The indeks atom Jmembuang unsur-unsur nilai kembali dan menggantikan mereka dengan indeks mereka, menghasilkan rentang [1, 2] dalam kasus khusus ini. Ȧdan ṫkeduanya bekerja seperti sebelumnya, sehingga mereka mengurangi [1, 2] ke postfix yang dimulai pada indeks terakhir, menghasilkan [2] .
Dalam tautan niladik, konstanta ⁸berlaku [] . Ini adalah nilad yang tidak dapat dipecahkan, yaitu, tidak cocok dengan rantai dengan cara apa pun. Hasilnya, nilai pengembalian sebelumnya ( [2] ) dicetak ke STDOUT, kemudian diganti dengan nilai nilad ( [] ).
Karena [] salah, Ȧubah menjadi 0 . The Jatom mempromosikan 0 ke [0] , kemudian mengembalikan daftar indeks nya ( [1] ), yang dicetak secara implisit ketika program selesai.
22
Literal lain. Repdig tampaknya merupakan tempat terbaik untuk menggunakannya.
“@ṃ»
Ini menggunakan kompresi string bawaan Jelly. Indeks @ dan ṃ di halaman kode Jelly adalah 64 dan 220 dan string literal dapat berisi 250 karakter yang berbeda, jadi ini pertama menghitung bilangan bulat 250 × 65 + 220 = 16470 .
16470 dapat dibagi dengan 3, sehingga hasil bagi 16470/3 = 5490 mengkodekan karakter ASCII yang dapat dicetak atau umpan baris. Ada 96 di antaranya dan 5490 = 96 × 57 + 18 , yang berarti bahwa kami telah mendekodekan karakter ASCII yang dapat dicetak pada indeks berbasis 0 18 , yaitu '2' .
Kita dibiarkan dengan 57 , yang juga dapat dibagi dengan 3 , sehingga hasil bagi 57/3 = 19 = 96 × 0 + 19 mengkodekan karakter ASCII yang dapat dicetak pada indeks berbasis-0 18 , yaitu '3' .
Ini menyisakan 0 ; proses decoding berhenti. Karakter yang dihasilkan digabungkan untuk membentuk "23"
!ḤḤ!
The faktorial atom !ternyata argumen implisit 0 ke 1 . Dua doa dari atom unhalveḤ mengubah 1 menjadi 2 , kemudian 2 menjadi 4 . Akhirnya, !hitung 4! = 24 .
³HH
Dengan tidak adanya argumen baris perintah, konstanta ³menampung 100 . Dua doa dari 100H berubah menjadi 50 , kemudian 50 menjadi 25 .
ØaM
Konstanta Øamemegang huruf kecil. The maksimal atom Mmenghasilkan semua indeks item maksimal, dan karena z adalah huruf kecil terbesar, hasilnya adalah [26] .
;;;;;;;;;;;;;;;;;;;;;;;;;;;¬¬ḅ¬
Dua puluh enam salinan dari concatenate atom ;menggabungkan awal nilai kembali 0 dan dua puluh enam contoh dari argumen default 0 , membangun sebuah array dari 27 nol.
¬adalah atom NOT logis , jadi ;¬tambahkan 1 ke array nol. Berikutnya ¬meniadakan semua elemen dalam array, meninggalkan kita dengan array 27 yang dan 1 nol.
ḅadalah unbase atom dan mengkonversi array digit dari argumen kirinya dari basis yang ditentukan dalam argumen kanan menjadi integer. ḅ¬mengkonversi dari unary ke integer, sehingga hanya melakukan penjumlahan. Untuk array 27 yang, ini mengembalikan 27 .
irið8c
The indeks atom imempromosikan argumen kiri 0 untuk [0] , kemudian menemukan indeks argumen yang tepat 0 dalam array itu, menghasilkan 1 .
The berbagai atom rmembangun sebuah menaik atau menurun berkisar dari itu meninggalkan argumen untuk satu haknya. Argumen yang benar adalah argumen 0 implisit , jadi ini menghasilkan [1, 0] . Doa kedua dari imenemukan indeks 0 di [1, 0] , menghasilkan 2 .
ðmemulai sebuah rantai diad yang baru. Karena rantai sebelumnya adalah niladik, argumen kiri dan kanan dari rantai ini akan sama dengan nilai pengembalian rantai pertama ( 2 ). cdalam atom kombinasi . Dengan argumen kiri 8 dan argumen kanan 2 , ia menghitung semua kombinasi 2 elemen unik, tidak berurutan dari satu set 8 elemen, menghasilkan 8C2 = 8! / (6! 2!) = 28 .
⁶ḲĠṂ°İṂĊ
Konstanta ⁶memegang karakter spasi dan menetapkan argumen dan mengembalikan nilai ke '' . Kata - kata atom Ḳmempromosikan karakter "" ke string tunggal "" dan membaginya menjadi spasi, menghasilkan [[], []] .
The kelompok atom Ġkelompok semua indeks dari elemen yang sama. Karena kedua elemen dari nilai pengembalian terakhir sama, ia mengembalikan [[1, 2]] di sini. The minimum atom ekstrak minimal (satu-satunya) elemen dari array ini, menghasilkan [1, 2] .
The gelar atom °mengkonversi kedua bilangan bulat dari derajat sexagesimal ke radian, menghasilkan 1 ° × 2π / 360 ° = π / 180 dan 2 ° × 2π / 360 ° = π / 90 . The terbalik atom mengambil invers perkalian, menghasilkan 180 / π ≈ 57,3 dan 90 / π ≈ 28,6 .
Kemudian, Ṃsekali lagi mengambil minimum, menghasilkan 28,6 . Akhirnya, atom langitĊ mengubah 28,6 menjadi 29 .
œṡ¹ẆẆTUṖṖṖṖP
The identitas atom ¹mengembalikan 0 untuk argumen implisit 0 . The perpecahan di sekitar atom œṡmempromosikan kedua argumen (baik 0 ) ke [0] , kemudian membagi [0] sekitar subarrays berdekatan sama dengan [0] . Ini menghasilkan [[], []] .
The jendela geser atom Ẇmembangun semua subarrays bersebelahan argumen. Instance pertama mengubah [[], []] menjadi [[[]], [[]], [[], []]] , instance kedua mengubah [[[]], [[]], [[]] , []]] ke dalam
[[[[]]], [[[]]], [[[], []]], [[[]], [[]]], [[[]], [ [], []]], [[[]], [[]], [[], []]]] .
The Kebenaran atom Tdaftar semua indeks elemen truthy. Tidak ada array di level pertama yang kosong, jadi ini menghasilkan [1, 2, 3, 4, 5, 6] . The upend atom Umembalikkan array ini, menghasilkan [6, 5, 4, 3, 2, 1] .
Empat salinan atom popṖ menghapus empat elemen terakhir, meninggalkan kita dengan [6, 5] . Akhirnya, atom produkP mengubah susunan ini menjadi 30 .
31 - 40
ȷ½RṪ
ȷadalah singkatan untuk 1 × 10 3 = 1000 . The akar kuadrat atom ½menghasilkan 31,6 , dimana kisaran atom Rberubah menjadi [1, ..., 31] . Akhirnya, atom ekorṪ mengekstraksi elemen terakhir, menghasilkan 31 .
LµdddddµFL
The panjang atom Lmempromosikan argumen implisit 0 untuk [0] , kemudian mengambil panjang untuk menghasilkan 1 . µmemulai rantai monadik yang baru, dan hasilnya 1 menjadi argumennya.
Untuk argumen x dan y , atom divmodd menghasilkan [x / y, x% y] . Setiap panggilan akan memiliki y = 1 , sehingga hasilnya akan selalu [x, 0] .
Panggilan pertama dimulai dengan x = 1 , menghasilkan [1, 0] . dhanya beroperasi pada bilangan bulat, sehingga vektor dalam panggilan berikutnya. Panggilan kedua menghasilkan [[1, 0], [0, 0]] , yang ketiga [[[1, 0], [0, 0]], [[0, 0], [0, 0]]]] , dan yang kelima dan terakhir adalah array dengan kedalaman 5 yang berisi satu dan 31 nol.
µsekali lagi memulai rantai monadik baru, dan array dari sebelumnya menjadi argumennya. The datar atom Funnests array ini, menghasilkan array datar dari satu dan 31 angka nol. Akhirnya, Lambil panjang hasilnya, kembali 32 .
33
Repdigit lain, literal lain.
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWŒḊ
Setiap instance dari bungkus atom mengubah argumen z ke [z] . Dengan nilai pengembalian awal 0 , semua 34 instance bersama-sama menghasilkan [[[[[[[[[[[[[[[0] []] []]] ]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] . Akhirnya, atom kedalamanŒḊ menghitung kedalaman maksimal array yang dihasilkan, menghasilkan 34 .
ẇɓæ«æ«æ«æ«æ«|æ«|
The window ada atom ẇmempromosikan kedua argumen (baik default 0 ) ke [0] , maka tes jika ** [0] ** terjadi sebagai subarray bersebelahan [0] . Ya, jadi ẇmengembalikan 1 .
ɓmemulai sebuah rantai diad yang baru. Karena rantai sebelumnya adalah niladik, argumen kiri dan kanan dari rantai ini akan sama dengan nilai pengembalian rantai pertama ( 1 ). Rantai menggunakan dua atom diad yang berbeda: bitshift left ( æ«) dan bitwise OR ( |).
Rantai diad yang dimulai dengan tiga atau lebih diad awalnya memanggil angka dua pertama dengan argumen rantai. Di sini, ini memberi 1 << 1 = 2 . Enam diad selanjutnya dikelompokkan menjadi berpasangan (disebut garpu ), di mana angka dua paling kanan disebut pertama dengan argumen rantai, lalu yang paling kiri disebut dengan nilai pengembalian sebelumnya ke kedua sisi.
Karena æ«æ«, kita mendapatkan 2 << (1 << 1) = 2 << 2 = 8 . Kemudian, æ«æ«hitung 8 << (1 << 1) = 8 << 2 = 32 . Sekarang, |æ«dapatkan kami 32 | (1 << 1) = 32 | 2 = 34 .
Akhirnya, trailing |bertindak seperti hook dan disebut dengan nilai return sebelumnya sebagai argumen kiri dan argumen kanan rantai sebagai yang benar. Ini mengembalikan 34 | 1 = 35 .
⁹ṚḢ²
Dengan tidak adanya argumen kedua, konstanta ⁹menampung 256 . The terbalik atom mempromosikan 256 ke array [2, 5, 6] dan membalikkan itu untuk menghasilkan [6, 5, 2] . Kemudian, atom kepalaḢ mengekstraksi elemen pertama, dan atom kuadrat² kembali ** 6² = 36 *.
‘‘‘0‘‘‘‘‘‘‘
The increment atom ‘increment argumen dengan 1 , sehingga ‘‘‘mengubah awal nilai kembali 0 ke 3 . 0 berikut ini adalah nilad yang tidak dapat diparseabel, artinya tidak cocok dengan rantai dengan cara apa pun. Akibatnya, nilai pengembalian sebelumnya ( 3 ) dicetak ke STDOUT, kemudian diganti dengan nilai nilad ( 0 ).
7 salinan berikut ‘mengubah 0 ini menjadi 7 , yang dicetak secara implisit ketika program selesai.
’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’ạ
The penurunan atom ’decrements argumen dengan 1 , sehingga tiga puluh delapan salinan mengubah nilai kembali awal 0 ke -38 . The perbedaan mutlak atom ạmenghitung perbedaan unsigned antara -38 dan argumen implisit 0 , kembali 38 .
-____---__________
-adalah singkatan untuk -1 dan menetapkan argumen tautan dan mengembalikan nilai ke -1 . Masing _- masing adalah sebuah instance dari atom pengurangan diad , yang argumen kanannya akan default ke -1 jika hilang.
Pertama, -____-menghitung (-1) - (-1) - (-1) - (-1) - (-1) = 3 . -1 berikut adalah nilad yang tidak dapat diparseable, sehingga nilai pengembalian sebelumnya ( 3 ) dicetak ke STDOUT, kemudian diganti dengan nilai nilad ( -1 ).
Selanjutnya, -_menghitung (-1) - (-1) = 0 , di mana literal -menetapkan argumen kiri_ dan menggunakan nilai kembali sebagai yang benar. Sembilan salinan berikut _kurangi argumen default -1 dari nilai kembali, menghasilkan 9 , yang dicetak secara implisit ketika program selesai.
”(O
”(adalah karakter literal dan atom ordinalO mencari titik kode Unicode-nya, menghasilkan 40 .
41 - 47
⁵ḶxḶ⁵ị⁵ḶxḶḣṢ
Dengan tidak adanya argumen baris perintah ketiga, konstanta ⁵berlaku 10 . The unlength atom Ḷmenciptakan kisaran 0-based, khususnya [0, ..., 9] untuk argumen 10 , untuk kedua sisi berulang di tempat atom x. Yang terakhir cocok dengan elemen dari argumen kirinya dengan pengulangan dari yang kanan, dan mengulangi masing-masing elemen dengan jumlah kali yang sesuai. Dengan [0,…, 9] sebagai argumen kiri dan kanan, kita mendapatkan nol nol, satu, dua, dan lain-lain.
The indeks ke atom ịmenjemput unsur argumen yang tepat pada indeks tertentu dalam satu kiri. Dengan argumen kiri 10 ( ⁵ke kiri) dan argumen kanan [1, 2, 2, 3, 3, 3, 4, 4, 4, 4,…, 9] (hasil sebelumnya), ini menghasilkan 4 .
Rantai hingga titik ini diikuti oleh nilad yang tidak dapat diurai ⁵, sehingga nilai pengembalian sebelumnya ( 4 ) dicetak ke STDOUT, nilai pengembalian diatur ke 10 , dan sisa rantai diurai seperti biasa.
Seperti sebelumnya, ⁵ḶxḶakan menghasilkan array [1, 2, 2, 3, 3, 3, 4, 4, 4, 4,…, 9] . Kali ini, kami menyebut atom yang diurutkanṢ pada argumen 10 , yang mempromosikan 10 ke [1, 0] , lalu mengurutkannya untuk menghasilkan [0, 1] . The kepala diad atom sekarang mengambil prefiks dengan panjang 0 dan 1 dari hasil ke kiri, meninggalkan kami dengan [[], [1]] . Saat dicetak, hanya 1 yang akan tetap terlihat.
⁽{ʂ%⁽{}
⁽dan dua karakter berikutnya membentuk literal numerik. Jika j dan k adalah titik kode mereka di halaman kode Jelly dan (j, k) <(124, 250) , kita mendapatkan integer 1001 + 250j + k . Poin kode '{' , '}' , dan 'ʂ' adalah 123 , 125 , dan 167 , sehingga literal kiri mengevaluasi hingga 1001 + 250 × 123 + 167 (= 31918) , sedangkan yang kanan mengevaluasi hingga 1001 + 250 × 123 + 125 (= 31876) .
Karena bilangan bulat kiri kurang dari dua kali lebih besar dari yang benar, hasilnya adalah (... + 167)% (... + 125) = (... + 167) - (... + 125) = 167- 125 = 42 .
ẊẠżv©żvżvżvọ®®Ạżvżvżvọ®
The mengocok atom Ẋrandomizes urutan elemen argumen ini; argumen numerik z dipromosikan ke kisaran [1,…, z] sebelumnya. Untuk argumen implisit 0 , rentang ini kosong dan Ẋmenghasilkan [] . The semua atom Ạmengembalikan 1 jika semua elemen argumen ini adalah truthy, 0 jika tidak. Karena array kosong tidak mengandung elemen falsy, Ạmengembalikan 1 di sini.
The zip dengan atom ż(angka dua) mengambil argumen x dan y dan transposes pasangan [x, y] . Untuk bilangan bulat x dan y , ini hanya menghasilkan [[x, y]] , jadi ini khusus ż, disebut dengan argumen 1 dan 0 (argumen implisit), mengembalikan [[1, 0]] . The eval diad atom vternyata semua array datar (yang hanya berisi angka dan karakter) i argumen kiri ke string, kemudian mengevaluasi string yang dihasilkan sebagai program Jelly monadik dengan argumen yang tepat sebagai argumen program. Sejak ["10"]hanya terdiri dari literal, ini mengabaikan argumen yang benar vdan hanya menghasilkan [10] .
The copy cepat ©atase ke vdan salinan hasilnya ke dalam register. Kemudian kejadian dari recall atom ®(nilad a) akan mengambil [10] dari register.
Tiga salinan żvpekerjaan berikutnya seperti sebelumnya, memetakan [10] ke [[10, 0] hingga [100] menjadi ... hingga [10.000] . The rangka atom ọtes berapa kali argumen kiri dibagi oleh salah satu haknya, jadi di sini, itu menghitung urutan 10 (diambil dengan ®) di 10000 = 10 4 , menghasilkan [4] .
Berikut ®ini adalah nilad yang tidak dapat diparseabel, sehingga nilai pengembalian sebelumnya ( [4] ) dicetak ke STDOUT, kemudian diganti dengan nilai nilad ( 10 ). Kami menerapkan Ạselanjutnya, menghasilkan 1 . (Ini diperlukan karena nilad diikuti oleh angka dua akan dapat diuraikan pada saat ini.)
Seperti sebelumnya, żvżvżvmenambahkan tiga nol ke nilai pengembalian saat ini, mengubah 1 menjadi [1000] . Akhirnya, ọ®hitung urutan 10 dalam 1000 = 10 3 , dan 3 dicetak ke STDOUT ketika program selesai.
44
Namun repdigit lain, lagi literal.
111111l11&K1111111Kl11&
Pertama dan terpenting, literal 111111menetapkan argumen dan nilai pengembalian awal ke 111111 . Aliran lain 1juga literal.
ladalah atom logaritma , yang menghitung logaritma argumen kirinya ke pangkalan yang ditentukan di sebelah kanan. Ketika dipanggil pada 111111 dengan argumen 11 yang tepat , kita mendapatkan log 11 111111 ≈ 4.85 .
Kata - kata atom Kbergabung dengan argumen daftar di spasi, setelah mempromosikan numerik / karakter z ke [z] . Di sini, kita cukup menggunakannya untuk mengubah argumen tautan 111111 menjadi [111111] . (Kami tidak memerlukan array di sini, tetapi kami sudah kehabisan atom identitas.) Atom bitwise AND& mengambil nilai kembali ke kedua sisi, melemparkannya ke integer jika diperlukan, dan menghitung bitwise AND. Dalam kasus khusus ini, ia mengembalikan [4,85 & 111111] = [4 & 111111] = [4] .
Berikut 1111111ini adalah nilad yang tidak dapat diparseabel, sehingga nilai pengembalian sebelumnya ( [4] ) dicetak ke STDOUT, kemudian diganti dengan nilai nilad ( 1111111 ). Kkemudian mengubah bilangan bulat ini menjadi [1111111] . (Sekali lagi ini tidak benar-benar diperlukan, tetapi nilad yang diikuti oleh angka dua akan dapat diuraikan pada saat ini.)
Seperti sebelumnya, l11menghitung log 11 1111111 ≈ 5.81 , lalu &mengembalikan [5.81 & 111111] = [5 & 111111] = [5] .
,SS
ỊỊ,ÇS
ÇÑÇÇÇÑ
Ini adalah satu-satunya program yang terdiri dari beberapa tautan yang ditentukan pengguna. Tautan terakhir adalah tautan utama dan dijalankan ketika program dimulai, yang tersisa adalah tautan pembantu. Quick Çselalu merujuk ke tautan di atas yang sekarang dan mengeksekusinya secara monadik. Demikian juga, quick Ñselalu merujuk ke tautan di bawah yang sekarang (membungkus) dan juga mengeksekusinya secara monadik.
Tautan atas terdiri dari atom pasangan, - pasangan angka yang mengubah argumen x dan y menjadi [x, y] - dan jumlah atom S- monad yang mempromosikan argumen bilangan bulat z ke [z] dan mengurangi argumen array dengan tambahan. Ketika tautan ,SSdisebut dengan argumen integer n , itu menghitung Σ [n, Σn] = Σ [n, n] = 2n .
Tautan tengah terdiri dari atom-atom di atas Ç, cepat yang disebutkan di atas , dan atom tidak pentingỊ - sebuah monad yang menghasilkan 1 untuk argumen numerik z dengan -1 ≤ z ≤ 1 , tetapi 0 untuk semua lainnya. Menerapkan Ịdua kali pada argumen integer dan pada dasarnya menggantinya dengan 1 , karena output dari yang pertama Ị( input dari yang kedua) selalu tidak signifikan. Hasil ini kemudian dipasangkan dengan nilai pengembalian Ç(disebut dengan argumen n ), dan pasangan yang dihasilkan dikurangi dengan Σ [(| n | ≤ 1) ≤ 1, 2n] = Σ [1, 2n] = 2n + 1S . Secara total, kami menghitung.
Dengan dua tautan penolong ini, tautan utama sekarang dapat membuat bilangan bulat non-negatif dengan melihat angka binernya. Dengan nilai pengembalian awal 0 , rantai ÇÑÇÇÇÑmenghitung hasil akhir ((((((0 × 2 + 1) × 2) × 2 + 1) × 2 + 1) × 2 + 1) × 2 = ((5 × 2 + 1) × 2 + 1) × 2 = 46 .
ÆnÆnÆnÆnÆnÆnÆnÆnÆnÆnÆnÆnÆnÆnÆn
The prime berikutnya atom menemukan terkecil bilangan prima positif yang ketat lebih besar dari argumen. Dengan nilai pengembalian awal 0 , lima belas doa Ænmenghitung bilangan prima kelima belas, yaitu 47 .