Reto:
Dado un número, tome el primo más grande estrictamente menor que él, reste de este número, haga esto nuevamente a este nuevo número con el primo mayor menor que él y continúe haciendo esto hasta que sea menor que 3. Si llega a 1, su el programa debería generar un valor verdadero, de lo contrario, el programa debería generar un valor falso.
Ejemplos:
Todo esto debería dar un valor verdadero:
3
4
6
8
10
11
12
14
16
17
18
20
22
23
24
26
27
29
30
32
34
35
37
38
40
41
42
44
46
47
48
50
Todo esto debería dar valores falsey:
5
7
9
13
15
19
21
25
28
31
33
36
39
43
45
49
Reglas:
- Puedes escribir un programa o una función.
- Puede suponer que la entrada es mayor que 2.
- Se aplican lagunas estándar
- Este es el código de golf, por lo que gana la respuesta más corta.
code-golf
number
primes
decision-problem
Loovjo
fuente
fuente
9/10
as2^(-1) 3^2 5^(-1)
está pensando en términos de este último)Respuestas:
Jalea ,
98 bytesPruébalo en línea! o verificar todos los casos de prueba .
Cómo funciona
fuente
Retina , 31 bytes
Impresiones
0
(falsedad) o1
(verdad).Pruébalo en línea! (La primera línea habilita un conjunto de pruebas separado por salto de línea).
Explicación
Convierta la entrada a unario convirtiendo la entrada
N
enN
copias de1
.Repetidamente elimine el primo más grande menos que la entrada. Esto se basa en la prueba de primalidad estándar con regex .
Comprueba si el resultado es único
1
.fuente
Pyth,
181514 bytesGracias a @Maltysen por -1 byte
Un programa que toma información sobre STDIN e imprime
True
oFalse
según corresponda.Pruébalo en línea
Cómo funciona
Versión antigua con reducción, 18 bytes
Pruébalo en línea
Cómo funciona
fuente
St
sonU
15 caracteresJavaScript (ES6),
6463 bytesGuardado 1 byte gracias a @Neil
Escribí esto en 2 minutos ... y funcionó perfectamente la primera vez. El primer usuario en encontrar el error inevitable gana ...
Pruébalo
Mostrar fragmento de código
Cómo funciona
Primero definimos g (x) como la función que encuentra el primer número primo p <= x . Esto se realiza mediante el siguiente proceso:
La solución a este desafío, f (x) , ahora es bastante sencilla:
fuente
too much recursion
a la consola del navegador en Firefox 48, así que supongo que la recursión supera el límite de recursión de FF.x%2
debería ahorrarte un bytex==1
.Pyke,
1511 bytesPruébalo aquí!
Devuelve
1
si es verdadero y genera una excepción si es falsofuente
Julia, 32 bytes
Si bien no será la solución más corta entre los idiomas, esta podría ser la más corta de las legibles por humanos ...
O, para decirlo en términos un poco más claros
Llamado con, por ejemplo
!37
,.fuente
Mathematica, 32 bytes
Esta es una función sin nombre que toma un número entero y devuelve un valor booleano.
Explicación
Aquí hay mucha sintaxis y un orden de lectura divertido, así que ...
fuente
#+0~Min~NextPrime@-#&~FixedPoint~#==1&
(36 bytes). Buen uso de//.
!<2
al final.Python3,
102 92 90 8988 bytesSugerencias de golf bienvenidas! Veo que
gmpy
contiene una funciónnext_prime
, pero aún no puedo probarla :(-2 bytes, gracias a @JonathanAllan !
-1 byte, gracias a @Aaron !
Casos de prueba
La salida es de 13 valores de verdad y 13 valores de falsey.
s
contiene los casos verdaderos yh
los falseys.fuente
if all(x%y for...
funcionan<3 else
->n<3else
para obtener la misma longitud que la mía;)Python, con sympy, 60 bytes
Mi método anterior era 83 bytes sin sympy usando recursión, pero tomé verdadero / falso para decir distinguible y consistente, pero me han informado que es una interpretación incorrecta. Parece que no puedo salvarlo debido a la cola, pero lo dejaré aquí en caso de que alguien sepa cómo hacerlo:
fuente
2
No es un valor falsey.Vitsy,
2826 bytesEsto definitivamente se puede acortar.
Pruébalo en línea!
fuente
MATL , 13 bytes
Pruébalo en línea! O verifique todos los casos de prueba a la vez .
Explicación
fuente
CJam ,
2116 bytesGracias a Dennis por guardar 4 bytes.
Pruébalo en línea!
Explicación
fuente
ri_{_1|{mp},W=-}*
Deberia trabajar.1|
es muy inteligente. :) (Y siempre olvido que{...},
hace un rango implícito ...)Perl, 42 bytes
Incluye +1 para
-p
Ejecutar con entrada en STDIN
reach1.pl
:Utiliza la clásica regex de primalidad
fuente
.NET Regex, 38 bytes
Solo para mostrar que se puede verificar en una sola expresión regular.
Se supone que la entrada está en unario.
Explicación
Simplemente implementa el requisito de la palabra, eliminando repetidamente el primo más grande y verifica si el resto es 1.
(?>(?<=(.*))..+(?<!^\1\2+(.+.)|$))+
: El grupo sin retroceso se asegura de que el mayor prime que encontramos no se anule, y+
simplemente repite el proceso de igualar el mayor prime(?<=(.*))..+(?<!^\1\2+(.+.)|$)
: Coincide con el primo más grande menos que el número restante(?<=(.*))
: Registre cuánto hemos restado para establecer un punto de "anclaje" para la afirmación...+
: Busque el mayor número ...(?<!^\1\2+(.+.)|$)
: ... que es primo y menor que el número restante.(?<!^\1\2+(.+.))
: La rutina de prueba principal habitual, con^\1
tachuelas al frente para asegurarnos de que estamos verificando la cantidad igualada por..+
(?!<$)
: Afirmar menos que el número restantefuente
(?<=(.*))
parte es bastante torpe. No estoy seguro si hay una mejor manera. Además, tengo curiosidad por saber si hay una solución en PCRE.Perl 6 ,
54 53 5251 bytesExplicación:
Ejemplo:
fuente
Irregular , 63 bytes
Creé este lenguaje hace dos días, y las premisas básicas son que no hay bucles integrados, las únicas características son la aritmética básica y la toma de decisiones, y la evaluación del programa se basa en expresiones regulares.
Explicación
Esta parte convierte la entrada en unario. Resta repetidamente 1 de la entrada hasta que sea igual a 0, precediendo
1_
cada vez. Luego elimina todos los_
s. Si no hubiera olvidado unbreak
en mi código, podría escribirse así:La siguiente parte quita repetidamente la mayor primo desde la entrada hasta que es igual a
1
o11
, con11
ser reemplazado con0
.Usé la expresión regular de la respuesta de Martin Ender .
fuente
Haskell, 79 bytes
No realmente corto pero sin puntos :)
fuente
PowerShell v2 +, 81 bytes
Toma entrada
$n
. Entra en unwhile
ciclo siempre y cuando$n
sea3
o mayor. Cada iteración, resta un número de$n
. El número es el resultado de la prueba de primalidad regex aplicada contra un rango a($n-1)..2
través del operadorWhere-Object
(?
), luego el primero[0]
de los resultados (dado que el rango está disminuyendo, esto da como resultado que se seleccione el más grande). Después de concluir el ciclo,$n
va a ser1
o2
, por definición, por lo que decrementamos previamente$n
(convirtiéndolo en uno0
o1
), y tomamos el booleano, no del!
mismo. Eso queda en la tubería y la salida es implícita.Ejemplos
fuente
Matlab, 51 bytes
Esto es MUY similar a la solución JS6 de ETHProductions , pero necesita que la variable esté en el espacio de trabajo.
fuente
Python 2.7:
8887 bytes¡Gracias @TuukkaX por -1 byte más!
fuente
n<2
lugar den==1
.Floroide ,
45 3029 bytesfuente
Clojure, 125 bytes
Vaya, ese es un código largo. ¡El lenguaje más detallado ataca de nuevo!
Sin golf:
fuente