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 e
mengembalikan 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 I
mengembalikan array kosong (falsy); jika setidaknya ada dua digit, I
kembalikan 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 E
mengembalikan 1 jika semua elemen dalam argumen yang sama, dan 0 jika tidak. Argumen integer z dipromosikan ke [z] , sehingga E
akan 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 G
mencoba 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 p
mengharapkan 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 V
ternyata 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 V
mengevaluasinya, menghasilkan [11] . Sekali lagi, V
ubah 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 Q
membuang kedua 1 , dan V
sekali 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) . A
adalah atom nilai absolut , sehingga memetakan - (z + 1) = z + 1 . Dengan nilai pengembalian awal 0 , tiga belas salinan ~A
pengembalian 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 m
gabungan [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
C
adalah atom pelengkap dan memetakan argumennya z ke 1-z . N
adalah negate atom dan memetakan argumennya z ke -z . Bersama-sama, CN
petakan z ke - (1-z) = z-1 , jadi delapan belas salinan mengubah argumen implisit 0 menjadi -18 . Aplikasi C
hasil 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 J
membuang 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 J
atom 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 Øa
memegang huruf kecil. The maksimal atom M
menghasilkan 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 i
mempromosikan argumen kiri 0 untuk [0] , kemudian menemukan indeks argumen yang tepat 0 dalam array itu, menghasilkan 1 .
The berbagai atom r
membangun 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 i
menemukan 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 ). c
dalam 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 T
daftar semua indeks elemen truthy. Tidak ada array di level pertama yang kosong, jadi ini menghasilkan [1, 2, 3, 4, 5, 6] . The upend atom U
membalikkan 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 R
berubah menjadi [1, ..., 31] . Akhirnya, atom ekorṪ
mengekstraksi elemen terakhir, menghasilkan 31 .
LµdddddµFL
The panjang atom L
mempromosikan 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] . d
hanya 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 F
unnests array ini, menghasilkan array datar dari satu dan 31 angka nol. Akhirnya, L
ambil 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 v
ternyata 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 v
dan hanya menghasilkan [10] .
The copy cepat ©
atase ke v
dan salinan hasilnya ke dalam register. Kemudian kejadian dari recall atom ®
(nilad a) akan mengambil [10] dari register.
Tiga salinan żv
pekerjaan 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żv
menambahkan 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 111111
menetapkan argumen dan nilai pengembalian awal ke 111111 . Aliran lain 1
juga literal.
l
adalah 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 K
bergabung 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 1111111
ini adalah nilad yang tidak dapat diparseabel, sehingga nilai pengembalian sebelumnya ( [4] ) dicetak ke STDOUT, kemudian diganti dengan nilai nilad ( 1111111 ). K
kemudian 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, l11
menghitung 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 ,SS
disebut 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 Æn
menghitung bilangan prima kelima belas, yaitu 47 .