Intercambie mitades del programa para probar divisores

19

Cuatro secuencias enteras

En este desafío, probará cuatro propiedades diferentes de un entero positivo, dadas por las siguientes secuencias. Un entero positivo N es

  1. perfecta ( OEIS A000396 ), si la suma de los divisores propios de N es igual a N . La secuencia comienza con 6, 28, 496, 8128, 33550336, 8589869056, 137438691328, 2305843008139952128 ...
  2. refactorable ( OEIS A033950 ), si el número de divisores de N es un divisor de N . La secuencia comienza con 1, 2, 8, 9, 12, 18, 24, 36, 40, 56, 60, 72, 80, 84, 88, 96, 104, 108, 128 ...
  3. práctico ( OEIS A005153 ), si cada número entero 1 ≤ K ≤ N es una suma de algunos divisores distintos de N . La secuencia comienza con 1, 2, 4, 6, 8, 12, 16, 18, 20, 24, 28, 30, 32, 36, 40, 42, 48, 54, 56 ...
  4. altamente compuesto ( OEIS A002128 ), si cada número 1 ≤ K <N tiene estrictamente menor número de divisores que N . La secuencia comienza con 1, 2, 4, 6, 12, 24, 36, 48, 60, 120, 180, 240, 360, 720, 840, 1260, 1680, 2520, 5040 ...

Cuatro programas

Su tarea es escribir cuatro programas (es decir, programas completos, definiciones de funciones o funciones anónimas que realizan E / S por cualquiera de los métodos estándar ). Cada programa resolverá el problema de membresía de una de estas secuencias. En otras palabras, cada programa tomará un entero positivo N ≥ 1 como entrada, y generará un valor verdadero si N está en la secuencia, y un valor falso si no. Puede suponer que N está dentro de los límites del tipo entero estándar de su lenguaje de programación.

Los programas deben estar relacionados de la siguiente manera. Hay cuatro cuerdas ABCDtales que

  1. AC es el programa que reconoce números perfectos
  2. AD es el programa que reconoce números refactibles.
  3. BC es el programa que reconoce números prácticos.
  4. BD es el programa que reconoce números altamente compuestos.

Puntuación

Su puntaje es la longitud total (en bytes) de las cadenas ABCD, o en otras palabras, el recuento total de bytes de los cuatro programas dividido por dos. El puntaje más bajo en cada lenguaje de programación es el ganador. Aplican reglas estándar de .

Por ejemplo, si los cuatro cadenas son a{, b{n, +n}y =n}?, a continuación, los cuatro programas son a{+n}, a{=n}?, b{n+n}y b{n=n}?, y la puntuación es de 2 + 3 + 3 + 4 = 12.

Zgarb
fuente

Respuestas:

6

JavaScript (ES6), 46 + 55 + 6 + 36 = 282 274 ... 158 143 bytes

UN:

n=>(r=0,D=x=>x&&D(x-1,n%x||(r++?q-=x:q=n)))(n)

SI:

n=>(q=(g=D=x=>x&&!(n%x||(g|=m>2*(m=x),0))+D(x-1))(m=n))

C:

?!g:!q

RE:

?(P=k=>--k?D(n=k)<q&P(k):1)(n):n%r<1

El resultado es de 4 funciones anónimas que dan Truthy / valores Falsy para sus respectivas entradas ( AC, ADy BCdar true/ false, BDda 1/ 0).

Fragmento de prueba

ETHproducciones
fuente
1
Me gusta cómo extendió el código real en las 4 partes y lo mezcló con los "condicionales" a diferencia de mí (tengo el código en las partes A y B y "condicionales" en las partes C y D.)
Erik the Outgolfer
2

Gelatina , 8 + 17 + 2 1 + 2 = 29 28 bytes

UN:

Æṣ⁼$Ædḍ$

SI:

ÆDŒPS€QṢwRµṖÆdṀ<Ʋ

C:

ƭ

RE:

0?

Para números prácticos (BC), 0es falso y cualquier otro resultado es verdadero.

AC y BC son programas completos, ya que no son reutilizables como funciones.

Erik el Outgolfer
fuente
BC y BD no parecen funcionar correctamente.
Jonathan Allan
ÆDŒPS€ḟ@RṆµṖÆd<ÆdẠµfunciona como B por un costo de dos bytes (y hace que BC devuelva 0 y 1 solo como los demás).
Jonathan Allan
@ JonathanAllan Oh no, parece que me confundí ŒPcon ŒṖ. ¡Qué lástima! ¿Funciona si arreglas eso? (es decir, prueba mi nueva edición) No es que sea muy fácil probar de todos modos, es por eso que todavía no he incluido un enlace TIO.
Erik the Outgolfer
0

Haskell , 69 + 133 + 3 + 3 = puntaje 208

UN:

d n=filter((<1).mod n)[1..n]
f n=[sum(d n)-n==n,length(d n)`elem`d n]

SI:

import Data.List
d n=filter((<1).mod n)[1..n]
f n=[all(\n->any(==n)$sum$subsequences$d n)[1..n],all((<length(d n)).length.d)[1..n-1]]

C:

!!0

RE:

!!1

Pruébalo en línea!

Sí, es bastante barato, pero no soy lo suficientemente inteligente como para una solución más genial. :PAG

totalmente humano
fuente
1
No sé mucho sobre Haskell, pero esto podría ayudarlosubsequences
Asone Tuhid
[x|x<-[1..n],mod n x<1]es más corto que filter((<1).mod n)[1..n].
Laikoni