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.
isprime
di julia.
p
's digabungkan tanpa pemisah, apakah ini dimaksudkan?