Lấy cảm hứng từ cơn sốt gần đây về ngôn ngữ hai nhân vật khác, ;#
Giới thiệu
Theo sự đồng thuận của cộng đồng , các câu trả lời chấp nhận được trên trang web này phải sử dụng các ngôn ngữ lập trình tối thiểu:
- Có thể xác định nếu một số tự nhiên là số nguyên tố
- Có thể cộng hai số tự nhiên lại với nhau
- Có thể đại diện cho một danh sách / bộ số, cũng như một số duy nhất
Đối với mục đích của thử thách này, chúng tôi sẽ bỏ qua # 3. Do đó, ngôn ngữ đơn giản nhất có thể được sử dụng trên trang web này (bỏ qua số 3) sẽ có chính xác hai lệnh isPrime
và add
. Để dễ giải thích và đếm byte, chúng ta hãy assign của isPrime
để p
và add
để +
. Vì vậy, chúng tôi có ngôn ngữ của chúng tôi +p
,. Thách thức của bạn là giải thích một số +p
mã.
Hành vi
+
cácadd
hướng dẫn phải mất hai con số, cho biết thêm họ, và kết quả đầu ra kết quảp
cácisPrime
hướng dẫn có một số duy nhất, và kết quả đầu ra1
nếu nó là số nguyên tố, và0
nếu nó không phải là
Quy tắc
- Bạn phải viết một chương trình / hàm, đưa ra một chuỗi ký tự, diễn giải chuỗi đó dưới dạng
+p
mã. Bạn có thể giả sử đầu vào được hình thành tốt (chỉ+
vàp
ký tự). - Đầu vào là linh hoạt. Bạn có thể tham gia chương trình dưới dạng một chuỗi, mảng ký tự, mảng số nguyên của các điểm mã, v.v. Đầu vào cho chương trình đang được diễn giải cũng linh hoạt. Bạn có thể lấy một mảng số nguyên và sử dụng hết các mục khi chương trình thực thi hoặc mỗi lệnh (
+
vàp
) có thể yêu cầu đầu vào riêng lẻ. Bạn có thể cho rằng sẽ có đủ đầu vào cho mỗi hướng dẫn. Đầu vào được đảm bảo bao gồm các số từ 0 đến 200 (nhưng về mặt lý thuyết, thuật toán của bạn sẽ hoạt động cho bất kỳ đầu vào số nguyên dương nào). - Đầu ra cũng linh hoạt. Bạn có thể in kết quả, trả về dưới dạng danh sách, trả về chuỗi chứa tất cả kết quả, v.v ... Nếu được in hoặc trả về dưới dạng chuỗi, đầu ra phải được phân tách bằng một số dấu tách không có chữ số, nhất quán, chẳng hạn như một dòng mới, tab, không gian hoặc
,
ký tự. Bạn có thể có một dấu phân cách hoặc một khoảng trắng ở cuối. Ngoài ra,p
đầu ra có thể là bất kỳ giá trị trung thực hoặc falsey nào, như được xác định bởi ngôn ngữ bạn đang làm việc, thay vì1
hoặc0
. - Trình thông dịch có thể hoặc không thể chấm dứt (nếu đó là một chương trình đầy đủ), nhưng nó phải dừng in sau khi tất cả các hướng dẫn được diễn giải. (Không thể tiếp tục in dấu phân cách mãi mãi hoặc ký tự null, v.v.).
- Những sơ hở tiêu chuẩn này bị cấm theo mặc định
- Đây là môn đánh gôn , câu trả lời có ít byte nhất sẽ thắng
Các trường hợp thử nghiệm
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
----------------------------------
Mã java được sử dụng để tạo các trường hợp thử nghiệm
Thí dụ
Dưới đây là một hàm java không được mã hóa sẽ diễn giải +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;
}
Lưu ý: Sử dụng truy vấn tìm kiếm prime AND add AND interpret is:question
, dường như không có bất kỳ bản sao nào cho câu hỏi này. Nếu có một, xin lỗi.
isprime
trong julia.
p
của s được nối mà không có dấu phân cách, điều này có được dự định không?