Quase equivalente à primeira pergunta do Projeto Euler:
Se listarmos todos os números naturais abaixo de 10 que são múltiplos de 3 ou 5, obtemos 3, 5, 6 e 9. A soma desses múltiplos é 23.
Encontre a soma de todos os múltiplos de 3 ou 5 abaixo de 1000.
Desafio:
Dado um número inteiro positivo N
e um conjunto de pelo menos um número inteiro positivo A
, produza a soma de todos os números inteiros positivos menores que N
isso são múltiplos de pelo menos um membro de A
.
Por exemplo, para o caso do Project Euler, a entrada seria:
1000
3
5
Casos de teste:
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
Respostas:
Gelatina , 6 bytes
Experimente online!
Como funciona
fonte
Python,
5955 bytesrepl.it
Função sem nome usando um número inteiro
n
e uma lista de números inteirosl
. Percorre um intervalo dos números naturais (mais zero) até mas não incluin
e soma (sum(...)
) aqueles que têm um restante após a divisão de zero (v%m<1
) paraany
os números inteirosm
na listal
. Usa multiplicação em vez de uma condição para salvar 3 bytes.fonte
Oitava,
383633 bytesTome entrada como:
f(10, [3;5])
. Isso seria 2 bytes mais curto se a entrada pudesse serf(9,[3;5])
para o mesmo caso de teste.Verifique todos os casos de teste aqui.
Explicação:
A oitava pode pré-diminuir, portanto, usar em
1:--x
vez de1:x-1
(duas vezes) salva dois bytes.mod(a,b)
dá1 2 0 1 2 0 1 2 0
paramod(1:9,3)
. Se o segundo argumento for um vetor vertical, ele replicará a primeira entrada verticalmente e assumirá o módulo para cada um dos valores no segundo argumento de entrada. Portanto, para entrada,mod(1:9, [3;5])
isso fornece:Assumir
~all(_,1)
isso fornecetrue
as colunas onde pelo menos um valor é zero efalse
onde todos os valores são diferentes de zero:O
,1
é necessário caso haja apenas um númeroy
. Caso contrário, ele atuaria em todo o vetor, em vez de número por número.Transpor isso para uma matriz vertical e usar a multiplicação de matrizes nos dará a resposta correta, sem a necessidade de soma explícita:
fonte
JavaScript (ES6),
403936 bytesEntrada: número inteiro
n
e matriz de números inteirosa
com sintaxe de currying(n)(a)
Casos de teste
Mostrar snippet de código
fonte
f=(n,a)=>n--&&a.some(v=>n%v<1)*n+f(n,a)
. O melhor que pude fazer de forma não recursiva foi de 61 bytes.MATL , 9 bytes
Experimente online!
fonte
1 2 ...
. Você o duplica e pega a outra entrada no módulo. Você negá-lo e se multiplicam com o vector1 2 ..
, use única para se livrar de duplicatas e, finalmente, soma isso ...Retina , 34 bytes
A contagem de bytes assume a codificação ISO 8859-1.
O formato de entrada é
Experimente online!
fonte
Python, 67 bytes
Depois de escrever isso, notei que meu código era semelhante à resposta existente em python, no entanto, eu o criei independentemente e estou publicando de qualquer maneira.
fonte
x=y=0
em uma linha separada economizaria quatro bytes.Mathematica,
3727 bytesAgradecemos a Martin Ender por uma observação perspicaz que levou a grandes economias de bytes!
Função sem nome, recebendo dois argumentos, uma lista
#
de números inteiros (os divisores desejadosA
) e um número inteiro#2
(o limite superiorN
) e retornando um número inteiro.Range[#,#2-1,#]
fornece, para cada elementod
da lista#
, todos os múltiplosd
menores ou iguais a#-1
(portanto, menores que#
); a união dessas listas é então calculada e resumidaTr
.Versão anterior:
fonte
Range
é listável:Tr[Union@@Range[#2,#-1,#2]]&
(e, em seguida, excepto outro byte, trocando a ordem das entradas)Perl 6 , 25 bytes
Um lambda que aceita os números de entrada como argumentos. (Um argumento para N e um número arbitrário de argumentos para A).
( Experimente online. )
Explicação:
{ ... }
: Um lambda.$^a
: Primeiro argumento da lambda.@_
: Argumentos restantes do lambda ("parâmetro variável").^$^a
: Faixa de0
até$^a - 1
.* %% @_.any
: Outro lambda, que testa seu argumento*
usando o operador divisível por%%
contra uma junçãoany
- da lista .@_
grep PREDICATE, RANGE
: itera o intervalo de números e retorna aqueles para os quais o predicado é verdadeiro.fonte
^
para declarar um parâmetro de espaço reservado é bastante explícito. Especialmente porque você pode usá-lo mais tarde no bloco como justamente$a
. Eu acho que apenas um$_
@_
%_
self
dia pode ser considerado implicitamente declarado. Eu acho que eu teria essa linha ler " declarar primeiro parâmetro como um espaço reservado "@_
, e%_
no caso de funções, não são diferentes a esse respeito: elas também só se tornam parte da assinatura se aparecerem no corpo. Apenas$_
(eself
e%_
em métodos) pode se tornar parte de uma assinatura por padrão.R, 67 bytes
Toma um vetor para STDIN no seguinte formato:
[N, a_1, a_2, ...]
. Suporta qualquer número dea
. Para cadaa
, cria a sequênciaa
paraN-1
com tamanho de passoa
. Em seguida, leva a soma de todas as entradas exclusivas desse vetor.fonte
Haskell,
4239 bytesUso:
Obrigado a @Zgarb por 3 bytes
fonte
(x`mod`)
é o mesmo quemod x
.05AB1E , 9 bytes
Experimente online!
fonte
à
(no máximo) aparece a lista agora, mas não antes).Oitava,
4937 bytesa função será chamada como
f([2 3 4],50)
Suponha que
A=[2 3 4];
precisamos ter soma dos números comopodemos multiplicar
[2 3 4]
por1:50
chegar matriz(1:N)'.*A
então extraia da matriz aqueles que são menores que 50:
z(z<N)
Como existem elementos repetidos na matriz, extraímos valores únicos e os somamos.
resposta anterior : (esta solução falhará se N == 1)
função deve ser chamada como
f(unit64([2 3 4]),uint64(50))
fonte
Pitão, 10 bytes
Explicação
fonte
T-SQL, 87 bytes
Isso funcionará desde que
@i
tenha um valor igual ou inferior a 2048Experimente
fonte
APL (Dyalog Unicode) , 12 bytes
Experimente online!
Função tácita anônima. Agradeço ao @ Adám por me ajudar a eliminar 3 bytes disso. Usos
⎕IO←0
.Quão:
fonte
Pip ,
43 41 3935 bytesExperimente online!
Explicação:
fonte
Python 2, 80 bytes
Isso é muito longo. Definitivamente pode ser reduzido. Tomar os 3 números como entradas separadas definitivamente prejudica a pontuação.
fonte
x,y,z=input()
e dar entrada na forma de(1000,3,5)
.Lisp comum, 77
Ungolfed
fonte
PowerShell , 57 bytes
Experimente online!
Solução iterativa. Recebe a entrada como um número
$a
e como uma matriz literal$b
. Loops de1
até um abaixo$a
(via--$a
), usando umWhere-Object
operador|?{...}
com uma cláusula para selecionar determinados números.A cláusula define
$i
como o número atual antes de enviar a matriz de entrada$b
para outra|?{...}
, escolhendo aqui os itens em que o número atual é dividido igualmente por pelo menos um dos números em$b
. Os elementos$b
que se dividem igualmente são deixados no pipeline.Portanto, se houver pelo menos um elemento
$b
, o pipeline conterá um elemento; portanto, o exteriorWhere
é$true
e o número atual é deixado no pipeline. Caso contrário, sem elementos$b
no pipeline, o externoWhere
será$false
, portanto, o número atual não será colocado no pipeline.Esses números são todos reunidos em parênteses, editados
-join
com+
sinais e canalizados para|iex
(abreviaçãoInvoke-Expression
e semelhante aeval
). O resultado da soma é deixado no pipeline e a saída é implícita.fonte
PHP,
787674 bytesO loop externo é executado
$i
de 1 a abaixo do primeiro argumento e adiciona$i
a$s
se não$f
estiver definido. O loop interno se multiplica com ( argumento de módulo) para todos os argumentos subseqüentes, configurando para se é o múltiplo de qualquer um deles.$f
$i
$f
0
$i
Corra com
-r
.fonte
Scala, 47 bytes
n é uma lista que contém um primeiro argumento
N
, o restante são elementos deA
Funciona filtrando os números onde não existe pelo menos um A dos quais i é múltiplo e, em seguida, somando. A rigor, devemos usar
n.tail.exists
dentro do fechamento, mas como i é sempre menor que N e, portanto, nunca um múltiplo de N, a solução ainda está completa sem isso.fonte
Java 8, 75 bytes
A assinatura do método para isso é
int f(int N, List<Integer> A)
fonte
Ruby,
52 4846 bytesfonte
C11, 177 bytes
Requer este conjunto de cabeçalhos na mesma pasta e a
fnv-hash
biblioteca encontrada lá também. Compilar comogcc 1.c ../fnv-hash/libfnv.a -o 1 -DNODEBUG
Programa de teste:
saídas
fonte
Japonês
-x
,976 bytesTente
fonte
Sussurros v2 , 178 bytes
Experimente online!
Árvore de estrutura:
Como funciona
Each
L
fonte
K (ok) ,
1514 bytesSolução:
Experimente online!
Exemplos:
Explicação:
fonte
Na verdade , 13 bytes
Experimente online!
Explicação:
fonte
Processando, 88 bytes
Utiliza a
for
abordagem simple -loop, soma todos os múltiplos e a retorna. Entrada é o formatoint
,int[]
matriz.fonte