Casi equivalente a la primera pregunta del Proyecto Euler:
Si enumeramos todos los números naturales por debajo de 10 que son múltiplos de 3 o 5, obtenemos 3, 5, 6 y 9. La suma de estos múltiplos es 23.
Encuentra la suma de todos los múltiplos de 3 o 5 por debajo de 1000.
Reto:
Dado un entero positivo N
y un conjunto de al menos un entero positivo A
, genera la suma de todos los enteros positivos menores N
que son múltiplos de al menos un miembro de A
.
Por ejemplo, para el caso del Proyecto Euler, la entrada sería:
1000
3
5
Casos de prueba:
Input : 50, [2]
Output: 600
Input : 10, [3, 5]
Output: 23
Input : 28, [4, 2]
Output: 182
Input : 19, [7, 5]
Output: 51
Input : 50, [2, 3, 5]
Output: 857
Respuestas:
Jalea , 6 bytes
Pruébalo en línea!
Cómo funciona
fuente
Python,
5955 bytesrepl.it
Función sin nombre que toma un entero
n
y una lista de enterosl
. Atraviesa un rango de los números naturales (más cero) hasta, pero sin incluir,n
y suma (sum(...)
) aquellos que tienen un resto después de la división de cero (v%m<1
) paraany
los enterosm
en la listal
. Utiliza la multiplicación en lugar de un condicional para guardar 3 bytes.fuente
Octava,
383633 bytesToma de entrada como:
f(10, [3;5])
. Esto sería 2 bytes más corto si la entrada pudiera serf(9,[3;5])
para el mismo caso de prueba.Verifique todos los casos de prueba aquí.
Explicación:
Octave puede disminuir previamente, por lo que usar en
1:--x
lugar de1:x-1
(dos veces) ahorra dos bytes.mod(a,b)
da1 2 0 1 2 0 1 2 0
pormod(1:9,3)
. Si el segundo argumento es un vector vertical, replicará la primera entrada verticalmente y tomará el módulo para cada uno de los valores en el segundo argumento de entrada. Entonces, para la entradamod(1:9, [3;5])
esto da:Asumir
~all(_,1)
esto datrue
para las columnas donde al menos un valor es cero, yfalse
donde todos los valores son distintos de cero:Se
,1
necesita en caso de que solo haya un número eny
. De lo contrario, actuaría en todo el vector en lugar de número por número.Transponer esto a una matriz vertical y usar multiplicación matricial, nos dará la respuesta correcta, sin la necesidad de una suma explícita:
fuente
JavaScript (ES6),
403936 bytesEntrada: entero
n
y conjunto de enterosa
con sintaxis de curry(n)(a)
Casos de prueba
Mostrar fragmento de código
fuente
f=(n,a)=>n--&&a.some(v=>n%v<1)*n+f(n,a)
. Lo mejor que pude hacer de forma no recursiva fue 61 bytes.MATL , 9 bytes
Pruébalo en línea!
fuente
1 2 ...
. Lo duplica y toma el módulo de la otra entrada. Lo niegas y multiplicas con el vector1 2 ..
, lo usas para deshacerte de los duplicados y finalmente lo sumas ...Retina , 34 bytes
El recuento de bytes asume la codificación ISO 8859-1.
El formato de entrada es
Pruébalo en línea!
fuente
Python, 67 bytes
Después de escribir esto, noté que mi código era similar a la respuesta existente de Python, sin embargo, se me ocurrió de forma independiente y lo estoy publicando de todos modos.
fuente
x=y=0
en una línea separada ahorraría cuatro bytes.Mathematica,
3727 bytes¡Gracias a Martin Ender por una observación astuta que condujo a grandes ahorros de bytes!
Función sin nombre que toma dos argumentos, una lista
#
de enteros (los divisores deseadosA
) y un entero#2
(el límite superiorN
), y devuelve un entero.Range[#,#2-1,#]
da, para cada elementod
de la lista#
, todos los múltiplos ded
menor o igual que#-1
(por lo tanto, menor que#
); La unión de estas listas se calcula y se suma conTr
.Versión previa:
fuente
Range
es listable:Tr[Union@@Range[#2,#-1,#2]]&
(y luego guarda otro byte intercambiando el orden de las entradas)Perl 6 , 25 bytes
Una lambda que toma los números de entrada como argumentos. (Un argumento para N, y un número arbitrario de argumentos para A).
( Pruébelo en línea. )
Explicación:
{ ... }
: Una lambda.$^a
: Primer argumento de la lambda.@_
: Argumentos restantes de la lambda ("parámetro variadic").^$^a
: Rango de0
a$^a - 1
.* %% @_.any
: Otra lambda, que prueba su argumento*
usando el operador divisible por%%
contra unany
- Unión de la lista@_
.grep PREDICATE, RANGE
: itera el rango de números y devuelve aquellos para los cuales el predicado es verdadero.fuente
^
para declarar un parámetro de marcador de posición es bastante explícito. Especialmente porque podrías usarlo más tarde en el bloque como solo$a
. Creo que solo$_
@_
%_
self
se puede considerar que se declara implícitamente. Creo que debería leer esa línea " declarar el primer parámetro como marcador de posición "@_
, y%_
en el caso de las funciones, no son diferentes en ese sentido: ellos también solo se convierten en parte de la firma si aparecen en el cuerpo. Sólo$_
(yself
y%_
en los métodos) puede llegar a ser parte de una firma por defecto.R, 67 bytes
Toma un vector de STDIN en el siguiente formato:
[N, a_1, a_2, ...]
. Soporta cualquier cantidad dea
. Para cada unoa
, se crea la secuenciaa
aN-1
con tamaño de pasoa
. Luego toma la suma de todas las entradas únicas en ese vector.fuente
Haskell,
4239 bytesUso:
Gracias a @Zgarb por 3 bytes
fuente
(x`mod`)
es el mismo quemod x
.05AB1E , 9 bytes
Pruébalo en línea!
fuente
à
(máximo) aparece en la lista ahora, pero no antes)Octava,
4937 bytesla función se llamará como
f([2 3 4],50)
Supongamos que
A=[2 3 4];
necesitamos tener una suma de números comopodemos multiplicar
[2 3 4]
por1:50
para obtener matriz(1:N)'.*A
luego extraiga de la matriz aquellos que sean menores de 50:
z(z<N)
Como hay elementos repetidos en la matriz, extraemos valores únicos y los sumamos.
respuesta anterior : (esta solución fallará si N == 1)
la función debe llamarse como
f(unit64([2 3 4]),uint64(50))
fuente
Pyth, 10 bytes
Explicación
fuente
T-SQL, 87 bytes
Esto funcionará siempre que
@i
tenga un valor de 2048 o inferiorPruébalo
fuente
APL (Dyalog Unicode) , 12 bytes
Pruébalo en línea!
Función tácita anónima. Gracias a @ Adám por ayudarme a reducir 3 bytes de esto. Usos
⎕IO←0
.Cómo:
fuente
Pip ,
43 41 3935 bytesPruébalo en línea!
Explicación:
fuente
Python 2, 80 bytes
Esto es muy largo Definitivamente se puede acortar. Tomar los 3 números como entradas separadas definitivamente está afectando el puntaje.
fuente
x,y,z=input()
y dar su opinión en forma de(1000,3,5)
.Lisp común, 77
Sin golf
fuente
PowerShell , 57 bytes
Pruébalo en línea!
Solución iterativa. Toma la entrada como un número
$a
y como una matriz literal$b
. Bucles de1
hasta uno a continuación$a
(vía--$a
), utilizando unWhere-Object
operador|?{...}
con una cláusula para seleccionar ciertos números.La cláusula se establece
$i
como el número actual antes de enviar la matriz de entrada$b
a otra|?{...}
, aquí seleccionando aquellos elementos donde el número actual se divide de manera uniforme por al menos uno de los números en$b
. Esos elementos de$b
eso se dividen equitativamente quedan en la tubería.Por lo tanto, si hay al menos un elemento de
$b
, la tubería contiene un elemento, por lo que el exteriorWhere
es$true
y el número actual queda en la tubería. De lo contrario, sin elementos de$b
la tubería, el exteriorWhere
es$false
, por lo que el número actual no se coloca en la tubería.Esos números se
-join
agrupan en parens, se editan junto con+
signos y se canalizan a|iex
(abreviaturaInvoke-Expression
y similar aeval
). El resultado de la suma se deja en la tubería y la salida es implícita.fuente
PHP,
787674 bytesEl bucle externo se ejecuta
$i
desde 1 hasta el primer argumento a continuación y se agrega$i
a$s
si no$f
está establecido. Los multiplica bucle interno con ( argumento módulo) para todos los argumentos posteriores, el establecimiento de si$f
$i
$f
0
$i
es el múltiplo de cualquiera de ellos.Corre con
-r
.fuente
Scala, 47 bytes
n es una lista que contiene un primer argumento
N
, el resto son elementos deA
Funciona filtrando los números donde no existe al menos una A de la cual i es un múltiplo, luego sumando. Estrictamente hablando, deberíamos usar
n.tail.exists
dentro del cierre, pero como siempre es menor que N y, por lo tanto, nunca es un múltiplo de N, la solución aún está completa sin esto.fuente
Java 8, 75 bytes
La firma del método para esto es
int f(int N, List<Integer> A)
fuente
Ruby,
52 4846 bytesfuente
C11, 177 bytes
Requiere este conjunto de encabezados en la misma carpeta, y la
fnv-hash
biblioteca que se encuentra allí también. Compilar comogcc 1.c ../fnv-hash/libfnv.a -o 1 -DNODEBUG
Programa de prueba:
salidas
fuente
Japt
-x
,976 bytesIntentalo
fuente
Whispers v2 , 178 bytes
Pruébalo en línea!
Estructura de árbol:
Cómo funciona
Muy simple, colocamos cada número (las líneas conα denota el conjunto de números dados como entrada:
Each
ellas) a través de una serie de funciones (las líneas conL
ellas), luego, en base a los resultados de esas funciones, descartamos algunos números y guardamos el resto, antes de finalmente sumarlos. . De hecho, podemos definir esas funciones, dondeEsto es lo que representan las líneas 5 a 10 . Las líneas 11 a 16 son simplemente la aplicación de esas tres funciones. Una vez que hemos definido todas las funciones, mutamosα a β de acuerdo con la siguiente regla:
dóndeαyo denota el yo th elemento de α y lo mismo para β . Finalmente, simplemente podemos tomar la suma deβ , como el 0 0 Los elementos no afectan la suma.
fuente
K (oK) ,
1514 bytesSolución:
Pruébalo en línea!
Ejemplos:
Explicación:
fuente
En realidad , 13 bytes
Pruébalo en línea!
Explicación:
fuente
Procesamiento, 88 bytes
Utiliza el
for
enfoque de bucle simple , suma todos los múltiplos y lo devuelve. La entrada es el formatoint
,int[]
matriz.fuente