Vamos directo a ello. Su desafío es hacer un programa que haga estas cosas dependiendo de su entrada:
Si la entrada es un número, envíe "Prime" si el número es un número primo y "Not prime" si el número no es un número primo. Puede suponer que el número es> 1.
Si la entrada es dos números, envíe cada número primo entre el primer número (inclusive) y el segundo número (exclusivo). Puede suponer que el primer número es más pequeño que el segundo.
Aquí viene el verdadero desafío: si no hay entrada, el programa debería generar una versión más corta de sí mismo que haga exactamente las mismas cosas que el programa original. El programa no tiene permitido leer desde ningún archivo o desde la web. El nuevo programa también debería poder hacer esto. Debería funcionar durante al menos 5 generaciones. El nuevo programa no tiene que estar en el mismo idioma que el primero.
Puntuación:
Su puntaje es igual a la suma del número de bytes en las primeras cinco generaciones de su envío (el envío en sí es la generación uno). Si el nuevo código está codificado en el primer programa, multiplique el puntaje por 1.5. La puntuación más baja gana. (Si encuentra algún tipo de falla en el sistema de puntuación, hágamelo saber en los comentarios)
Respuestas:
CJam, 66 + 65 + 64 + 63 + 62 = 320
325355bytesLas siguientes 5 líneas son las primeras 5 generaciones:
El último produce
que aún realiza las tareas principales correctamente.
Pruébalo aquí.
Explicación
La quine básica de CJam es
que puede extenderse muy fácilmente a una quina generalizada. Para una explicación de esto, vea mi respuesta aquí .
Las ideas básicas para esta respuesta son:
Aquí hay un desglose del código dentro de la quine:
fuente
C, Puntuación: 553 + 552 + 551 + 550 + 549 = 2755,
Longitud original: 553, promedio: 551
EDITAR: ¡solo 5 generaciones, no 6!
Parece que Martin me ganó tanto en tiempo como en puntuación (¡en casi un orden de magnitud!). Ah bueno.
El programa original es el siguiente:
Lo desentrañaré un poco para comprenderlo mejor, pero para que funcione correctamente, las nuevas líneas NO son parte del programa.
Lo único que cambia de un programa a otro es el valor de
k
, que pierde exactamente un dígito en cada iteración. Curiosamente, después de la quinta generación, k se convierte en cero y permanece allí, por lo que puede iterar hasta el infinito y siempre tener una salida válida.fuente
Tcl 253 + 252 + 251 + 250 + 249 = 1255 bytes
El código debe terminar con una nueva línea. Explicación:
Escriba el código en x, luego ejecútelo.
Ejecute el comando cuyo nombre es la longitud del argumento, pasando los argumentos.
Devuelve 1 cuando a es primo, 0 más. Utiliza recursividad; la segunda barra diagonal inversa evita la sustitución de comandos del intérprete y habilita el de
expr
(que es vago).Implementación directa de los requisitos.
Esta es la quine, quitando un espacio desde el principio cada vez.
fuente