Descripción del desafío
Un número de Smith es un número compuesto cuya suma de dígitos es igual a la suma de sumas de dígitos de sus factores primos. Dado un enteroN
, determine si es un número de Smith o no.
Los primeros números son Smith 4
, 22
, 27
, 58
, 85
, 94
, 121
, 166
, 202
, 265
, 274
, 319
, 346
, 355
, 378
, 382
, 391
, 438
(secuencia A006753 en OEIS).
Entrada / salida de muestra
18: False (sum of digits: 1 + 8 = 9; factors: 2, 3, 3; sum of digits of factors: 2 + 3 + 3 = 8)
22: True
13: False (meets the digit requirement, but is prime)
666: True (sum of digits: 6 + 6 + 6 = 18; factors: 2, 3, 3, 37; sum of digits of factors: 2 + 3 + 3 + 3 + 7 = 18)
-265: False (negative numbers can't be composite)
0: False (not composite)
1: False (not composite)
4937775: True
Notas
- Su código puede ser una función (método) o un programa de trabajo completo,
- En lugar de palabras como
True
yFalse
, puede usar cualquier valor verdadero y falso, siempre que esté claro cuáles son, - Este es un desafío de código de golf , ¡así que haga su código lo más corto posible!
code-golf
math
number-theory
decision-problem
shooqie
fuente
fuente
Respuestas:
Jalea ,
1211 bytesDevuelve 1 para los números de Smith y 0 en caso contrario. Pruébalo en línea! o verificar todos los casos de prueba .
Fondo
Æf
(factorización prima) yD
(entero a decimal) se implementan de modo queP
(producto) yḌ
(decimal a entero) constituyan inversos izquierdos.Para los enteros -4 a 4 ,
Æf
devuelve lo siguiente.Para los números -10, -1, -0.5, 0, 0.5, 1, 10 ,
D
devuelve lo siguiente.Cómo funciona
fuente
Python 2,
122115110106 bytesGuardado 4 bytes gracias a Dennis
Pruébalo en ideone.com
Explicación
Lee un número en stdin y
True
muestra si el número es un número Smith oFalse
si no lo es.fuente
print n<m>s==sum(map(int,`m`))
.Brachylog , 19 bytes
Pruébalo en línea!
Explicación
fuente
_
(llamado bajo menos ).05AB1E ,
1117 bytesExplicación
Pruébalo en línea!
fuente
PowerShell v3 +, 183 bytes
No hay verificación principal incorporada. Sin factorización incorporada. Sin suma de dígitos incorporada. Todo está hecho a mano. :RE
Toma la entrada
$n
como un entero, establece$b
igual a una matriz vacía. Aquí$b
está nuestra colección de factores primos.El siguiente es un
for
bucle. Primero establecemos$a
igual a nuestro número de entrada, y el condicional es hasta que$a
sea menor o igual que 1. Este ciclo va a encontrar nuestros factores primos.Realizamos un ciclo de
2
hasta$a
, utilizaWhere-Object
(|?{...}
) para extraer primos que también son factores!($a%$_)
. Esos se alimentan en un bucle interno|%{...}
que coloca el factor$b
y lo divide$a
(por lo tanto, finalmente lo haremos1
).Entonces, ahora tenemos todos nuestros factores primos
$b
. Es hora de formular nuestra salida booleana. Tenemos que verificar que$n
es-notin
$b
, porque si es que eso significa que$n
es primo, y por lo tanto no es un número Smith. Además, (-and
) debemos asegurarnos de que nuestros dos conjuntos de sumas de dígitos sean-eq
ual. El booleano resultante se deja en la tubería y la salida es implícita.NB : requiere v3 o más reciente para el
-notin
operador.Todavía estoy ejecutando la entrada paraDespués de más de 3 horas, recibí un error de stackoverflow. Entonces, hay un límite superior en alguna parte. Oh bien.4937775
(esto es lento de calcular), así que actualizaré esto cuando termine.Esto funcionará para una entrada negativa, cero o uno, porque la mano derecha de la
-and
barra emitirá un error mientras intenta calcular las sumas de dígitos (que se muestran a continuación), lo que hará que esa mitad vaya a$false
cuando se evalúa. Dado que STDERR se ignora por defecto , y la salida correcta todavía se muestra, esto está bien.Casos de prueba
fuente
MATL, 17 bytes
Salidas Truthy o Falsey arrays donde una salida de Truthy requiere que todos los elementos sean no-cero.
Pruébalo en línea
fuente
Jalea ,
27 2523 bytes(golf más
probable quedefinitivamente es posible)Devoluciones
0
para falso o1
verdaderoTodos los casos de prueba en TryItOnline
¿Cómo?
fuente
En realidad, 18 bytes
Desafortunadamente, en realidad no tiene una factorización incorporada que proporcione los factores primos de un número a la multiplicidad, por lo que tuve que hackear uno juntos. Sugerencias de golf bienvenidas. Pruébalo en línea!
No golfista
fuente
Haskell,
120105 bytesfuente
Octava,
8078 bytesExplicación:
Pruébalo en línea .
fuente
any(t<0)
de no primalidad es muy inteligentePyth, 21 bytes
Un programa que toma la entrada de un entero e imprime
True
oFalse
según sea relevante.Pruébalo en línea
Cómo funciona
fuente
Perl 6 ,
928887 bytesUna función anónima que devuelve un Bool.
( pruébalo en línea )
EDITAR: -1 byte gracias a b2gills
fuente
2..i-1
se deletrea mejor como2..^i
.Java 7,
509506435426419230 bytesDebería haber escuchado el comentario de @BasicallyAlanTuring .
Ah, bueno ... Algunos lenguajes de programación usan un solo byte para los factores primos o la verificación principal, pero Java ciertamente no es uno de ellos.
EDITAR: Redujo a la mitad la cantidad de bytes ahora que tuve algo de tiempo para pensarlo.
Ungolfed (sort-off ..) y casos de prueba:
Pruébalo aquí
Salida:
fuente
Brachylog (más nuevo) , 11 bytes
Pruébalo en línea!
El predicado tiene éxito si la entrada es un número de Smith y falla si no lo es.
fuente
Japt ,
1411 bytes-3 bytes gracias a @Shaggy
Pruébalo en línea!
fuente
JavaScript (ES6),
87 8684 bytesPruébalo en línea!
fuente
Pyke, 16 bytes
Pruébalo aquí!
fuente
2
Perl 6 , 80 bytes
Pruébalo en línea!
Bloque de código anónimo que toma un entero y devuelve un booleano.
fuente
APL (Dyalog Extended) ,
3629 bytes SBCSEsta respuesta le debe su golfidad a la
⍭
mónada de Extended por devolver los factores primos de un número, y eso⊤
es mejor en la conversión de base que en Dyalog Unicode.Editar: -7 bytes gracias a dzaima.
Pruébalo en línea!
Explicación
fuente
{2>⍵:0⋄(⊃=+/-⊃×2<≢)+⌿10⊤⍵,⍭⍵}
J ,
3130 bytesPruébalo en línea!
fuente
C (gcc) ,
139136 bytesPruébalo en línea!
-3 bytes gracias a ceilingcat
Explicación:
fuente
t-h&&i==_
lugar det-h?i==_:0
Raqueta 176 bytes
Devuelve 1 si es verdadero y 0 si es falso:
Versión detallada:
fuente
Óxido - 143 bytes
solución de python prestada por @levitatinglion ... al menos esto es más corto que Java ...
degolfed en play.rust-lang.org
fuente
APL (NARS), 33 caracteres, 66 bytes
Factores de la lista de retorno "π⍵" de ⍵, suponga que la entrada es un entero positivo> = 1; prueba:
fuente
C (gcc), 177 bytes
Define una función
Q
que devuelve 0 para números smith y no cero para números no smithPruébalo en línea!
Explicación:
fuente
C # (compilador interactivo de Visual C #) , 122 bytes
Pruébalo en línea!
fuente