Você deve escrever um programa ou função que, dada uma lista de números inteiros positivos, multiplique cada elemento pelo menor número inteiro positivo possível, para criar uma lista estritamente crescente.
Por exemplo, se a entrada for
5 4 12 1 3
as multiplicações serão
5*1=5 4*2=8 12*1=12 1*13=13 3*5=15
e a saída será a lista crescente
5 8 12 13 15
Entrada
- Uma lista de números inteiros positivos contendo pelo menos 1 elemento
Saída
- Uma lista de números inteiros positivos
Exemplos
9 => 9
1 2 => 1 2
2 1 => 2 3
7 3 => 7 9
1 1 1 1 => 1 2 3 4
5 4 12 1 3 => 5 8 12 13 15
3 3 3 8 16 => 3 6 9 16 32
6 5 4 3 2 1 => 6 10 12 15 16 17
9 4 6 6 5 78 12 88 => 9 12 18 24 25 78 84 88
8 9 41 5 12 3 5 6 => 8 9 41 45 48 51 55 60
15 8 12 47 22 15 4 66 72 15 3 4 => 15 16 24 47 66 75 76 132 144 150 153 156
Este é um código de golfe, para que o programa ou função mais curto ganhe.
Curiosidade: o último elemento da saída para a entrada N, N-1, ... ,1
parece ser o (N+1)th
elemento da sequência A007952 . Se você encontrar uma prova, será bem-vindo incluí-la na sua resposta de golfe ou publicá-la como um comentário.
code-golf
math
number
arithmetic
randomra
fonte
fonte
Respostas:
Gelatina ,
65 bytesA primeira resposta da Jelly
antes de @Dennis acordar e me vencer.Experimente online!Explicação
Obrigado a @Dennis por -1 byte.
fonte
:‘×µ\
salva um byte.JavaScript (ES6), 28
Editar Conforme sugerido por @Patrick Roberts,
p
pode ser um parâmetro não inicializado. Contagem de mesmos bytes, mas evite usar uma variável globalTESTE
fonte
f=a=>a.map(n=>a+=n-a%n,a=0)
. Mas não é o meu algoritmo (bobo mim) então eu vou manter o meu como é e upvote arossPython 2,
6764 bytesPrimeiro tente o código de golfe, para que as dicas sejam apreciadas.
fonte
print l
vez dereturn l
salvar outro byte. Bom trabalho!PHP,
55464241 bytesUsa codificação ISO 8859-1.
Execute assim (
-d
adicionado apenas para estética):~ß
para gerar um espaço.fonte
$a+0
por+$a
. Além disso, você pode assumir que a entrada nunca terá um0
, portanto, você pode substituí-lo$a+0&&print
por simplesmente+$a&print
. Na verdade, você pode até fazer$a&print
, já que em PHP"0" == 0 == 0.0 == false
. Mas pode não ser necessário se você apenas usar umecho
, eu acho.and
não funcionará (em oposição ao lógico), nem o eco funcionará dessa maneira. Desde que estou recebendo informações da CLI, o primeiro argumento é o-
que eu quero pegar em vez de imprimir um zero. Tentephp -r 'print_r($argv);' foo
. No entanto, você salvou 1 byte com sua primeira sugestão, thx.for(;$a=$argv[++$i];)echo$l+=$a-$l%$a,' ';
? Tem 42 bytes e ignora o primeiro elemento.a^A
, mas isso daria muitos avisos (os avisos são ignoráveis). Não mudará o número de bytes de forma alguma, mas certamente parece diferente.Haskell (
3028.25 bytes)Versão expandida
Explicação
scanl1
permite dobrar uma lista e acumular todos os valores intermediários em outra lista. É uma especialização descanl
, que tem o seguinte tipo:Portanto, tudo o que precisamos é de uma função adequada que inclua dois o último elemento da nossa lista (
acc
na versão expandida) e o que desejamos processar (next
na versão expandida) e retorne um número adequado.Podemos derivar facilmente esse número dividindo o acumulador pelo próximo e exibindo o resultado.
div
cuida disso. Depois, basta adicionar1
para garantir que a lista esteja realmente aumentando (e que não terminemos0
).fonte
( ... )
por$ ...
e acho que contou uma nova linha final que pode ser omitida:scanl1$\x y->y*div x y+y
24 bytes.(...)
vs$
, pois ele$\
é analisado como operador e eu precisaria de um único espaço depois$
.scanl1(...)
é uma função sem nome. Quanto a$
vs()
.: você está certo, meu erro.C ++,
63.6057 bytesFunciona no local dado um intervalo
[first, last)
. Originalmente escrito como variante de modelo, mas era mais longo:Versão extendida
fonte
CJam, 13 bytes
Entrada como uma lista no estilo CJam. A saída é separada por avanço de linha.
Teste aqui.
Explicação
O valor final é deixado na pilha e impresso automaticamente no final.
fonte
Mathematica,
36.32 bytesTeste
fonte
Perl, 17 + 3 = 20 bytes
Requer
-p
e-l
sinalizadores:Explicação:
fonte
Python (3.5),
6362 bytesTeste
Solução anterior
algumas soluções recursivas, mas maiores
fonte
r+=[…]
, você pode usarr+=…,
r=[0]
no parâmetro padrãor
tornar-se não-localBraquilog , 12 bytes
Por estranho que pareça, tentar multiplicar cada variável por um número começará tentando multiplicar por 2 e não por 0 ou 1. Isso parece funcionar e supera as outras implementações do Brachylog
Explicação
Experimente online!
fonte
Braquilog , 54 bytes
Explicação
fonte
Pyth, 11
Suíte de teste
Reduz cumulativa, uma redução que retorna todos os valores intermediários, começando com
0
. Como a entrada é garantida para conter apenas números inteiros positivos, isso é aceitável. Em cada etapa, pegamos o valor antigo, dividimos pelo novo valor e adicionamos1
, depois multiplicamos pelo novo valor.fonte
C, 79 bytes
Ungolfed
fonte
p=p/x*x+x
funcionaria?PowerShell, 26 bytes
Recebe a entrada como uma matriz explícita, por exemplo,
> .\sort-by-multiplying.ps1 @(6,5,4,3,2,1)
via$args[0]
.Em seguida, fazemos um loop forçado com isso
|%{...}
e cada iteração executa mágica . Brincadeira, usamos o mesmo truque de módulo que outras respostas (adereços para @aross porque eu o vi lá primeiro).Os parênteses de encapsulamento
(...)
garantem que o resultado da operação matemática seja colocado no pipeline e, portanto, produzido. Se os deixássemos de fora, nada seria produzido, pois a$l
variável é coletada como lixo após a conclusão da execução.Exemplo
fonte
Japonês, 11 bytes
Teste online!
Como funciona
fonte
05AB1E , 11 bytes
Código:
Experimente online!
Explicação:
Usa a codificação CP-1252.
fonte
Referência 0.15 , 17 bytes
Experimente aqui!
Explicação
Essencialmente, o registro mantém o membro mais recente da lista ascendente e isso é dividido pela entrada e incrementado para obter o multiplicador para o próximo membro. O recurso toroidal do campo de código de Minkolang significa que ele faz um loop horizontalmente, sem a necessidade
()
ou[]
loops.fonte
Braquilog , 21 bytes
Experimente online!
Usa a soma dos valores de entrada como o limite superior para os coeficientes C. Muito lento, o tempo limite do TIO é excedido em comprimentos de lista de entrada além de 5 ou 6 (também dependendo da soma dos valores). Mas não tão lento quanto a minha versão original, que requer pequenas listas de até 3 elementos, com pequenos valores, para não atingir o tempo limite:
21 bytes
Experimente online!
fonte
C (gcc) , 37 bytes
Experimente online!
fonte
Python 2 , 53 bytes
Experimente online!
k*x>y
implicak>y/x
; então o menork
pode ser ék=floor(y/x)+1
. Como no Python 2.7, a divisão inteira já é tomada comofloor
, queremosk=y/x+1
ek*x = (y/x+1)*x = y/x*x+x
.fonte
Oracle SQL 11.2, 210 bytes
Sem golfe
fonte
Esquema Chez (140 bytes)
Versão Golfed:
Versão Ungolfed:
Experimente Online!
fonte
* m(car l)
pode ser*(car l)m
.K (oK) , 11 bytes
Experimente online!
fonte