Terinspirasi oleh kegemaran baru-baru ini atas dua bahasa karakter lain, ;#
Intro
Menurut konsensus komunitas , jawaban yang dapat diterima di situs ini harus menggunakan bahasa pemrograman yang, minimal:
- Dapat menentukan apakah bilangan asli prima
- Dapat menambahkan dua bilangan alami bersama
- Dapat mewakili daftar / tuple angka, serta satu nomor
Untuk tujuan tantangan ini, kami akan mengabaikan # 3. Oleh karena itu, bahasa paling sederhana yang dapat digunakan di situs ini (mengabaikan # 3) akan memiliki dua perintah, isPrime
dan add
. Untuk memudahkan interpretasi dan jumlah byte, mari tetapkan isPrime
ke p
dan add
untuk +
. Jadi, kami memiliki bahasa kami +p
,. Tantangan Anda adalah menafsirkan beberapa +p
kode.
Tingkah laku
+
yangadd
instruksi mengambil dua angka, menambahkan mereka, dan output hasilnyap
yangisPrime
instruksi mengambil satu nomor, dan output1
jika prima, dan0
jika tidak
Aturan
- Anda harus menulis sebuah program / fungsi yang, diberikan string karakter, menafsirkan string itu sebagai
+p
kode. Anda dapat mengasumsikan input yang terbentuk dengan baik (hanya+
danp
karakter). - Input fleksibel. Anda dapat menggunakan program sebagai string, array karakter, integer array codepoints, dll. Input untuk program yang ditafsirkan juga fleksibel. Anda dapat mengambil dalam array integer, dan menggunakan entri saat program dijalankan, atau setiap instruksi (
+
danp
) dapat meminta input secara individual. Anda mungkin menganggap akan ada input yang cukup untuk setiap instruksi. Input dijamin terdiri dari angka antara 0 dan 200 (tetapi algoritme Anda harus bekerja secara teoritis untuk input integer positif). - Keluaran juga fleksibel. Anda dapat mencetak hasilnya, mengembalikannya sebagai daftar, mengembalikan string yang berisi semua hasil, dll. Jika dicetak atau dikembalikan sebagai string, output harus dipisahkan oleh beberapa, pemisah konsisten non-digit, seperti baris baru, tab, spasi, atau
,
karakter. Anda mungkin memiliki pemisah trailing atau spasi spasi tambahan. Juga,p
output mungkin berupa nilai kebenaran atau nilai falsey, seperti yang didefinisikan oleh bahasa tempat Anda bekerja, daripada1
atau0
. - Penerjemah mungkin atau mungkin tidak berakhir (jika ini adalah program penuh), tetapi harus berhenti mencetak setelah semua instruksi ditafsirkan. (Ini tidak dapat terus mencetak pemisah selamanya, atau karakter nol, dll.).
- Celah standar ini dilarang secara default
- Ini adalah kode-golf , jawabannya dengan byte paling sedikit menang
Uji Kasus
Program: +
Input: [56, 50]
Output: 106
----------------------------------
Program: p
Input: [12]
Output: 0
----------------------------------
Program: p
Input: [13]
Output: 1
----------------------------------
Program: ++
Input: [172, 120, 33, 58]
Output: 292 91
----------------------------------
Program: p
Input: [29]
Output: 1
----------------------------------
Program: pp
Input: [176, 12]
Output: 0 0
----------------------------------
Program: ++++p
Input: [32, 16, 69, 197, 73, 171, 21, 178, 72]
Output: 48 266 244 199 0
----------------------------------
Program: pp+++p+pp+
Input: [151, 27, 119, 189, 198, 107, 174, 15, 166, 106, 134, 108, 169, 55, 42]
Output: 1 0 308 305 189 0 240 0 0 97
----------------------------------
Program: p+p+++++++pp+p
Input: [143, 67, 30, 149, 178, 52, 112, 122, 55, 122, 142, 199, 20, 175, 138, 80, 116, 180, 50, 116, 15, 92, 74]
Output: 0 97 1 230 234 177 341 195 218 296 0 0 107 0
----------------------------------
Program: ++p++p+pp+++++p+p+pp++
Input: [120, 177, 23, 116, 163, 52, 65, 98, 177, 16, 96, 131, 160, 48, 153, 0, 139, 33, 62, 49, 129, 86, 99, 135, 187, 80, 137, 130, 113, 136, 0, 1, 186, 100, 38, 153]
Output: 297 139 1 117 275 0 227 0 0 153 172 111 215 234 0 217 0 249 0 0 286 191
----------------------------------
Program: ++p+++++p+p+++++++
Input: [181, 169, 6, 84, 68, 171, 129, 107, 106, 114, 197, 58, 11, 88, 156, 169, 43, 77, 49, 43, 102, 78, 93, 51, 91, 37, 64, 93, 82, 126, 181, 81, 44]
Output: 350 90 0 300 213 311 69 244 0 120 0 145 171 142 101 175 307 125
----------------------------------
Program: ++p+
Input: [131, 127, 115, 40, 113, 196, 83]
Output: 258 155 1 279
----------------------------------
Program: +ppp++p+ppp+p++++++++p+p+++pp+ppp++
Input: [6, 9, 187, 168, 96, 167, 178, 139, 86, 148, 99, 103, 166, 18, 119, 15, 132, 77, 16, 88, 139, 34, 58, 90, 43, 69, 68, 152, 59, 106, 134, 49, 155, 100, 52, 55, 27, 188, 41, 77, 23, 49, 171, 23, 193, 84, 111, 165, 80, 18, 63, 23, 116, 112, 119]
Output: 15 0 0 0 345 225 0 202 0 0 0 147 0 104 173 148 112 220 165 183 255 0 82 0 118 72 194 1 0 276 0 0 0 139 231
----------------------------------
Program: ++++++++p++++++++++++
Input: [156, 5, 34, 25, 117, 98, 139, 131, 88, 82, 191, 13, 1, 170, 51, 116, 144, 85, 92, 170, 25, 94, 149, 131, 19, 161, 115, 160, 8, 6, 195, 101, 11, 185, 87, 50, 33, 140, 188, 135, 164]
Output: 161 59 215 270 170 204 171 167 0 177 195 243 150 276 168 201 112 272 83 328 299
----------------------------------
Banyak, banyak, kasus uji yang sangat panjang
Kode java digunakan untuk menghasilkan kasus uji
Contoh
Di bawah ini adalah fungsi java ungolfed yang akan menafsirkan +p
:
public static void interpret(String program, int[] input) {
int index = 0;
for (char inst : program.toCharArray()) {
switch (inst) {
case '+':
System.out.print((input[index++] + input[index++]) + " ");
break;
case 'p':
int n = input[index++];
System.out.print((isPrime(n) ? 1 : 0) + " ");
break;
}
}
}
public static boolean isPrime(long n) { //Taken from /programming//a/2385999/4484294
if (n < 2) return false;
if (n == 2 || n == 3) return true;
if (n % 2 == 0 || n % 3 == 0) return false;
long sqrtN = (long) Math.sqrt(n) + 1;
for (long i = 6L; i <= sqrtN; i += 6) {
if (n % (i - 1) == 0 || n % (i + 1) == 0) return false;
}
return true;
}
Catatan: Menggunakan kueri pencarian prime AND add AND interpret is:question
, tampaknya tidak ada duplikat untuk pertanyaan ini. Jika ada, maaf.
sumber
p
's digabungkan tanpa pemisah, apakah ini dimaksudkan?isprime
di julia.Jawaban:
05AB1E , 5 byte
Cobalah online!
Penjelasan
Tantangan ini cocok dengan 05AB1E seperti sarung tangan :)
sumber
+
danp
berarti menambah dan isPrime di 05AB1E :)Python 2,
135133 byte-2 byte berkat kundor
sumber
i,j=0,0
berlebihan, kan? Tidak bisa itui,j=0
?i=j=0
.Python 2 , 91 byte
Cobalah online!
sumber
Haskell,
8879 byte"commands" ! [args]
untuk digunakan.Saya masih belajar Haskell; tips golf dihargai!
sumber
i _[]=[]
dapat dipindahkan menjadi aturan pencocokan pola terakhir dan kemudian disingkat menjadii _ e=e
, atau sesuatu seperti_!e=e
setelah Anda beralih ke notasi infiks.(min$product ...
bisamin(product ...
.product$map(mod a)
dapat disingkat menjadifoldr((*).mod a)1
.Ruby 2.4, 77 + 7 = 84 byte
Menggunakan
-rprime
bendera.sumber
Perl 6 , 70 byte
Pertama
rotor
metode ini digunakan untuk membagi daftar input menjadi potongan-potongan ukuran 1 atau 2 tergantung pada apakah karakter program selanjutnya adalahp
atau tidak. Kemudian daftar yang terpotong itu dipetakan; potongan ukuran 2 dijumlahkan, dan potongan ukuran 1 memiliki elemen tunggal mereka diuji untuk keaslian.sumber
Jelly , 18 byte
Cobalah online!
Solusi alternatif, 18 byte
Coba yang ini online!
sumber
C #,
130129 byteCobalah online!
sumber
(p,d)=>
kep=>d=>
untuk menyimpan byte dan membuat fungsi yang dijelajahi?PowerShell 3+,
151121 BytesPowerShell tidak memiliki built-in utama jadi saya harus memutar sendiri. Versi pertama saya sangat buruk dan saya mengambil dari sebagian besar yang lain yang menguji 0 di antara hasil modulus yang menghemat banyak. Juga sabed beberapa byte dengan menggunakan
-notin
bukan-notcontains
tetapi itu berarti PowerShell v2 keluar.Penjelasan berdasarkan komentar
sumber
F #, 130 byte
Cobalah online!
sumber
QBasic, 122 byte
Mengambil kode sebagai jalur input, lalu mengambil setiap nomor input pada jalurnya sendiri. Keluaran diselingi dengan input karena mereka dicetak segera setelah dihitung. Nilai sebenarnya adalah
-1
; falsey adalah0
.sumber