>>>>>+>,[>++++++[-<-------->]<+>,]<[-[█<█<]++++++++++<]>[-]>>██[>█>>█>]+[<]<<[<]>█<<+>>[>]█>[>]█+[<]<<[<]>-█>]>>[->]<[-[[<]<]++++++++++<]>[-]>[<█]>]>[>]<[[█]<]<<<<<[<]<<██>>[>]<█[->+<]<█>>[>]<[-[[<]<]++++++++++<]>███>[<<]>[[[>]>████[<]<[-[[<]<]++++++++++<]>[-]>[█<]>]>[>]<[[-]>+[>]<-<[<]<]+<<<<<[<]>[[>]+[[>]>]>[>]>[-<+>]<[<]<[>+[<]>>-<<<<<[[<]<]>>███████>[[█]>]<]<[[<]<]<[█]>]>>>[[>]<->>]]>[[>]>]<<[[[█]<]<]<<<[█]<<█>>>[>]█[-[[<]<]++++++++++<]>>[[>]+[------->++<]>.+.+++++.[---->+<]>+++.>>]>[>]+[------->++<]>++.++.---------.++++.--------.
>>>>>+>,[>++++++[-<-------->]<+>,]<[-[[<]<]++++++++++<]>[-]>>[[[>]>>[>]+[<]<<[<]>[<<+>>[>]>>[>]<+[<]<<[<]>-]>]>>[->]<[-[[<]<]++++++++++<]>[-]>[<<]>]>[>]<[[-]<]<<<<<[<]<<[>>>[>]<[[->+<]<]>>[>]<[-[[<]<]++++++++++<]>[-]>[<<]>[[[>]>[>]+[<]<[-[[<]<]++++++++++<]>[-]>[<<]>]>[>]<[[-]>+[>]<-<[<]<]+<<<<<[<]>[[>]+[[>]>]>[>]>[-<+>]<[<]<[>+[<]>>-<<<<<[[<]<]>>[[-]+>]>[[>]>]<]<[[<]<]<[<]>]>>>[[>]<->>]]>[[>]>]<<[[[-]<]<]<<<[<]<<]>>>[>]<[-[[<]<]++++++++++<]>>[[>]+[------->++<]>.+.+++++.[---->+<]>+++.>>]>[>]+[------->++<]>++.++.---------.++++.--------.
Cobalah online!
Ini menerapkan saringan Eratosthenes.
>>>>>+>,[>++++++[-<-------->]<+>,]
Input awal setiap digit sebagai kode karakter dan kurangi 47 untuk memasukkannya dalam rentang 1-10. Ini memungkinkan nilai sel 0 untuk menunjukkan jarak antar angka. The +>
dekat awal bagian pasukan ini jumlahnya menjadi setidaknya dua digit, yang akan segera penting.
Berikutnya, dan salah satu hal pertama yang saya ketahui, adalah bagian <[-[[<]<]++++++++++<]>[-]>
. Ini muncul beberapa kali dalam kode, masing-masing dengan pola redaksi yang berbeda, tetapi tidak sulit untuk menebak bahwa semua contoh itu mungkin kode yang sama. Kode ini membutuhkan tiga angka nol di sebelah kiri angka desimal pada kaset, dan efeknya adalah mengurangi angka tersebut. Iterasi terakhir dari loop akan menempatkan nilai 10 dua sel tersisa dari angka, tetapi [-]
membersihkannya.
Jika angka desimal adalah 0, tidak ada 10 asing yang dibuat, dan sel yang [-]
diberi nol oleh adalah angka yang paling signifikan. Kepala pita kemudian berada pada digit kedua yang paling signifikan (itulah sebabnya diperlukan setidaknya dua digit). Sebagian besar cuplikan ini segera diikuti oleh [<<]>
, yang menempatkan kepala pada sel bukan nol dalam kondisi normal dan sel nol jika angka desimal aslinya nol. Tampaknya dalam program ini, representasi desimal n-1
digunakan untuk menunjukkan n
, sehingga decrementing ke 0
ditangkap alih-alih decrementing ke -1
.
Bagian selanjutnya menempatkan angka-angka dari n-1 (n) ke bawah ke 0 (1) pada kaset:
>[ until the number reaches zero:
[ for each digit:
[>]>>[>]+[<]<<[<]> create a placeholder for the next copy
[ while the original value of the digit is nonzero:
<<+ add 1 to copy two cells left (to keep one copy)
>>[>]>>[>]<+ go to new copy and increment that cell
[<]<<[<]>- go back to original digit and decrement
] (this is effectively the same as [<+>>+<-] but with the cells at variable locations)
>] next digit
>>[->] cancel the placeholder 1s that were used for the new copy
<[-[[<]<]++++++++++<]>[-]>[<<]> decrement
]
>[>]<[[-]<] clean up the trash 10s on the tape while ending at a known location relative to the last number
Sekarang, angka-angka ini semuanya ada di pita dengan dua sel nol memisahkan mereka. <<<<<[<]<<
menempatkan kita di sel terakhir dari nomor kedua dari belakang pada pita, yang merupakan tempat kita akan berada di setiap iterasi dari loop. Loop berakhir ketika semua nomor kecuali yang asli telah ditangani.
Di awal perulangan, kami memindahkan angka saat ini (yang terakhir masih di pita) satu sel yang tepat untuk memiliki ruang untuk pengurangan, dan kemudian melanjutkan dan mengurangi:
[>>>[>]<[[->+<]<]>>[>]<[-[[<]<]++++++++++<]>[-]>[<<]>
Jika penurunan ini tidak underflow, kami melanjutkan untuk mengonversi nomor menjadi unary:
[[[>]>[>]+[<]<[-[[<]<]++++++++++<]>[-]>[<<]>]
Perhatikan bahwa potongan ini tidak tertutup [
. Akibatnya, sisa dari loop ini dilewati jika jumlahnya 0 (mewakili 1). Setelah mengonversi ke unary, kami menghapus 10-an sisa, menyeret representasi unary dengan kami ke kiri:
>[>]<[[-]>+[>]<-<[<]<]+
Saya tidak melihat sampai saat ini menulis ini, tetapi +
pada akhir cuplikan ini dipisahkan dari representasi unary oleh satu 0. Ini juga merupakan bagian dari representasi unary: urutannya 1011...11
akan mewakili 0 mod k. Berikut ini <<<<<[<]>
menempatkan kami di awal angka k+1
, memulai loop baru.
Lingkaran dalam di sini "menandai" setiap angka pada pita dengan angka 1 pada sel segera di sebelah kanan, dan menggunakan representasi unary sebagai jam untuk menentukan angka mana yang merupakan kelipatan k
.
[
[>]+ mark the current decimal number
[[>]>] move to end of decimal part of tape
>[>] move to 0 in middle of unary "clock"
>[-<+>] move the following 1 to the left if possible
<[<]< if a 1 was moved this will bring us back to a zero before the start of this "clock";
otherwise the looped move command doesn't move us at all and we are at the final 1
[ if there was no gap (happens every kth iteration):
>+[<]>>- reset to original position
<<<<<[[<]<]>> go to number that was just marked
[[-]+>] replace digits with 0s (cell value 1)
>[[>]>]< go back to where we would be without this conditional
]
<[[<]<]<[<]> return to first unmarked number
]
Di [[-]+>]
bagian itu adalah bagian terakhir yang saya temukan. Sebelumnya, saya berasumsi program itu hanya melakukan pembagian percobaan, tetapi saya tidak bisa melihat di mana hasilnya digunakan.
Lingkaran ini mengakhiri dua sel di kiri nomor paling kiri, dan >>>[[>]<->>]]
menghilangkan penanda yang ditempatkan pada pita dan membawa kita ke ujung pita lagi. Setelah itu >[[>]>]<<[[[-]<]<]
menghapus jam unary atau, jika seluruh segmen ini dilewati, sisa 10-an. Loop diatur ke kondisi awal dengan <<<[<]<<]
.
Setelah ini baru dibaca apakah nomor input diganti dengan 1 di titik mana pun:
>>>[>]<[-[[<]<]++++++++++<]>> do the check
[[>]+[------->++<]>.+.+++++.[---->+<]>+++.>>] conditionally print "not "
>[>]+[------->++<]>++.++.---------.++++.--------. unconditionally print "prime"
Untungnya, output yang sebenarnya tidak dihapus sama sekali.
Bahasa Wolfram (Mathematica)
Retak jawaban ini .
Cobalah online!
sumber
Boole
tidakPrimeQ
.Brain-Flak, MegaTom
Cobalah online!
Program ini melakukan pembagian percobaan dari n-2 ke 1, kemudian menghasilkan 1 jika dan hanya jika ini diakhiri dengan faktor 1.
sumber
8086 DOS COM oleh Joshua
xxd
representasi, karena penyandian dan byte nol dan hal-hal menakutkan lainnya:Pertama membongkar polisi secara manual, kemudian dirakit menggunakan yasm. Beberapa byte telah rusak oleh Joshua conerter yang digunakan, tetapi saya baru saja memperlakukan mereka seperti byte yang dihapus. Saya 99,72% yakin tentang konten mereka yang sebenarnya. Seharusnya tidak butuh waktu lama untuk memperbaikinya jika saya salah. Nikmati:
sumber
bx < 2
selesai daripada komposit. FYI korupsi itu karena awalnya menggunakan X sebagai karakter topeng dan tidak memperbaiki semuanya dengan benar ketika beralih ke █.Jeli
Retak jawaban ini .
Cobalah online!
Penjelasan:
Melihat
ị
danv
, saya berpikir untuk membangun daftar angka,ị
memasukkannya ke dalam daftar dan mengevaluasinya.Cara "sepele" untuk memeriksa keaslian di Jelly adalah
ÆP
, jadi (jika itu dapat memecahkan kiriman):Æ
danP
.256
dengan modulo[14, 81]
.Jadi ... daftar di awal program kongruen ke
[14, 81, 49]
mod 256 ( TIO ) danṖ
muncul elemen terakhir.sumber
sh + coreutils
Retak jawaban ini .
Tidak, Coba online! kali ini karena beberapa masalah . Namun Anda dapat menggunakan jdoodle .
Kembali dengan kode keluar.
0
(sukses) untuk prima,1
(kesalahan) untuk komposit.Perintah aktual yang dieksekusi adalah
Bagaimana cara memecahkannya
base64
perintah.+
adalah karakter base64 yang valid.sh -c "`echo ...|base64 -d`"
kembali ke program aslinya .sumber
tail +n
. Ketika saya mencoba celah Anda pada mesin di tempat kerja itu mengeluhkannya. Anda membuka kedok kode yang benar sehingga ... :(Oktaf , 86 byte, Stewie Griffin .
Cobalah online!
Ini menyenangkan! Saya berjuang dengan ini selama beberapa hari.
Petunjuk pertama mengakui
eval([...,'(x)'])
sebagai konstruksi menciptakan panggilan keisprime
fungsi, sebagai gabungan dariints
danchar
secara implisit akan mengkonversi array untukchar
, sehingga...
dibutuhkan untuk menjadi baikisprime
atau array yang memiliki nilai-nilai ASCII dariisprime
,[105, 115, 112, 114, 105, 109, 101]
.Sisanya hanya melalui dokumentasi untuk mencari tahu yang
reshape
dapat mengambil satu dimensi yang tidak diketahui[]
, meskipun saya kira saya bisa melakukannyareshape(...,2, 7)
pada jumlah byte yang sama.Menggunakan
+'e'
(101) alih-alih+'d'
(100) adalah sentuhan yang bagus yang melemparkan saya selama beberapa menit sampai saya melihat angka terakhir (tidak dikontrol)00
lebih daripada01
, dan dengan itu mudah.sumber
JavaScript
Cobalah online!
Entah bagaimana saya ragu ini persis apa yang ada dalam pikiran Anda, tetapi itu berhasil.
sumber
> <> , Buah esolanging
untuk
Cobalah online!
Penggunaan cerdas untuk membuat ulang baris baru sedikit membingungkan saya. Tampaknya tidak berfungsi untuk 1 atau 2.
sumber
^
,v
,/
, atau\
untuk kosong kedua bisa bekerja di sana. Saya sekarang berharap saya telah menutupi*
bukan/
.Java (OpenJDK 8) , Magic Gurita Guci
Cobalah online!
Kode diambil dari RosettaCode dan dijelaskan pada SO .
sumber
Python 3 , 44 byte, osuka_
Cobalah online!
Tidak berfungsi saat x <2. The
or 0
bisa diganti dengan>0{2 spaces}
atau bahkan 4 spasiUntuk masalah x <2, karena
i>=x
harus diletakkan di bagian depan (jika tidak akan ada loop yang tak terbatas), dani>=x
hasilnya akan langsung benar ketika x <2, jadi saya pikir itu tidak bisa diperbaiki dengan itu.sumber
M, dylnan
Ini mungkin bukan solusi yang dimaksudkan.
Cobalah online!
Bagaimana itu bekerja
ÆP
adalah tes primality bawaan.ø
menjadi rantai niladik baru. Karena nilai pengembalian sebelumnya (hasilÆP
) keluar dari ruang lingkup, ini mencetaknya secara implisit.“;;“»
mengevaluasi ke daftar string["< Aalst" ""]
, danV
mencoba untuk mengevaluasi mereka.s
mencoba untuk memecah argumennya menjadi potongan-potongan dengan panjang 0 , yang menyebabkan penerjemah M crash, menekan output lebih lanjut.sumber
Pyth, Tn. Xcoder
sumber
Python 3 , user71546
Cobalah online!
sumber