Inspirado por la reciente moda por otro lenguaje de dos caracteres, ;#
Introducción
Según el consenso de la comunidad , las respuestas aceptables en este sitio deben usar lenguajes de programación que, como mínimo:
- Puede determinar si un número natural es primo
- Puede sumar dos números naturales juntos
- Puede representar una lista / tupla de números, así como un solo número
Para los propósitos de este desafío, ignoraremos el # 3. Por lo tanto, el lenguaje más simple que podría usarse en este sitio (ignorando el n. ° 3) tendría exactamente dos comandos, isPrime
y add
. Para facilitar la interpretación y el recuento de bytes, asignemos isPrime
to p
y add
to +
. Por lo tanto, tenemos nuestro idioma +p
,. Su desafío es interpretar un +p
código.
Comportamiento
+
laadd
instrucción toma dos números, los agrega y genera el resultadop
laisPrime
instrucción toma un solo número y1
muestra si es primo y0
si no lo es
Reglas
- Debe escribir un programa / función que, dada una cadena de caracteres, interprete esa cadena como
+p
código. Puede asumir una entrada bien formada (solo+
yp
caracteres). - La entrada es flexible. Puede tomar el programa como una cadena, matriz de caracteres, matriz entera de puntos de código, etc. La entrada para el programa que se está interpretando también es flexible. Puede tomar una matriz entera y usar entradas a medida que se ejecuta el programa, o cada instrucción (
+
yp
) puede solicitar entradas individualmente. Puede suponer que habrá suficiente información para cada instrucción. Se garantiza que la entrada constará de números entre 0 y 200 (pero sus algoritmos deberían funcionar teóricamente para cualquier entrada entera positiva). - La salida también es flexible. Puede imprimir los resultados, devolverlos como una lista, devolver una cadena que contenga todos los resultados, etc. Si se imprime o devuelve como una cadena, la salida debe estar separada por un separador consistente que no sea un dígito, como una nueva línea, tabulación, espacio o
,
personaje. Puede tener un separador final o algún espacio en blanco final. Además,p
el resultado puede ser cualquier valor verdadero o falso, según lo definido por el idioma en el que está trabajando, en lugar de1
o0
. - El intérprete puede finalizar o no (si es un programa completo), pero debe dejar de imprimir después de que se interpreten todas las instrucciones. (No puede continuar imprimiendo el separador para siempre, o un carácter nulo, etc.).
- Estas lagunas estándar están prohibidas por defecto
- Este es el código de golf , la respuesta con la menor cantidad de bytes gana
Casos de prueba
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
----------------------------------
Muchos, muchos, casos de prueba muy largos
El código Java utilizado para generar casos de prueba.
Ejemplo
A continuación se muestra una función java sin golf que interpretará +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;
}
Nota: Al usar la consulta de búsqueda prime AND add AND interpret is:question
, no parece haber duplicados a esta pregunta. Si hay uno, lo siento.
fuente
p
s se concatenan sin separador, ¿está previsto?isprime
en julia.Respuestas:
05AB1E , 5 bytes
Pruébalo en línea!
Explicación
Este desafío encaja 05AB1E como un guante :)
fuente
+
yp
significa agregar e isPrime en 05AB1E :)Python 2,
135133 bytes-2 bytes gracias a kundor
fuente
i,j=0,0
es redundante, ¿verdad? ¿No podría seri,j=0
?i=j=0
embargo, puedes hacerlo .Python 2 , 91 bytes
Pruébalo en línea!
fuente
Haskell,
8879 bytes"commands" ! [args]
para usar.Todavía estoy aprendiendo Haskell; consejos de golf apreciados!
fuente
i _[]=[]
se puede mover para que sea la última regla de coincidencia de patrones y luego se puede acortari _ e=e
, o algo así,_!e=e
después de cambiar a la notación infija.(min$product ...
puede sermin(product ...
.product$map(mod a)
se puede acortar afoldr((*).mod a)1
.Ruby 2.4, 77 + 7 = 84 bytes
Usa la
-rprime
bandera.fuente
Perl 6 , 70 bytes
Primero, el
rotor
método se usa para dividir la lista de entrada en fragmentos de tamaño 1 o 2, dependiendo de si el siguiente carácter del programa esp
o no. Luego, esa lista fragmentada se asigna; se suman trozos de tamaño 2, y se prueba la primalidad de los trozos de tamaño 1.fuente
Jalea , 18 bytes
Pruébalo en línea!
Solución alternativa, 18 bytes.
¡Prueba este en línea!
fuente
C #,
130129 bytesPruébalo en línea!
fuente
(p,d)=>
ap=>d=>
para guardar un byte y hacer una función curry?PowerShell 3+,
151121bytesPowerShell no tiene funciones integradas principales, por lo que tuve que rodar el mío. Mi primera versión fue terrible y tomé de la mayoría de las otras que prueban 0 entre los resultados del módulo, lo que ahorra mucho. También sabed algunos bytes usando en
-notin
lugar de-notcontains
pero significa que PowerShell v2 está fuera.Explicación basada en comentarios
fuente
F #, 130 bytes
Pruébalo en línea!
fuente
QBasic, 122 bytes
Toma el código como una línea de entrada, luego toma cada número de entrada en su propia línea. Las salidas se intercalan con las entradas porque se imprimen tan pronto como se calculan. El verdadero valor es
-1
; Falsey es0
.fuente