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 Ny un conjunto de al menos un entero positivo A, genera la suma de todos los enteros positivos menores Nque 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
ny una lista de enterosl. Atraviesa un rango de los números naturales (más cero) hasta, pero sin incluir,ny suma (sum(...)) aquellos que tienen un resto después de la división de cero (v%m<1) paraanylos enterosmen 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:--xlugar de1:x-1(dos veces) ahorra dos bytes.mod(a,b)da1 2 0 1 2 0 1 2 0pormod(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 datruepara las columnas donde al menos un valor es cero, yfalsedonde todos los valores son distintos de cero:Se
,1necesita 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
ny conjunto de enterosacon 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=0en 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 elementodde la lista#, todos los múltiplos dedmenor 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
Rangees 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 de0a$^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$_@_%_selfse 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$_(yselfy%_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 secuenciaaaN-1con 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:50para obtener matriz(1:N)'.*Aluego 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
@itenga 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
$ay como una matriz literal$b. Bucles de1hasta uno a continuación$a(vía--$a), utilizando unWhere-Objectoperador|?{...}con una cláusula para seleccionar ciertos números.La cláusula se establece
$icomo el número actual antes de enviar la matriz de entrada$ba 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$beso 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 exteriorWherees$truey el número actual queda en la tubería. De lo contrario, sin elementos de$bla tubería, el exteriorWherees$false, por lo que el número actual no se coloca en la tubería.Esos números se
-joinagrupan en parens, se editan junto con+signos y se canalizan a|iex(abreviaturaInvoke-Expressiony 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
$idesde 1 hasta el primer argumento a continuación y se agrega$ia$ssi no$festá establecido. Los multiplica bucle interno con ( argumento módulo) para todos los argumentos posteriores, el establecimiento de si$f$i$f0$ies 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 deAFunciona 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.existsdentro 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-hashbiblioteca que se encuentra allí también. Compilar comogcc 1.c ../fnv-hash/libfnv.a -o 1 -DNODEBUGPrograma 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:
Eachellas) a través de una serie de funciones (las líneas conLellas), 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
forenfoque de bucle simple , suma todos los múltiplos y lo devuelve. La entrada es el formatoint,int[]matriz.fuente