Este es mi primer desafío!
Fondo
El número perfecto es un entero positivo, que es igual a la suma de todos sus divisores, excepto a sí mismo.
Entonces 6es un número perfecto, ya que 1 + 2 + 3 = 6.
Por otro lado 12no lo es, porque 1 + 2 + 3 + 4 + 6 = 16 != 12.
Tarea
Su tarea es simple, escriba un programa que, por supuesto n, imprima uno de estos mensajes:
Soy un número perfecto, porque
d1 + d2 + ... + dm = s == n
no soy un número perfecto, porqued1 + d2 + ... + dm = s [<>] n
¿Dónde
d1, ... dmestán todos los divisores de nexcepto n?
ses la suma de todos los divisores d1, ..., dm(de nuevo, sin n).
[<>]es <(if s < n) o >(if s > n).
Ejemplos
Por nser 6: "Soy un número perfecto, porque 1 + 2 + 3 = 6 == 6"
Por nser 12: "No soy un número perfecto, porque 1 + 2 + 3 + 4 + 6 = 16> 12"
Por nser 13: "No soy un número perfecto, porque 1 = 1 <13"
Reglas
nno es más grande que el estándar de tu idiomaint.- Puede leer
ndesde la entrada estándar, desde argumentos de línea de comandos o desde un archivo. - El mensaje de salida debe imprimirse en la salida estándar y no pueden aparecer caracteres adicionales en la salida (puede tener espacios en blanco al final o nueva línea)
- No puede usar ninguna función incorporada o de biblioteca que resuelva la tarea (o su parte principal) por usted. No
GetDivisors()o algo así. - Se aplican todas las demás lagunas estándar .
Ganador
Este es el código de golf, ¡el código más corto en bytes gana!
fuente

=y==en la misma ecuación? Eso no tiene sentido. Debería ser de lad1 + d2 + ... + dm = s = nOMI.Respuestas:
Pyth, 81 bytes
Pruébelo en línea: Demostración o conjunto de pruebas
Explicación:
fuente
Java,
255270 bytes (Todavía FF en base 17)Y una versión más legible:
Anteriormente no funcionaba para números impares, así que tuve que modificar algunas cosas. Al menos tuve suerte con el recuento de bytes nuevamente. :)
fuente
R,
158163157153143141 bytesTodavía hay espacio para jugar al golf, creo.
Editar: reemplazado
if(b<n)'<'else if(b>n)'>'else'=='porc('<'[b<n],'>'[b>n],'=='[b==n]). Elpaste(...)se reemplaza con unrbind(...)[-1]. Gracias @plannapus por un par de bytes más.Sin golf
Prueba de funcionamiento
fuente
+señal entre los divisores.rbindtruco brillante ! Puede guardar 2 bytes adicionales si asigna2:n-1a una variable, por ejemploa:which(!n%%1:(n-1))se convierte asía[!n%%a]. (El código completo es entoncesn=scan();a=2:n-1;b=sum(w<-a[!n%%a]);cat('I am','not'[b!=n],'a perfect number, because',rbind('+',w)[-1],'=',b,c('<'[b<n],'>'[b>n],'==')[1],n))Python 2,
183173170 bytesEjemplos:
¡Gracias a xnor por guardar 13 bytes!
fuente
'=<>'[cmp(b,d)]- ¡Únete a la revolución!b%i<1parab%i==0. Para['not ',''][int(d==b)], no necesita elint, porque Python se convertirá automáticamente. Además, puede usar la multiplicación de cadenas"not "*(d!=b)."=<>="[cmp(b,d)%3::3].Julia,
161157 bytesSin golf:
fuente
CJam, 90 bytes
A modo de comparación, la impresión de un solo
=se puede lograr en 83 bytes.Pruébelo en línea en el intérprete de CJam .
Cómo funciona
fuente
Perl, 148 bytes
Con saltos de línea:
fuente
'not 'y'==','>','<'declaraciones y se cambia de.a,(ya que nada se añade cuandoprinting una lista). También mover sus tareas en parens la primera vez que se usan ahorra un par, y si cambia la lógica ligeramente haciagrep$a%_<1,1..($a=<>)-1y$a!=($s=eval)&&'not 'hay que rallar un poco más! ¡Espero que todo tenga sentido!Lua,
244231 bytesGolfizado:
Sin golf:
fuente
JavaScript (ES6), 146
Usando cadenas de plantillas, funciona en Firefox y en la última versión de Chrome.
fuente
Ruby,
174160155136134128122 BytesGuardado otros 6 bytes :)
Gracias a los consejos para jugar al golf en Ruby
fuente
C #, 252 bytes
fuente
Hassium , 285 bytes
Descargo de responsabilidad: funciona solo con la última versión de Hassium debido a problemas con los argumentos de la línea de comandos.
Versión más legible:
}
fuente
mono src/Hassium/bin/Debug/Hassium.exe t.hs 6, diceSystem.ArgumentException: The file 6 does not exist.. 2. Esto no funciona con esta versión , que es la última confirmación antes de que se publicara este desafío. Agregue un descargo de responsabilidad a su respuesta que indique que su envío no es competitivo.@Dennisa su comentario. De lo contrario, no recibiré una notificación de su respuesta.)MATLAB, 238
Nunca será el más corto de todos los idiomas, pero aquí está mi intento con MATLAB:
Y esto está en una forma ligeramente más legible:
Me las arreglé para guardar 2 bytes más al no usar una función. En su lugar, ejecuta la línea de código y solicita el número como entrada. Una vez ejecutado, muestra la salida al final.
fuente
Perl 6 , 138 bytes
(El recuento ignora las nuevas líneas y las sangrías, porque no son necesarias)
@des la matriz que contiene los divisores.$scontiene la suma de los divisores.$ces el valor de la comparación entre la entrada y la suma de los divisores.(De hecho,
$ces uno de-1,0,1, pero es realmente uno deOrder::Less,Order::SameoOrder::More)En
'not 'x?$c,?$cen este caso es efectivamente el mismo queabs $c, yxes el operador de repetición de cadena.«> == <»es la abreviatura de( '>', '==', '<' ).Como
$ctiene uno de ellos-1,0,1, tenemos que subirlo uno para poder usarlo para indexarlo en una lista.Técnicamente, esto funcionará para números muy superiores a 2⁶⁴, pero requiere una cantidad de tiempo excesiva para los números superiores a 2¹⁶.
fuente
Pyth, 84 bytes
Respuesta no válida, porque me niego a implementar
=y==en la misma ecuación.fuente
Rubí, 164 bytes
Prueba
fuente
Emacs Lisp, 302 bytes
Versión sin golf:
fuente
Powershell, 164 bytes
Algunos de los trucos PoSh comunes y no tan comunes;
fuente
awk, 150
Se desperdiciaron algunos bytes para corregir esto como entrada
1. No estoy seguro de si eso se espera.fuente
05AB1E , 58 bytes
Pruébelo en línea o verifique todos los casos de prueba .
Explicación:
Vea esta sugerencia mía 05AB1E (sección ¿Cómo usar el diccionario? ) Para comprender por qué
„I€Ües"I am",'€–es"not"y“€…íÀ‚³,ƒ«“es"a perfect number, because".fuente